クーの自由研究

マスターのかえるのクーは、弟子達の召喚術により新たな依り代を得てⅡ世として復活しました。

InfiniBand HCA(NIC) 直結の実験(Windows編)

青空に街路の桜満開・花吹雪が映える週末が到来

みなさま、如何お過ごしでしょうか。かえるのクーの助手の「井戸中 聖」でございます。

f:id:AssistantOfKoo:20200322023115p:plain

ところにり雨ですが、桜がみごろです。

クイズ:この写真はどこなのか。特定せよ!。f:id:AssistantOfKoo:20200322121333p:plain(c)ベッキー

正解者には黄色のスターを100個プレゼントします。もちろん1日1個です。(あ、このブログにコメント欄ないんだった。。。)

(みなさん桜をみて気持ちを落ち着けてくださいませ。)

InfiniBandの接続実験をします

Ethernetモードでの接続実験

 ConnectX-3を2台のPCにセットしてEthernetモードにて 40GbEの接続を行います。
 InfiniBandスイッチを介さず、ケーブル直結で接続・通信できることを確認します。
通信のスループットと遅延(レイテンシ)の測定を行います。

予想

多分つながると思います。ここでNGなら門前払い状態です。

ケーブル接続実施(直結)

カードはロープロファイル版のブラケットを外さないとささらないので、固定していません。ケーブルを接続してのテストになるので、なんからの方法でボードを固定します。

わたくしは、そのあたりにあったスチールラックのコーナ金具とボルト・ナットで(仮)固定しました。左右にはまったく、上下にもほとんど動かないように思いのほかうまく固定できました。(ナットの錆ぐあいがインスタ映えしそうです)

f:id:AssistantOfKoo:20200322123059p:plain

コネクタは深くまで差し込み、ケーブルも太いので、ボードコネクタ側にそれなりの力がかかります。固定状態でないとケーブルを抜き差ししたときやテスト中であってもボードが半抜けになりコネクタ部でショートしかねません。場合によってはマザーボード側も破損する可能性があるので、必ず固定します。

固定できているといっても仮固定なので、ケーブル抜き差しは本固定をするまではPCの電源を落としてから行い、実験中はPCの移動(位置微調整)やケーブルの移動(じゃまだからケーブルの途中をすこしらすなど)を行わないことをお勧めします。(InfiniBand初心者マークなので慎重勇者運転でいいんです。レディー、パーフェクトリー!)

設定変更はインストール済のツールコマンドで実施します。

ボードの認識確認

2枚ざししているPCでボードの確認をします。

C:\Program Files\Mellanox\WinMFT>mst status -v
MST devices:
------------
  mt4099_pci_cr0         bus:dev.fn=17:00.0
  mt4099_pciconf0        bus:dev.fn=17:00.0
  mt4099_pci_cr1         bus:dev.fn=65:00.0
  mt4099_pciconf1        bus:dev.fn=65:00.0 

4行でますが、上2行は1枚目(0)、下2行は2枚目(1)を示しています。

例えば上2行は同じボードを表し、コマンドで指定するデバイスとしてどちらの表記でもよいようです。(Mellanox社のコマンドヘルプの実行例では _pciconf0、の方の例が載っていますが、一般的には _pci_cr0 の方を使用することが多いようです。)

2行でる理由や使い分ける場合があるのかについては、マニュアルを読んでいないのでまだわかっていません。(ずっとわからないままかも。。。)

このMST devicesの名称はコマンドでデバイスの指定をするとき使うので重要です。

Ethernetモードへの変更

mt4099_pci_cr0、mt4099_pci_cr1のデバイスの動作モード(リンクタイプ)をEthernetに変更します。

コマンドプロンプトを管理者モードで起動し、設定変更コマンドを実行します。

なお、コマンド中の s は set の意味です。

C:\Program Files\Mellanox\WinMFT>mlxconfig -d mt4099_pci_cr0 s LINK_TYPE_P1=ETH
Device #1:
----------
Device type:    ConnectX3
Device:         mt4099_pci_cr0
Configurations:                              Next Boot       New
LINK_TYPE_P1                        VPI(3)          ETH(2)
 Apply new Configuration? (y/n) [n] : y
Applying... Done!
-I- Please reboot machine to load new configurations.
VPIモードからEthernetモードに変更する案内がでています。指示にしたがいリブートします。もう一方のボードも変更します。
C:\Program Files\Mellanox\WinMFT>mlxconfig -d mt4099_pci_cr1 s LINK_TYPE_P1=ETH
Device #1:
----------
Device type:    ConnectX3
Device:         mt4099_pci_cr1
Configurations:                              Next Boot       New
         LINK_TYPE_P1                        VPI(3)          ETH(2)
 Apply new Configuration? (y/n) [n] : y
Applying... Done!
-I- Please reboot machine to load new configurations.
指示にしたがいリブートします。もう一方のPCのカードのモードも変更します。(記載省略)
再起動するとConnectX-3の動作モードがかわり、アダプタ認識もEternet Adapterにかわります。 

