infinibandを自宅に導入 & Win-Ubuntu間でIBネットワーク構築(FDR 56Gbps/40GbE)

格安で超低遅延で高速なネットワークが組めるということで、自宅にinfinibandを導入してみました。
Windows 10 と Ubuntu 20.04 のマシンを直結してネットワークを構築します。


HCA(infinibandのカード)

メーカー

中古で転がってるのは大体Mellanox社製とそのOEMです。
その中でも中古相場的にはConnectX-3が一番お手頃でコスパよさそうでした。ConnectX-2はWindows 7までの対応です。

速度

ConnectX-3のHCAでは40GbpsのQDRと56GbpsのFDRで二種類あります。

Mellanoxから出てるやつだと、QDRなら型番のケツにQCBT、FDRはFCBTって書いてます。
OEM版は対応するやつをそれぞれ調べてみてください。

動作モード

VPI対応のHCAは、infinibandであることを捨ててEthernetモードに変身することもできます。
OEMとかによって変わるっぽいですが、FDRのカードだと56GbEか40GbEカードに化けることができる訳です。

接続

接続はPCIE Gen3のx8接続です。

今回使用したWindows側の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です。普通の10GbE NICくらいですね。
それでもそれなりに熱いので風当てるか無理やり4cmファン付けるのがおすすめです。

消費電力はここ参照
https://www.mellanox.com/related-docs/user_manuals/ConnectX-3_VPI_Single_and_Dual_QSFP_Port_Adapter_Card_User_Manual.pdf


ケーブル

ケーブルの種類

HCAのQDR、FDRで使うケーブルはQSFPかQSFP28があります。

規格上ではQSFPは40Gbps、QSFP28は100Gbpsまでとなっていて、端子には互換性があります。
FDRは56Gbpsなので一応QSFP28がいいのかもしれませんが、実際にはそんなに速度出ないのでQSFPで大丈夫です。

銅線?光ケーブル?

これらのケーブルは銅と光ケーブルの二種類あります。

QSFPで銅は5mくらいまでの短距離、光は100mくらいのちょっと長い距離に対応してます。
中古で手に入れようとするとおそらく銅ケーブルを買うことになると思います。

距離と速度はここを参照
http://www.viops.jp/ibday02-BASIC-xsigo.pdf

光の場合、両端についてるメディアコンバータの性能によってはQSFPでも40Gbpsは出ないかもしれません。
QSFPのSAS用として売られていたとすると24Gbpsまでしか出ないんですかね?(後述の通り実際は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で実行してください。
(アプデ後に実行したのでバージョンは最新になってます)

ファームウェアのダウンロード

OEM品だとMellanoxのファームウェアは通らないので、各社サイトからダウンロードします。
今回は富士通のOEM品なので富士通からダウンロードしました。

https://azby.fmworld.net/app/customer/driversearch/ia/drviadownload?driverNumber=F1025573

落としたファームウェア(242500F1.bin)は同じ階層に入れておきます。(C:\\Program Files\Mellanox\WinMFT)

バックアップ

落としたファームのチェック

焼く


ネットワーク構築

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
PCIE 3.0 x8 に接続

クライアント 192.168.250.11

Windows 10 Pro
Ryzen 5 3600
3200MHz 8GB*2
PCIE 2.0 x4 に接続(20Gbps😭)

ネットワークを構築していきます

サーバー側(Ubuntu 20.04)

モジュールを追加します。

再起動したら、カーネル標準のドライバをインストールします。

追加で必要なパッケージをインストールします。

infinibandネットワーク内では、どこか一か所でサブネットマネージャーと呼ばれるものを動作させる必要があります。
マネージドスイッチがあればそいつがやってくれますが、直結したりアンマネージドスイッチに繋ぐ場合はサーバー側で動作させます。

自動起動したかったのですが、enableを打ってもなんか失敗するので強引ですがcrontabに起動時実行するように設定しました。

あとは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を鯖に飛ばせたら設定完了です。


使ってみる

ベンチマーク

特に何もいじってない状態でiperf3を実行したところ、10Gbps前後でした。
なんか微妙です。

MS製のNtttcpでも計ってみると12Gbpsぐらいで若干向上しました。マルチコア使ってくれるからでしょうか?
https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-bandwidth-testing (Linux版は自分でコンパイル)

他のConnectX-3環境を構築した人の結果を見ても大体10Gbpsちょっとだったので、おそらくこんなもんなんでしょう。
10GbE NICよりは安いので検討の価値はあります。

infinibandが本領を発揮するのはやっぱりIPネットワークではなくMPIの並列計算とかなんですかね。機会があったら試してみたいです

MTUを増やす?

MTUを増やしてデカいパケットで送ればその分通信の制御回数が減るのでCPUの負荷が減って速度が向上します。多分。

infinibandの接続モードはconnnectedモードとdatagramモードがあります。
connectedモードではMTUを上げられますが、datagramと比べて若干遅延が増えます。

datagramではMTUが強制的に2044、connectedモードでは65520までに設定できます。

しかし!ubuntu側ではこの接続モード変更できるのですが、windows側のドライバに変える機能はなくdatagramモード固定のようです。(正確にはMellanox版にはなくて標準版のほうにしかない)

なので残念ながらMTUを増やしての検証はできませんでした。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です