Xeon dとlagopusと、pktgen dpdk
-
Upload
masaru-oki -
Category
Technology
-
view
282 -
download
5
Transcript of Xeon dとlagopusと、pktgen dpdk
Xeon DとLagopusと、Pktgen-DPDKJuly 24, 2015Masaru OKI @masaru0714
今回やってみたこと
Xeon Dマシンを2台使って
Xeon D + Lagopusの性能を確認してみる
トラフィックジェネレータとして
Pktgen-DPDKを使ってみる
キーワード
● Xeon D○ 2015年出荷、10G MACを内蔵したSoCのXeon○ 今回使うのはXeon D-1540 (2.0GHz; 8C16T; TDP45W)
● Lagopus○ オープンソースのOpenFlowソフトウェアスイッチ
● Pktgen-DPDK○ DPDKを用いたオープンソースのトラフィックジェネレータ○ Linux kernelのpktgenっぽいものだが直接関係はない
接続構成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
ハードウェア
● 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)
Xeon Dマシン近影
ソフトウェア
● 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
Pktgen-DPDKのソース取得とビルド
git clone git://dpdk.org/apps/pktgen-dpdkexport RTE_SDK=$HOME/src/dpdkexport RTE_TARGET=buildcd pktgen-dpdk; make
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メモリチャネル
Pktgen-DPDKの画面
受信(fps)と送信(fps)を見る。
Mbits/sはあてにならない。
Pktgen-DPDK使い方
Pktgen> start 3 ポート3からパケット送信開始
Pktgen> stop 3 ポート3の送信停止
Pktgen> clear all 全ポートのカウンタ初期化
Pktgen> cls 画面が乱れたときに再描画
Pktgen> start all 全ポート一斉送信開始
Pktgen> stop all 全ポート停止
Pktgen-DPDK自身の性能は?
SFP+ポート同士を直接つないで転送。
ショートパケット性能: 14.5Mfpsワイヤーレートに惜しくも届かず。
Xeon Dマシン(2)
Pktgen-DPDK
SFP+
SFP+
RJ45
RJ45
em1
em2
Lagopusの使用準備
● Lagopusコンパイルとインストール./configure --with-dpdk-dir=$HOME/src/dpdkmake OPT_CFLAGS=-O3 -j 8; sudo make install
● 新lookupの使用はconfigureで選択--enable-mbtree をつけて再コンパイル
lagopus起動時に--no-cacheをつけると新lookupが動く
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ポート使用
パケット順序保証しない
Lagopus設定内容
● コンフィグ全体の説明は大きいので省きます● 設定のポイント
○ Agent関連: channel, controllerを設定○ Dataplane関連: interface, port, bridgeを設定○ ひとつのブリッジに4ポートを割り当てる○ コントローラIPアドレスは127.0.0.1 (自ホスト)
Lagopus設定: channel, controllerchannel { channel01 { dst-addr 127.0.0.1; }}controller { controller01 { channel channel01; }
}
channelと関連付け。roleなどの指定もできます。
自ホストで動くRyuとつなぐのでループバックアドレスを指定。
Lagopus設定: interfaceinterface { 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;などと書きます。
Lagopus設定: portport { port01 { interface interface01; } port02 { interface interface02; } port03 { interface interface03; } port04 { interface interface04; }}
interfaceと関連付け。将来tunnel対応などの拡張によってパラメータが増える予定。
Lagopus設定: bridgebridge { 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ポート番号を関連付け。
Lagopusに流し込むフローエントリ
in_port=1,actions=output:2in_port=2,actions=output:1in_port=3,actions=output:4in_port=4,actions=output:3
テキストそのものでなく、Ryuアプリで上記相当の
OpenFlow flow_modをLagopusに送信。
測定の概要Xeon Dマシン(1)
Lagopus
SFP+
SFP+
Ryu
RJ45
RJ45
em1
em2
Xeon Dマシン(2)
Pktgen-DPDK
SFP+
SFP+
RJ45
RJ45
em1
em2
10GBaseT
10G SFP+Direct attach cable
in_port指定で他方にoutpputするフローエントリを4つ。SFP+間転送と10BaseT間。
測定項目
● Lagopusの動作設定○ flowcache有効/無効/新lookup(試験実装)○ パケットオーダー保証の有無
● Pktgen-DPDK負荷○ ショートパケット○ 送信パターン
■ 全ポート送信(4flow)■ Port1送信→Port0受信(10GBaseT; 1flow)■ Port3送信→Port2受信(SFP+; 1flow)
測定手順
1. Lagopusの設定を保存しておく2. Lagopusをコンパイル、インストール3. Pktgen-DPDK, Lagopus, Ryuを起動4. Pktgen-DPDKでパケット送信を開始(startコマンド)5. TotalRateの値を記録6. Pktgen-DPDKのパケット送信を停止(stopコマンド)
測定結果(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
TotalRate (4flow)
1flow 10GBaseT
1flow SFP+
解説
● 4エントリだとlookup方式での速度差は比較的少ない● 速度はcacheあり > 新lookup > no-cache
○ 数千、数万エントリ投入時の速度は要確認● パケットオーダー保証だと特定コアに処理が集中
○ 並べ替えない方式のため同じflowは同じコアで処理○ HTTのコアは使わない設定で動かしている
● なぜかSFP+のほうが性能が出ている(理由は未調査)
● 番外:pktgen-dpdkで送信停止・再開を繰り返すとよく落ちる
今後とまとめ
● Lagopus + Xeon Dでwire rate出したい○ perfやIntel PCMなどでボトルネックを調査○ lookupの高速化も引き続き取り組みます
● vector txをenableにして測定したい○ gcc4だと逆に速度が低下する。gcc5? icc?
● 個人レベルでXeonや10Gが扱える時代に○ しかしスイッチはまだまだ高いです
● Lagopus新バージョン、もう少しお待ちください