f:id:AssistantOfKoo:20200322003331p:plain

物理的な接続確認

ケーブルはコネクタのサイドを持ち、「カチッ」というまで差し込みます。PCにさすときはプルタグが下側となります。ケーブルを外すときにはプルタグを引いて、静かに外します。この時ケーブルを持って抜き差ししてはいけません。必ずプルタグを引いて抜きましょう。差す時はコネクタのサイドを持ちましょう。中古品の場合、設置の関係で「プルタグ」を取り外してあるケーブルがあるかもしれません。その場合は、ケーブル側で出っ歯っている方が下側となり、この部分を後にスライドすることで、ロックが解除されます。
余談ですが、ケーブルが銅線のもの、光ケーブルであるもの、ケーブルのないもの(ループバックコネクタ)の3種類があります。特に光ケーブルはプラグコネクタ部にアクティブな電子回路があり発熱するので、プラグコネクタ端子(攻め側)およびケージコネクタ端子(受け側)はしっかりとした金属でできており、ケージ側には放熱突起があります。コネクタメーカの説明図を勝手に拝借します。ごめんなさい。 

f:id:AssistantOfKoo:20200322085514p:plain

物理的な接続リンクもOKならば、緑ランプが点灯します。
ちゃんと点灯したのでOKです。

f:id:AssistantOfKoo:20200322123202p:plain

TCP/IPとしての設定

IPアドレスを固定値で設定します。(このあたりは通常のEthernet NICと同じです)
192.168.100.1と192.168.100.2にしてみました。デフォルトゲートウェイはプライベートネットワークにするために仮にですが相手方のIPアドレスを設定しています。

f:id:AssistantOfKoo:20200322005901p:plain

f:id:AssistantOfKoo:20200322005936p:plain

ネットワークの名称を 40GbE#1 にしました。

f:id:AssistantOfKoo:20200322010032p:plain

ネットワーク2がプライベートネットワークでインターネットアクセスなしで設定されています。
あとJumboPacketをお互い最大にしておきます。

f:id:AssistantOfKoo:20200322011351p:plain

JumboPacketは詳細設定タブで設定します。

f:id:AssistantOfKoo:20200322101551p:plain

ここまでの設定内容が反映を確認します。

InformationのLink Speedが 40.0 Gbps/Full duplex に、Networks Status が Connecttedになっていることに注目ください。

pingでの疎通確認

お互いからpingをとばしてみます。

f:id:AssistantOfKoo:20200322012134p:plain

f:id:AssistantOfKoo:20200322012222p:plain

うまくつながりました!

65500バイトの折り返し(ラウンド・トリップ)にて確認しています。上側の末尾100.1と100.2の通信がConnectX-3です。下側はLANですが、間違って1000Baseの経路ではなく、100Baseの経路を通っています。Windowsのpingは1ms以下が計測できないので、応答については改めて測定します。

スループットの測定

RAM DISKを作成し、ファイル複写の時間を測定する方法もありますが手間がかかるので、iperf3というコマンドをダウンロードして確認します。
ipref3とは、2台のPCでのデータ送受信帯域を測定するフリーのプログラムです。
バイナリはhttps://iperf.fr/ にあります。

Download iPerf binaries のタブから Windows版を選んでください。
MAC用やLinux用、iPhone、Android版のバイナリがあるので便利です。
バイナリは版数が古いのですが、用途としては十分でこれを使用します。
それぞれのPCでサーバ側動作とクライアント側動作のプログラムを動作させ、計測します。
サーバ役PCで iperf3 -s として起動しておき、クライアント側から iperf3 -c サーバ役のIPアドレスのコマンドを実行することにより測定します。

f:id:AssistantOfKoo:20200322132852p:plain

クライアント役PC

f:id:AssistantOfKoo:20200322015907p:plain

サーバ役PC

概ね10Gbps で通信できています。

クライアント役のPCが遅く、PCIeが 5.0 Gpbs (Gen 2) X4 接続でMax20Gbpsとまりなので、実行速度で10Gbpsでていれば成功といえると評価します。

レイテンシ計測・またはラウンドトリップ計測については、Linuxだともっと精度を上げて確認できると思うのでInfiniBand Linux接続編までお待ちください。

 

ディスク(共有)の速度計測

1台(Windows10 Pro)をサーバ役に、もう1台をクライアント(Windows10 Home)役にして計測します。サーバ役側のPCはこの冬に苦節5年以上のおこずかい貯金で買った渾身の1台です。(全部一度に新調したのは10年ぶりくらいです。)なお、ストレージはM2 NVMe SSD(PG3VNF CSSD-M2B1TPG3VNF)で爆速です。Intelマシンなので PCIe Gen.4 ではなく Gen.3で使用していますが、それでも激速です。そして激熱です。もちろん放熱対策は万全です。余計なお世話ですが、M2 NVMe SSDをお使いの方で放熱シンク&ファンつけていない方は今一度、使用中の発熱量を確認の上、放熱対策をご検討ください。高温のまま使用するとサーマルスロットルで性能はでないし、寿命が極端に短くなります。(ちなみにわたくしは静音空冷教の信者ですので、「静かに確実に冷やす」が信条です。)

