infinibandを自宅に導入 & Win-Ubuntu間でIBネットワーク構築(FDR 56Gbps/40GbE)
格安で超低遅延で高速なネットワークが組めるということで、自宅にinfinibandを導入してみました。
HCA(infinibandカード)
メーカー
中古で転がってるのは大体Mellanox社製とそのOEMです。
その中で、中古の価格相場的に、現在はConnectX-3が一番お手頃でコスパよさそうです。ConnectX-2はWin10に対応してないので、注意が必要です。
速度
ConnectX-3のHCAでは40GbpsのQDRと56GbpsのFDRで二種類あります。
Mellanoxから出てるやつだと、QDRなら型番のケツにQCBT、FDRはFCBTって書いてます。
OEM版は対応するやつをそれぞれ調べてみてください。
動作モード
VPI対応のHCAは、infinibandであることを捨ててEthernetモードに変身することもできます。
OEMとかによって変わるっぽいですが、FDRのカードだと56GbEか40GbEカードに化けることができる訳です。
接続
接続はPCIE Gen3のx8接続です。
ちなみにうちのメイン機のRyzenマシンはGen2のx4しか空いてなかったので最高20Gbpsしか出せないです…
参考、PCIEのレーンと帯域の関係
https://ja.wikipedia.org/wiki/PCI_Express#%E8%BB%A2%E9%80%81%E9%80%9F%E5%BA%A6
ブラケット
中古で出品されてるやつはブラケットが大体ロープロなので、普通のPCにつけるには外して何らかの手段で固定するか、3Dプリンターでフルハイトのブラケットを作らないといけません。
3Dモデル結構いっぱいありました。
https://www.yeggi.com/q/mellanox+connectx+3/
消費電力
消費電力はMCX353A-FCBTの場合、パッシブケーブルでおよそ6~8Wのようです。
まあそれなりに熱いので風当てるか無理やり4cmファン付けるのがおすすめです。

ケーブル
ケーブルの種類
HCAのQDR、FDRで使うケーブルはQSFPかQSFP28があります。
規格上ではQSFPは40Gbps、QSFP28は100Gbpsまでとなっていて、端子には互換性があります。
FDRなら56Gbpsなので一応後者がいいかと思います。
銅線?光ケーブル?
これらのケーブルは銅と光ケーブルの二種類あります。
QSFPで銅は5mくらいまでの短距離、光ファイバーは100mくらいのちょっと長い距離に対応してます。
なので、中古で手に入れようとするとおそらく銅ケーブルを買うことになると思います。
距離と速度はここを参照
http://www.viops.jp/ibday02-BASIC-xsigo.pdf
また、光だと両端についてるメディアコンバータの性能によって、QSFPでも40Gbps出ないかもしれません。
例えば光ケーブルでQSFPのSAS用として売られていたとすると、24Gbpsまでしか出ない可能性があります。ここら辺は試したことないので分かりません。
http://www.aim-ele.co.jp/products/qsfp/
購入したもの
HCA
FDR 56Gbps/40GbE
Fujitsu CA05954-2101(MCX353A-FCBTのOEM)
ヤフオクで二枚4000円ほどでした
ケーブル
5mの銅線QSFPケーブル買いました。パッシブケーブルです。
SAS用って書いてました。ヤフオクで1500円ほど。
ファームウェアのアップデート
まずファームウェアアプデしときます。
Windows側のマシンで作業しました。
アプデツールのMellanox Firmware Toolsをここからダウンロードしてインストールします。https://www.mellanox.com/products/adapter-software/firmware-tools
バージョン確認
管理者権限のCMDで実行してください。
(アプデ後に実行したのでバージョンは最新になってます)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | > cd "\Program Files\Mellanox\WinMFT" > mst status -v MST devices: ------------ mt4099_pci_cr0 bus:dev.fn=05:00.0 mt4099_pciconf0 bus:dev.fn=05:00.0 > flint -d mt4099_pci_cr0 query Image type: FS2 FW Version: 2.42.5000 FW Release Date: 5.9.2017 Product Version: 02.42.50.00 Device ID: 4099 Description: Node Port1 Port2 Sys image GUIDs: f45214030018c1d0 f45214030018c1d1 f45214030018c1d2 f45214030018c1d3 MACs: f4521418c1d0 f4521418c1d1 VSD: PSID: FJT1060100019 |
ファームウェアのダウンロード
ファームウェア自体はOEM品だとMellanoxのは通らないので、各社サイトからダウンロードします。
今回は富士通のOEM品なので富士通からダウンロードしました。
https://azby.fmworld.net/app/customer/driversearch/ia/drviadownload?driverNumber=F1025573
落としたファームウェア(242500F1.bin)は同じ階層に入れておきます。(C:\\Program Files\Mellanox\WinMFT)
バックアップ
1 2 | > flint -d mt4099_pci_cr0 ri org_fw.bin > flint -d mt4099_pci_cr0 dc org_fw.ini |
落としたファームのチェック
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | > flint -i 242500F1.bin FS2 failsafe image. Start address: 0x0. Chunk size 0x80000: NOTE: The addresses below are contiguous logical addresses. Physical addresses on flash may be different, based on the image start address and chunk size /0x00000038-0x0000065b (0x000624)/ (BOOT2) - OK /0x0000065c-0x0000297f (0x002324)/ (BOOT2) - OK /0x00002980-0x00003923 (0x000fa4)/ (Configuration) - OK /0x00003924-0x00003967 (0x000044)/ (GUID) - OK /0x00003968-0x00003af3 (0x00018c)/ (Image Info) - OK /0x00003af4-0x00010e8b (0x00d398)/ (DDR) - OK /0x00010e8c-0x00011edf (0x001054)/ (DDR) - OK /0x00011ee0-0x000122af (0x0003d0)/ (DDR) - OK /0x000122b0-0x00050287 (0x03dfd8)/ (DDR) - OK /0x00050288-0x0005510b (0x004e84)/ (DDR) - OK /0x0005510c-0x000595df (0x0044d4)/ (DDR) - OK /0x000595e0-0x0005a0d7 (0x000af8)/ (DDR) - OK /0x0005a0d8-0x000891cb (0x02f0f4)/ (DDR) - OK /0x000891cc-0x0008cd77 (0x003bac)/ (DDR) - OK /0x0008cd78-0x000a1c6b (0x014ef4)/ (DDR) - OK /0x000a1c6c-0x000a1d73 (0x000108)/ (DDR) - OK /0x000a1d74-0x000a6df7 (0x005084)/ (DDR) - OK /0x000a6df8-0x000a85f3 (0x0017fc)/ (Configuration) - OK /0x000a85f4-0x000a8667 (0x000074)/ (Jump addresses) - OK /0x000a8668-0x000a8f9f (0x000938)/ (FW Configuration) - OK /0x00000000-0x000a8f9f (0x0a8fa0)/ (Full Image) - OK -I- FW image verification succeeded. Image is bootable. |
焼く
1 | > flint -d mt4099_pci_cr0 -i 242500F1.bin burn |
ネットワーク構築
infinibandでIP通信をするにはIPoIB(IP over infiniband)を設定します。
QDRは8b/10b変換をするため、実効転送レートは40Gbpsから32Gbps、
FDRは64b/66b変換なので、56Gbpsから54.55Gbpsになるらしいです。https://ja.wikipedia.org/wiki/InfiniBand#%E8%BB%A2%E9%80%81%E3%83%AC%E3%83%BC%E3%83%88
構成
今回はスイッチは使わずにPCを直結しました。
サーバー 192.168.250.10
Ubuntu Server 20.04
Core i3 6100T
ECC 2133MHz 4GB*4
クライアント 192.168.250.11
Windows 10 Pro
Ryzen 5 3600
3200MHz 8GB*2
なお、空いているPCIEのポートがGEN2のx4しかなかったので最高20Gbpsまでしか出ません…
それではネットワークを構築していきます
サーバー側(Ubuntu 20.04)
モジュールを追加します。
1 | $ sudo nano /etc/modules |
1 2 3 4 5 | mlx4_ib rdma_ucm ib_umad ib_uverbs ib_ipoib |
再起動したら、カーネル標準のドライバをインストールします。
1 2 | $ wget http://us.archive.ubuntu.com/ubuntu/ubuntu/pool/universe/libm/libmlx4/libmlx4-1_1.0.6-1_amd64.deb $ sudo sudo dpkg -i libmlx4-1_1.0.6-1_amd64.deb |
追加で必要なパッケージをインストールします。
1 | $ sudo apt install infiniband-diags opensm ibverbs-utils perftest |
infinibandネットワーク内では、どこか一か所でサブネットマネージャーと呼ばれるものを動作させる必要があります。
マネージドスイッチがあればそいつがやってくれますが、直結したりアンマネージドスイッチに繋ぐ場合はサーバー側で動作させなければいけません。
1 | $ sudo systemctl start opensm |
自動起動したかったのですが、enableを打ってもなんか失敗するので強引ですがcrontabに起動時実行するように設定しました。
1 2 | $ sudo systemctl enable opensm Failed to enable unit: Unit /run/systemd/generator.late/opensmd.service is transient or generated. |
1 2 | $ sudo crontab -e @reboot systemctl start opensm |
あとはip aするとibなんたらってデバイスが出てくると思うので、こいつをnetplanでアドレス振っておけば設定完了です。

