Más contenido relacionado
La actualidad más candente (20)
Similar a DPDKを用いたネットワークスタック,高性能通信基盤開発 (20)
DPDKを用いたネットワークスタック,高性能通信基盤開発
- 2. 自己紹介
Hiroki SHIROKURA
- @slankdev
- Security Camp 15,16tutor
- 15年間 テニスプレーヤー (卒業)
- 2年間 パケリスト (卒業)
- 高速パケット仙道にすすむ (修行中)
開発物
- パケット解析ライブラリ
- Wireshark TUI版 のようなもの
- DPDKを用いたネットワークスタック
- DPDKを用いた高性能通信基盤(開発中)
ラボユース
- C++ソフトウェア開発
- テーマ : 高性能通信, C++11
- メンター: 光成滋生氏
- 3. 活動の流れ2016年度
4, 5月
- DPDKの入門
- 使い方理解やドキュメント読経
6,7月
- ネットワークスタック開発のための
勉強開始
- BSD, Linuxの実装を見る
- C++に苦しみ、できないと
光成さんに泣きつく
- ネットワークスタック開発開始
8月 セキュキャンチューター , インターン
9,10,11,12月
- ARPの実装
- IP, ICMPの実装
- UDPの実装
- TCPの実装
- ここで一応目標達成
- 高性能通信勉強開始 (次の目標)
1, 2, 3月
- DPDKで高性能通信をするための勉強
- こまごましたものを実装しまくる
- 高速PCルーターなフレンズにスパイ活動
- 4. 活動の流れ2016年度
4, 5月
- DPDKの入門
- 使い方理解やドキュメント読経
6,7月
- NW-Stack開発のための勉強開始
- BSD, Linuxの実装を見る
- C++に苦しみ、できないと
光成さんに泣きつく
- ネットワークスタック開発開始
8月 セキュキャンチューター , インターン
9,10,11,12月
- ARPの実装
- IP, ICMPの実装
- UDPの実装
- TCPの実装
- ここで一応目標達成
- 高性能通信勉強開始 (次の目標)
1, 2, 3月
- 真のDPDKの使い方勉強
- こまごましたものを実装しまくる
- 高速PCルーターなフレンズにスパイ活動
要約:
ネットワークスタック実装のための勉強
ネットワークスタック設計
ネットワークスタック実装
高性能通信の勉強
高性能通信の実験
高性能通信の実験を行うためのフレームワークを設計/開発
その他ツールをすこし開発
- 7. IP
ラボユース長期目標 理想と現実
結果: Smallなネットワークスタック
- http://github.com/slankdev/stcp
- 実装した: Ether,ARP,IP,UDP,ICMP,TCP
- BSDとはだいぶ設計思想が違う
- マルチコアをほとんどつかってない
- DPDKのAPIと手実装がごちゃ混ぜ
- TCPの完成度以外は文句はなし
ifnet ifnet ifnet
dataplane
Ethernet
ARP
TCP UDPICMP
TCPsock
TCPsock
TCPsock
UDPsock
UDPsock
UDPsock
UDPsock
UDPsock
UDPsock
TCPsock
TCPsock
TCPsock
APIs
CPU0 CPU1
APP1
CPU2
APP2
NIC NIC NIC NIC NIC
青: STCP
灰: HW
- 8. DUTTESTER
ネットワークスタック開発
レイテンシ計測: 構成
計測ツール: Ping/Hping3 (高機能なping)
マシンスペック
- TESTER
- CPU : Core i7 2700K @3.5GHz 8Core
- NIC : Intel X540-T2 10GbE
- OS : Ubuntu 16.04 LTS
- DPDK: Version 16.07 LTS
- NetworkStack: STCP (1coreのみ使用)
- DUT
- CPU : Core i7 3930K @3.2GHz 12Core
- NIC : Intel X540-T2 10GbE
- OS : Ubuntu 16.04LTS
- NetworkStack: Linux 4.8.0-36-generic
10GNIC10GNIC
比較対象
- Linuxカーネルのnative NW Stack
- STCP (自作のNW Stack)
- 12. 高性能通信基盤開発: ハードウェア支援機構
RSS (Receive Side Scaling)
MEM
CPU
NIC
NICが受け取ったパケットを HWで複数のCPUに振り分
けるためハードウェア支援機構
NICにQueueを持たせ、それぞれ別のメモリに DMAす
る、それらを別々のコアから監視して、スケールアウトさ
せる
Flowは4tuple (Srcip,Dstip,Srcport,Dstport)
使い方がよく分からなかったが
今週やっと方法がわかった。
パフォーマンス計測はまだ
Rx
Que
Rx
Que
Tx
Que
Hash func
CoreCore CoreCore
Rx
Thread
Rx
Thread
Tx
Thread
Thread
Phy
Dscrptr
Indirection
Table
Dscrptr Dscrptr
- 13. 高性能通信基盤開発
スレッドパターンの最適化: Forwarderの場合
NIC0 Rx
NIC1 Rx
Rx
Thrd
NIC0 Tx
NIC1 Tx
Tx
Thrd
Wk
Thrd
NIC0 Rx
NIC0 Tx
Port0
Thrd
NIC1 Rx
NIC1 Tx
Port1
Thrd
Wk
Thrd
TxRx独立パターン
Rx 監視スレッド/Tx 監視スレッド
パケット処理を行うスレッド
ポート独立パターン
Port0 監視スレッド/Port1 監視スレッド
パケット処理を行うスレッド
ポートTxRx独立パターン
Port0 Rx 監視スレッド/Port0 Tx 監視スレッド
Port1 Rx 監視スレッド/Port1 Tx 監視スレッド
パケット処理を行うスレッド
フロー独立パターン
Flowスレッド 0→1
Flowスレッド 1→0
フローTxRx独立パターン
Flowスレッド 0→1/Flowスレッド 1→0
Port0 Rx 監視スレッド/Port0 Tx 監視スレッド
Port1 Rx 監視スレッド/Port1 Tx 監視スレッド
NIC0 Rx
NIC1 Rx
Port0
Rx
Thrd
NIC0 Tx
NIC1 Tx
Wk
Thrd
Port1
Rx
Thrd
Port0
Tx
Thrd
Port1
Tx
Thrd
NIC0
Rx
NIC1
Rx
NIC1
Tx
NIC0
Tx
Flow 1→0 Thrd
Flow 0 →1 Thrd
NIC0
Rx
NIC1
Rx
Rx0
Thrd
NIC1
Tx
NIC0
Tx
Rx1
Thrd
Tx1
Thrd
Tx0
Thrd
Flow 1→0
Thrd
Flow 0→1
Thrd
何を安定させたいかに
合わせて選択する
- 各ポートを安定
- tx,rxを安定
- フローを安定
10GbEくらいだと結構余裕
で性能がでた。
2portのNICは
性能が出しきれない ?
RSSで解決できるかも