サーバ役のローカルアクセスは以下のとおりです。

f:id:AssistantOfKoo:20200322184334p:plain

クライアント役のPCのローカルディスクは以下のとおりです。

f:id:AssistantOfKoo:20200322184851p:plain

5年前のSSDのなので、ローカルディスクとしては妥当な数字です。

クライアントから40GbEでサーバアクセスすると以下のとおりです。

f:id:AssistantOfKoo:20200322184523p:plain

Readでみると 通信としては12.788Gbps以上は帯域使用していることになります。

 クライアントからすると40GbEネット経由のほうがローカルディスクより2.8倍くらい速いです。ローカルディスクが速くないマシンからのディスクアクセスには十分な効果があります。なおこの接続では、サーバ側がGen.3 X8 で、クライアント側がGen.2 X4モードでボード接続されていますので、実質ボードの性能の半分以下でしか通信していません。余力はまだあります。

 

クライアント役からの1GBaseLANでのサーバアクセスは以下です。

f:id:AssistantOfKoo:20200322185141p:plain

この計測ではちゃんと1GBaseだけの経路で計測しています。117.88×8=942.88Mbpsなので、1GBaseLANとしてはとても頑張っていると思います。が、、、クライアントローカルディスクの約21%程度のスピードです。

結論:雫ちゃんはとてもかわいいです。(お約束)

ここまでのプチまとめ

おこずかいの範疇だし、このブログ更新遅いし、自分でやってみよう。という方へ最小限の情報をまとめます。

・ボードは Mellanox社製 ConnectX-3 VPI  MCX-353A-FCBT (1ポート)またはMCX354A-FCBT (2ポート)または、そのOEM品を探す。InfiniBandとEthernet両方やってみたい人は必ずVPI(両方できる)かどうか確認する。ConnectX-3 Pro VPI MCX353A-FCCT / MCX354A-FCBT は中古でも高めだが、同等くらい安いのを見つけたらそれでOK。もっと速いのが欲しければ、ConnectX-4まで待つべき。そしてケーブルも違う。ConnectX-4はまだ中古市場にありあまってないので、たいへん高い!そして、一般のPCで扱うには消費電力と熱対策が難しすぎる。なので結局ConnectX-3 VPIが順当。(むしろ現行PCでも空いたPCIeポートでGen.3 X8として使用できるのは少ない)

・ケーブルはMellanox社製 FDR銅線DACケーブル (Direct Attach Copper Cable)56Gb/s
3m : MC2207128-003 、2m :MC2207130-002 またはその完全互換品を探す。

・プロファイルは可能であればFullがよいが、ロープロファイルでもなんとかする。(中古ではロープロファイル品が潤沢で価格も安く、入手しやすい)

カードの個別冷却はテスト時でも必須。なにもしなくてもヒートシンクが超熱い。余っている8cmファンでフロントサイド側から近接送風する。新たにファンを探す場合は、風量がそこそこあって、静音タイプのものを探す。(ファンは自分もこれから必要なので、たぶん記事ネタにします)

・テスト時、カードの固定は必須

・ファームウェアは必ずアップデートする。

・OEM品は安いが、ファームウェアはMellanox社製のものは使えず、OEM品用のものを使う必要がある。

・ケーブル直結で10GBps超!の接続可能。

お次はモード変更して本命のInfiniBandだ!

(Ethernetではなく)InfiniBandとしての動作確認は、

・ケーブルが56Gbps対応のものでない。(手元のものは40Gbps対応のようです)

・InfiniBandのマネージド・スイッチがないので、ソフトでSM(サブネット・マネージャ)という機能を動かさないといけない(ようです)。

という困難もあります。

次は IBモード接続にチャレンジ(Windows編)にて。乞うご期待。

1本のケーブルでは、できる実験に限りがあります。ちゃんとしたケーブルが必要です。基本的な接続は確認できたので、必要な部品をもう少しそろえます。

また、デュアルポートのConnectX-3の確認・実験もしたくなってきました。中古市場を検索します。(目下、おこずかいの前借を作戦中)

あ!クリックしてもーた

金策もまだなのに。

ケーブル(MC2207128-003)はMellanoxの本家イスラエルから。デュアルポートのConnectX-3(MCX354A-FCBT)はアメリカから、1か月程度で船便(または航空便?)で到着するようです。ちなみにebayです。

調子でてきたのに、明日からまた出張です。わたくしの居住地域は幸い、過疎だからか結界だからか、神仏守護だから、アルコール消毒だからかわかりませんが、流行のウィルス感染がゼロです。子供たちも先週から元気に学校に行っています。流行地域への出張はやっぱり気が引けます。。。(感染したらたぶんリアルに***日後に死ぬので。)