More Related Content
Similar to Xeon dとlagopusと、pktgen dpdk (20)
More from Masaru Oki (20)
Xeon dとlagopusと、pktgen dpdk
- 3. キーワード
● Xeon D
○ 2015年出荷、10G MACを内蔵したSoCのXeon
○ 今回使うのはXeon D-1540 (2.0GHz; 8C16T; TDP45W)
● Lagopus
○ オープンソースのOpenFlowソフトウェアスイッチ
● Pktgen-DPDK
○ DPDKを用いたオープンソースのトラフィックジェネレータ
○ Linux kernelのpktgenっぽいものだが直接関係はない
- 4. 接続構成
Xeon Dマシン(1)
X520-DA2 p1p1
p1p2
Xeon D-
1540
i350-AT2
eth0
eth1
em1
em2
Xeon Dマシン(2)
X520-DA2p1p1
p1p2
Xeon D-
1540
i350-AT2
eth0
eth1
em1
em2
制御
ネットワーク
10GBaseT
10G SFP+
Direct attach cable
Lagopus
Pktgen-
DPDK
- 5. ハードウェア
● SUPERMICRO X10SDV-TLN4F
○ Mini-ITX form factor
○ Xeon D-1540, 10GBaseT * 2, GbE * 2, IPMI
● 8GB ECC DIMM * 4 (32GB)
● 120GB 2.5inch SATA SSD
● X520-DA2 Converged Network Adapter
○ 10GbE * 2 (SFP+)
● 400W Power Supply (SFX)
- 7. ソフトウェア
● OS: Ubuntu 14.04.2 LTS Server amd64
● Hugepage: 1GB/pageを4ページ確保
● ixgbe-4.0.3 (Xeon Dの10GBaseTに対応)
○ DPDKではPMDを使うので不要といえば不要
● DPDK: git先頭(2.1.0-rc1相当)
○ gcc4なのでCONFIG_RTE_IXGBE_INC_VECTOR=n
● Ryu
○ pip install ryu
- 9. Pktgen-DPDKの起動
sudo ./app/app/build/pktgen -cffff -n2 -- -P -
T -m '[1-4:5-8].[0-3:0-3]'
○ -P promiscous mode
○ -T 色つき表示
○ -m [RecvCore:SendCore].[RecvPort:SendPort]
● 白地に黒前提なので背景黒だと見えません
○ しかも終了時に色設定を戻さない……
● ウィンドウを広げないと表示が崩れる(118文字)
DPDKオプション
16コア、2メモリチャネル
- 11. Pktgen-DPDK使い方
Pktgen> start 3 ポート3からパケット送信開始
Pktgen> stop 3 ポート3の送信停止
Pktgen> clear all 全ポートのカウンタ初期化
Pktgen> cls 画面が乱れたときに再描画
Pktgen> start all 全ポート一斉送信開始
Pktgen> stop all 全ポート停止
- 14. Lagopusの起動と設定
● 開発中バージョンを使っています。(0.2(仮))
● 起動
○ sudo lagopus -d -- -cff -n2 -- -pf
○ sudo lagopus -d -- -cff -n2 -- -pf --fifoness none
● lagoshを使って設定する
○ Lagosh> configure
○ Configure# edit テキストエディタで設定編集
○ Configure# commit 設定を動作に反映
○ Configure# save 起動時設定として保存
フォアグラウンド動作 8コア、2メモリチャネル 4ポート使用
パケット順序保証しない
- 16. Lagopus設定: channel, controller
channel {
channel01 {
dst-addr 127.0.0.1;
}
}
controller {
controller01 {
channel channel01;
}
}
channelと関連付け。
roleなどの指定もできます。
自ホストで動くRyuとつなぐので
ループバックアドレスを指定。
- 17. Lagopus設定: interface
interface {
interface01 {
type ethernet-dpdk-phy;
port-number 2;
}
interface02 {
type ethernet-dpdk-phy;
port-number 3;
}
interface03 {
type ethernet-dpdk-phy;
port-number 0;
}
interface04 {
type ethernet-dpdk-phy;
port-number 1;
}
}
port-numberはDPDKのportid。
SFP+を先に使いたくて2, 3を先に
割り当てています。
ethernet-rawsockでraw socket使用。
そのときはdevice eth2;などと書きます。
- 18. Lagopus設定: port
port {
port01 {
interface interface01;
}
port02 {
interface interface02;
}
port03 {
interface interface03;
}
port04 {
interface interface04;
}
}
interfaceと関連付け。
将来tunnel対応などの拡張によって
パラメータが増える予定。
- 19. Lagopus設定: bridge
bridge {
bridge01 {
dpid 1;
controller controller01;
port port01 1;
port port02 2;
port port03 3;
port port04 4;
fail-mode secure;
}
}
controllerとの関連付け。
datapath idを普通に数値で記述。
portとOpenFlowポート番号を関連付け。
- 24. 測定結果(fps)
パケットオーダー Lagopus lookup 1flow 10GBaseT 1flow SFP+ 4flow
保証 cacheあり 2,585,453 6,778,297 9,698,277
no-cache 1,746,086 6,083,367 7,171,101
新lookup 1,941,983 6,391,310 8,507,494
保証しない cacheあり 6,396,016 9,401,647 12,108,205
no-cache 6,393,839 9,411,175 10,976,656
新lookup 6,394,800 9,411,294 10,998,775
- 28. 解説
● 4エントリだとlookup方式での速度差は比較的少ない
● 速度はcacheあり > 新lookup > no-cache
○ 数千、数万エントリ投入時の速度は要確認
● パケットオーダー保証だと特定コアに処理が集中
○ 並べ替えない方式のため同じflowは同じコアで処理
○ HTTのコアは使わない設定で動かしている
● なぜかSFP+のほうが性能が出ている(理由は未調査)
● 番外:pktgen-dpdkで送信停止・再開を繰り返すとよく落ちる
- 29. 今後とまとめ
● Lagopus + Xeon Dでwire rate出したい
○ perfやIntel PCMなどでボトルネックを調査
○ lookupの高速化も引き続き取り組みます
● vector txをenableにして測定したい
○ gcc4だと逆に速度が低下する。gcc5? icc?
● 個人レベルでXeonや10Gが扱える時代に
○ しかしスイッチはまだまだ高いです
● Lagopus新バージョン、もう少しお待ちください