クライアント側(Windows 10)
infinibandのドライバーは、OpenFabricsというところが標準版を出して、それを各社がカスタマイズしてリリースしてるらしいです。
WindowsではOpenFabrics版とMellanox版の2種類あります。
しかし、OpenFabricのほうは長らく更新されておらずWindows10では使えないためMellanoxのほうをインストールしました。
ここからダウンロードします。ConnectX-3,X-3 ProはWinOF、X-4,X-5はWinOF2を選んでください。
https://www.mellanox.com/products/adapter-software/ethernet/windows/winof-2
入れたらネットワークアダプターにIPoIBアダプターが出現するのでそこからアドレスを振っておきます。

pingを鯖に飛ばせたら設定完了です。
使ってみる
ベンチマーク
こちらの環境ではクライアント側がGen2のx4で繋がってるので、理論値で最高で20Gbpsまでしか出ません…
特に何もいじってない状態でiperf3を実行したところ、10Gbps前後でした。
なんか微妙です。

MS製のNtttcpでも計ってみました。
Linuxだと自分でコンパイルしなきゃいけません。
https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-bandwidth-testing
若干速度上がりました。
マルチコア使ってくれるからでしょうか?鯖機のCPUもっと強かったらもっと速度出たかもしれないです。

あと一応チューニングできそうなこと書いてみます。
チューニング
省電力設定を切ってみる
互いのPCの省電力設定(Cなんとかステートとか)を全部切ってみる。
MTUを上げてみる
MTUを上げると通信の制御回数が減るのでCPUの負荷が減ります。多分。
infinibandの接続モードはconnnectedモードとdatagramモードがあります。
connectedモードではMTUを上げられますが、datagramと比べて若干遅延が増えます。
datagramではMTUが強制的に2044、connectedモードでは65520までに設定できます。
しかし!ubuntu側ではこの接続モード変更できるのですが、windows側のドライバに変える機能はなくdatagramモード固定のようです。
正確にはMellanox版にはなくて標準版のほうにしかないっぽいです。
なのでMTUは上げられません。
残念です…
最近のコメント