Running Lagopus
on Xeon D
Jun 10, 2015
Masaru 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 install
rmmod 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 -s
2. 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 0
EAL: probe driver: 8086:15ad rte_ixgbe_pmd
EAL: PCI memory mapped at 0x7fffc0000000
EAL: PCI memory mapped at 0x7fffc0200000
PMD: eth_ixgbe_dev_init(): MAC: 7, PHY: 6
PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x15ad
EAL: PCI device 0000:03:00.1 on NUMA socket 0
EAL: probe driver: 8086:15ad rte_ixgbe_pmd
EAL: PCI memory mapped at 0x7fffc0204000
EAL: PCI memory mapped at 0x7fffc0404000
PMD: eth_ixgbe_dev_init(): MAC: 7, PHY: 6
PMD: 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_ID
ethernet/ipv4/tcp-->'actions=set_field:12345->tunnel_id,goto_table:
1','table_id:1,tunnel_id=12345,actions=output:2' OK
ethernet/ipv6/tcp-->'actions=set_field:12345->tunnel_id,goto_table:
1','table_id:1,tunnel_id=12345,actions=output:2' OK
ethernet/arp-->'actions=set_field:12345->tunnel_id,goto_table:1','table_id:1,
tunnel_id=12345,actions=output:2' OK
group: 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の限界性能を確認したい

Running lagopus on Xeon D