22
Running Lagopus on Xeon D Jun 10, 2015 Masaru OKI @masaru0714

Running lagopus on Xeon D

Embed Size (px)

Citation preview

Running Lagopus on Xeon DJun 10, 2015Masaru OKI @masaru0714

Xeonとは

Intelのワークステーション、サーバー向けCPUブランドであり、中身は世代によってさまざま

1998年 Pentium II Xeonが最初の製品

現行品のグレードはE3, E5, E7に別れる

● 大雑把に言えばE3がCore i7相当以上● E5,E7はコア数増やSMP対応など

Xeon D

● Xeonブランドでは初のSoC (System on Chip)● 2015年1Q出荷● Broadwellベースでメモリコントローラを内蔵● 10GbE MACを2つ内蔵● 初期リリースは2モデル、TDPは45W

○ Xeon D-1540 8core 16thread, 2.0GHz○ Xeon D-1520 4core 8thread, 2.2GHz

Xeon Dマザーボード

● SUPERMICRO X10SDV-F, X10SDV-TLN4F○ 他社からもいくつか発表されている

● Mini-ITX, Xeon D-1540オンボード(ファンつき)● DDR4 ECC/nonECC DIMM x 4(max128GB)● IPMI対応● X10SDV-FはGbE * 2 (SoCの10GbEは未使用)● X10SDV-TLN4FはGbE * 2 + 10GbE * 2 (copper)

X10SDV-TLN4F

OSをインストールしてみる

● USB DVDドライブをつないでそこから入れる● 今回入れたOSはUbuntu 14.04.2LTS server

○ 10GbEは見えない可能性大なのでGbEを結線○ すんなり入った。○ GbEはem0, em1○ 10GbEは予想通り見えなかった

Xeon Dの性能はどの程度?

● ループバックインタフェースにiperfする○ CPU処理速度とメモリアクセスの測定になります○ 10GbE扱える力があるか確認してみようという趣旨

● iperf: ネットワークスループットの測定ツール○ iperf -sを動かすホストとiperf -cの間の計測○ 単一あるいは複数セッションをTCP, UDPで計測できる○ 負荷がかかるのでLANの測定にとどめましょう○ 今回は同一ホストでiperf -sとiperf -cを動かす

iperfによる性能比較結果

Xeon D-1540は約40Gbpsの性能。

-P 4(4本並列)で100Gbpsを超えた。

10GbE2本は余裕。

性能比較(clockあたりの速度を計算)

Broadwell, Haswell, IvyBridgeの順

Xeon D優秀。

Atomはやや落ちる。

AMDは参考値

● CPU自体古い● OSがNetBSD● メモリもDDR2

iperfによる性能比較(表)

メモリはDDR3(例外 Xeon DがDDR4, AMDがDDR2)CPU iperf speed (Gbps) CPU clock(GHz) Gbps/clock

Xeon E3-1231v3 63.8 3.4 18.76

Xeon D-1540 39.7 2.0 19.85

Xeon E3-1105Cv2 25.7 1.8 14.27

Atom C2758 13.8 2.4 5.75

Celeron J1900 12.3 2.0 6.15

PhenomII X6 1095T 8.36 3.2 2.61

SoC内蔵10GbE(10GBaseT)が使えるか?

● Ubuntu 14.04LTSからは見えなかったorz● 新しいLinux kernelからも見えない

○ 少なくとも、PCI IDが未知と思われる

● Intel DPDKは2015年6月10日時点で未対応○ X540ベースだがcopper PHYを扱えない○ 使う設定で起動させるとエラー終了してしまう

LinuxのI/Fとして認識させる

IntelがLinuxドライバのソースを配布しているhttps://downloadcenter.intel.com/ja/download/24941

利用条件に同意してダウンロード、展開して

cd src; sudo make installrmmod ixgbe; modprobe ixgbe

見えました(Ubuntu 14.04.2LTSにて)$ ethtool eth0

Settings for eth0:

Supported ports: [ TP ]

Supported link modes: 1000baseT/Full

10000baseT/Full

Supported pause frame use: No

Supports auto-negotiation: Yes

Advertised link modes: 1000baseT/Full

10000baseT/Full

Advertised pause frame use: Symmetric

Advertised auto-negotiation: Yes

