xeon dとlagopusと、pktgen dpdk

Post on 12-Aug-2015

282 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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新バージョン、もう少しお待ちください

top related