Speed: 10000Mb/s

em0: i350 (GbE)em1: i350 (GbE)eth0: X540 (10GbE)eth1: X540 (10GbE)

netnsを使って動作確認

1. sudo ip netns exec NET0 iperf -s2. sudo ip netns exec NET1 iperf -c 172.21.0.1------------------------------------------------------------

Client connecting to 172.21.0.1, TCP port 5001

TCP window size: 85.0 KByte (default)

------------------------------------------------------------

[ 3] local 172.21.0.2 port 52119 connected with 172.21.0.1 port 5001

[ ID] Interval Transfer Bandwidth

[ 3] 0.0-10.0 sec 10.9 GBytes 9.40 Gbits/sec

DPDKでXeon D 10GbEを動かす

● DPDKのドライバ(PMD)はFreeBSDベース● FreeBSD-CURRENTがXeon D対応している!

○ 2015年5月1日にXeon D対応コードがcommitされた

● コードを持ってきて移植(ほぼパクり)

無事認識しました

EAL: PCI device 0000:03:00.0 on NUMA socket 0EAL: probe driver: 8086:15ad rte_ixgbe_pmdEAL: PCI memory mapped at 0x7fffc0000000EAL: PCI memory mapped at 0x7fffc0200000PMD: eth_ixgbe_dev_init(): MAC: 7, PHY: 6PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x15adEAL: PCI device 0000:03:00.1 on NUMA socket 0EAL: probe driver: 8086:15ad rte_ixgbe_pmdEAL: PCI memory mapped at 0x7fffc0204000EAL: PCI memory mapped at 0x7fffc0404000PMD: eth_ixgbe_dev_init(): MAC: 7, PHY: 6PMD: eth_ixgbe_dev_init(): port 1 vendorID=0x8086 deviceID=0x15ad

DPDKの変更部分のコード

DPDKのdiffをいちおう用意した

Intelさんが公式に対応パッチを入れてくれるはず

と思って1ヶ月、まだ入らないのでこっそり公開https://gist.github.com/iMasaruOki/682cb95779de39b38bdf

待てない+試してみたい方はどうぞ(もちろん無保証ですが)

当時のmaster向けなのでrejectしたら手でなおしてください

Lagopusで10GbEの動作確認

● OpenFlowソフトウェアスイッチ○ コントローラと制御通信する○ コントローラからの指示でパケット送信可能○ 受信パケットの処理ルールをコントローラから登録

● 論理上複数のスイッチを扱える● 2つのスイッチそれぞれに10GbEを割り当てる● 2つの10GBaseTポートをケーブルで接続● スイッチ間の通信ができるかを確認してみる

Lagopus動作確認テストの構成

Xeon Dマシン

Lagopus(単一プロセス動作)

bridge-1

bridge-2

10GbE portid 0

10GbE portid 1DPDK

Ryu(OFコントローラ)

Lagopus実行

$ sudo lagopus -d -- -cff -n2 -- -p3(中略)NIC RX ports: port 0 (queue 0) port 1 (queue 0)(中略)NIC TX ports: 0 1

OpenFlowテストを実行 (一部抜粋)action: set_field: 38_TUNNEL_IDethernet/ipv4/tcp-->'actions=set_field:12345->tunnel_id,goto_table:1','table_id:1,tunnel_id=12345,actions=output:2' OKethernet/ipv6/tcp-->'actions=set_field:12345->tunnel_id,goto_table:1','table_id:1,tunnel_id=12345,actions=output:2' OKethernet/arp-->'actions=set_field:12345->tunnel_id,goto_table:1','table_id:1,tunnel_id=12345,actions=output:2' OKgroup: 00_ALL..........2Mbps(ethernet/ipv4/tcp)-->'in_port=1,actions=group:all(actions=output:2/actions=output:3)' OK

まとめと今後

● Xeon Dは性能もよく、バランスがいい● 10GbaseTを動かすにはひと手間掛かる

○ Windowsは添付DVDにドライバが入ってそうでした

● Lagopus+DPDK動きます!● 今後

○ 10Gの通信相手が欲しい(もう1台? NIC買う?)○ 10GBaseTのスイッチはお高いけどちょっと欲しい○ SoC内蔵10GbEの限界性能を確認したい