InfinibandをEther感覚で使い始めた人が泣かないためのLinuxでInfinibandを扱うナレッジです。
MellanoxがもともとRHELベースのシステムで使うことをメインにしているため、Debianで使おうとすると詳細なドキュメントがあるMellanox_OFEDが使えず割と地獄を見たので備忘録です。
コンテンツ
Linuxで使うためのIBハードウェア選定
使うハードウェアは新しければ新しいほど良いとは思いますが、NFSoRDMA/SRPなどのストレージとして使うのであればConnectX-3あたりで十分です。
また、速度もFDRやEDRが使えるに越したことはありませんが、現実問題としてはQDRあれば十分です。
QDRの40Gbpsで10b8b税を払うと実効で32Gbpsとなり、IBのポート1つあたりPCIE3.0x4のNVMeの速度を得られることになります。
PCIE3.0x8の理論値が64Gbpsなので、QDR2ポートになると80Gbpsとなり帯域に対して80%と若干足りなくなりますが、RDMAとマルチパスが正しく使えればQDRでも実測51Gbpsくらい出ます。
PCIE x16スロットを使うことを前提とするならConnect-IBのOEMであるIBMのEC33というHCAがお得です。(2025/09現在)
ConnectX3でもFDRなものを揃えられれば、FDRからエンコードが10b8bから64b66bになりオーバーヘッドが20%から約3%となるので、1ポートあたり理論値32Gbpsから52Gbpsとなり向上幅は多いです。
ただし、FDRでリンクするにはケーブル自体にFDR対応というEEPROMが入ったケーブルが必要になるので、このケーブルの本数を揃えるのが地味にコストになります。
QDRで我慢するなら、たまに投げ売られているSASケーブルとしてのQSFPケーブルが使えるので、大幅にコストを抑えることができる可能性があります。
こちらの環境では、かなり昔にebayで捨て値で買った44本入りのX6559-R6をいまだに使っています。
5mという長さとケーブルの太さに若干後悔しているものの、利用上は特に問題は起きていません。(ケーブリングの問題は起きている)
流石にConnectX-2はPCIE2.0(QDR1ポート分でPCIE2.0x8と同等)と規格が古すぎるのでおすすめしませんが、Linuxでは未だに動くので、めちゃくちゃ安ければ1対1で繋いで検証するためのスターターキットとして使うことは可能だと思います。
ホントにおすすめしませんが、Infinihostという古代のHCAでもなんとLinuxでは未だに動くので、廃棄物の中にあるのを見つけたら試してみてもいいかもしれません。CX4ケーブルの入手性が問題になりますが…。
CPUなどについては、ストレージホストとして使う場合、RDMAの効果でCPUはそこまで使わないので、Xeon E3-v2やコア数が少なくてもクロックの高いXeon E5-v2あたりでも十分な速度が出ます。
どちらかというとPCIE3.0以上のレーン数をどれだけ持っているかと、aryncの場合バッファとして吸収できるメモリをどれだけ使えるか、という方が効いてくるので、メモリマシマシなXeon E5 v4-初代XeonSPあたりが安くていいでしょうか。
使い方にもよりますが、NFSの処理が1コアに偏るので少コア高クロックなCPUのほうがおすすめです。こちらの環境では256GBメモリを積んだXeon W-2225がメインのストレージマシンとして動いています。
どれだけ予算を組むかによりますが、自宅ラボでPVEでInfiniband+NFSoRDMAを使う というような用途をメインとする場合、中古市場で総合的に安くて不自由ないものとしてはだいたい以下のものになると思います。(2025/09時点)
Xeon E5 v4世代のおすすめ
Intel® Xeon® Processor E5-1630 v4 ( 4c 4.00 GHz)
Intel® Xeon® Processor E5-2643 v4 (6c 3.70 GHz )
Xeon SP 第一世代のおすすめ
Intel® Xeon® Gold 6144 Processor (8c 4.20 GHz )
Intel® Xeon® Gold 6128 Processor (6c 3.70 GHz )
Xeon SP 第二世代のおすすめ
第2世代自体あまり見ない/謎に高い傾向にあるためそこまでおすすめしない
Epyc
第一世代以外の高クロックなやつ
DebianでIBを使う上で必要な/あると便利なツール
IBファブリック上にSMがいない場合は最低限どこかにSMが必要なので opensm
が必須になります。
また、 ibstat
や iblinkinfo
などもあると便利なので infiniband-diags
も最低限1ホストにいれることを推奨します。
opensmやiblinkinfoを使う場合、 ib_umad
や ib_uverbs
というカーネルドライバも必要になるので、読み込むようにしておきます。
IBをip通信に使いたい場合には ib_ipoib
も必要になります。
とりあえずこの辺がないと始まらないので入れておきます。
root@dev:~# apt-get install opensm infiniband-diags root@dev:~# for m in ib_umad ib_uverbs ib_ipoib ; do modprobe $m ; echo $m >> /etc/modules ; done
SubnetManager (SM)について
SubnetManager(SM)はInfinibandを接続するファブリックの中に1インスタンスは必要になるものです。
SMはファブリックにどのようなスイッチが存在するか、そのスイッチはどのような構成か、そこに接続されるものは何か、という情報を管理します。
EtherでいうスイッチのMACアドレスを学習するFDBのようなものです。どのポートに何が刺さっているという管理がないと通信ができません。
SMはスイッチに内蔵されているものもありますが、LinuxであればOpenSMを入れることにより同様の機能を持てるので、ストレージ等のバックエンドとしてIBを使うのであれば非管理型のスイッチで問題ありません。
ちなみに管理型のスイッチだとサブネットの分割などができますが、EtherでいうポートベースVLANやSANでいうゾーニングがメインで、IBにタグVLAN的な機能はないです。
また、すでにサブネット上にSMがいる場合は、ドキュメント上ではスタンバイになる…らしいのですが、実際に使っていると「あと勝ちの原理」であとに起動したホストで優先的に起動され、それまで動いていたホストではSMが終了して二重起動しないような制御が入っているようにみえます。
この原理を利用して、SMが動いているホストを再起動したい場合は他のホストでSMを起動してSMのマスターを奪う運用をしています。
なお、今まで動いていた環境からSMがいなくなった場合、直ちに通信ができなくなるということはありませんが、次にケーブルを抜き差ししたときや新しいホストがスイッチに接続してきたときにリンクがアクティブになりません。
ibstat
を実行したときにポートのステータスがActiveにならずPollingのままとなります。
SMの仕事内容を確認するにはiblinkinfo
や ibnetdiscover
コマンドでそれらの情報を確認できます。
root@dev:~# iblinkinfo CA: MT4113 ConnectIB Mellanox Technologies: 0x5849560e6a1a0201 6 1[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 10 36[ ] "Mellanox 4036 # 4036-62B4" ( ) 0x5849560e6a1a0209 5 2[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 10 18[ ] "Mellanox 4036 # 4036-62B4" ( ) CA: MT4113 ConnectIB Mellanox Technologies: 0x70106fffff9e2490 15 1[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 10 6[ ] "Mellanox 4036 # 4036-62B4" ( ) 0x70106fffff9e2498 16 2[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 10 4[ ] "Mellanox 4036 # 4036-62B4" ( ) CA: MT25408 ConnectX Mellanox Technologies: 0x0010e00001488379 7 1[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 10 24[ ] "Mellanox 4036 # 4036-62B4" ( ) 0x0010e0000148837a 8 2[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 10 2[ ] "Mellanox 4036 # 4036-62B4" ( ) Switch: 0x0008f105002062b4 Mellanox 4036 # 4036-62B4: 10 1[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 2 2[ ] "MT25408 ConnectX Mellanox Technologies" ( ) 10 2[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 8 2[ ] "MT25408 ConnectX Mellanox Technologies" ( ) 10 3[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 4[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 16 2[ ] "MT4113 ConnectIB Mellanox Technologies" ( ) 10 5[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 6[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 15 1[ ] "MT4113 ConnectIB Mellanox Technologies" ( ) 10 7[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 8[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 9[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 10[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 11[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 12[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 13[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 14[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 15[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 16[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 17[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 18[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 5 2[ ] "MT4113 ConnectIB Mellanox Technologies" ( ) 10 19[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 20[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 1 1[ ] "MT25408 ConnectX Mellanox Technologies" ( ) 10 21[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 22[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 23[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 24[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 7 1[ ] "MT25408 ConnectX Mellanox Technologies" ( ) 10 25[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 26[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 27[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 28[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 29[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 30[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 31[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 32[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 33[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 34[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 35[ ] ==( Down/ Polling)==> [ ] "" ( ) 10 36[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 6 1[ ] "MT4113 ConnectIB Mellanox Technologies" ( ) CA: MT25408 ConnectX Mellanox Technologies: 0x0010e00001746591 1 1[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 10 20[ ] "Mellanox 4036 # 4036-62B4" ( ) 0x0010e00001746592 2 2[ ] ==( 4X 10.0 Gbps Active/ LinkUp)==> 10 1[ ] "Mellanox 4036 # 4036-62B4" ( ) root@dev:~# ibnetdiscover # # Topology file: generated on Fri Sep 5 21:11:13 2025 # # Initiated from node 0010e00001746590 port 0010e00001746591 vendid=0x8f1 devid=0x5a5a sysimgguid=0x8f105002062b5 switchguid=0x8f105002062b4(8f105002062b4) Switch 36 "S-0008f105002062b4" # "Mellanox 4036 # 4036-62B4" enhanced port 0 lid 10 lmc 0 [1] "H-0010e00001746590"[2](10e00001746592) # "MT25408 ConnectX Mellanox Technologies" lid 2 4xQDR [2] "H-0010e00001488378"[2](10e0000148837a) # "MT25408 ConnectX Mellanox Technologies" lid 8 4xQDR [4] "H-70106fffff9e2490"[2](70106fffff9e2498) # "MT4113 ConnectIB Mellanox Technologies" lid 16 4xQDR [6] "H-70106fffff9e2490"[1](70106fffff9e2490) # "MT4113 ConnectIB Mellanox Technologies" lid 15 4xQDR [18] "H-5849560e6a1a0201"[2](5849560e6a1a0209) # "MT4113 ConnectIB Mellanox Technologies" lid 5 4xQDR [20] "H-0010e00001746590"[1](10e00001746591) # "MT25408 ConnectX Mellanox Technologies" lid 1 4xQDR [24] "H-0010e00001488378"[1](10e00001488379) # "MT25408 ConnectX Mellanox Technologies" lid 7 4xQDR [36] "H-5849560e6a1a0201"[1](5849560e6a1a0201) # "MT4113 ConnectIB Mellanox Technologies" lid 6 4xQDR vendid=0x2c9 devid=0x1011 sysimgguid=0x5849560e6a1a0201 caguid=0x5849560e6a1a0201 Ca 2 "H-5849560e6a1a0201" # "MT4113 ConnectIB Mellanox Technologies" [1](5849560e6a1a0201) "S-0008f105002062b4"[36] # lid 6 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR [2](5849560e6a1a0209) "S-0008f105002062b4"[18] # lid 5 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR vendid=0x2c9 devid=0x1011 sysimgguid=0x70106fffff9e2490 caguid=0x70106fffff9e2490 Ca 2 "H-70106fffff9e2490" # "MT4113 ConnectIB Mellanox Technologies" [1](70106fffff9e2490) "S-0008f105002062b4"[6] # lid 15 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR [2](70106fffff9e2498) "S-0008f105002062b4"[4] # lid 16 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR vendid=0x2c9 devid=0x1003 sysimgguid=0x10e0000148837b caguid=0x10e00001488378 Ca 2 "H-0010e00001488378" # "MT25408 ConnectX Mellanox Technologies" [1](10e00001488379) "S-0008f105002062b4"[24] # lid 7 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR [2](10e0000148837a) "S-0008f105002062b4"[2] # lid 8 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR vendid=0x2c9 devid=0x1003 sysimgguid=0x10e00001746593 caguid=0x10e00001746590 Ca 2 "H-0010e00001746590" # "MT25408 ConnectX Mellanox Technologies" [1](10e00001746591) "S-0008f105002062b4"[20] # lid 1 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR [2](10e00001746592) "S-0008f105002062b4"[1] # lid 2 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR
IPoIBについて
ib_ipoib
モジュールを読み込むと ip l
などでibインターフェースが生えてくるので、IP通信をしたい場合はこのIFに対してIPアドレスを振ることができます。
root@dev:~# ip l 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 ... 8: ibs15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/infiniband 80:00:02:08:fe:80:00:00:00:00:00:00:00:10:e0:00:01:74:65:91 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp3s0 9: ibs15d1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/infiniband 80:00:02:09:fe:80:00:00:00:00:00:00:00:10:e0:00:01:74:65:92 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp3s0d1
ただし、EtherではないのでVLANやLACPなどは使えません。チャンネルボンディングをしたい場合はmode1(act/backup)以外は利用できません。
iSERやNFSoRDMAを使う場合は直接のIP通信は行いませんがセッションの管理にIPoIBをつかいます。IPoIB自体は通常利用では10Gbpsくらいしか出ないので、1GbEよりは速いもののあまり期待してはいけません。
また、同じ10Gbpsの通信でも通常の10GbE NICの通信と比べてCPU負荷が高いですが、そういうものです。
LIDとSMID、GUIDについて
perfquery
などでLIDなどが必要なことが少なからずありますが、これらはInfiniband特有の仕組みなので、Ether感覚で使うとわからずに泣くことになります。
ibstat
を実行すると下記のような出力があります。
root@dev:~# ibstat CA 'mlx4_0' CA type: MT4099 Number of ports: 2 Firmware version: 2.11.1280 Hardware version: 1 Node GUID: 0x0010e00001746590 System image GUID: 0x0010e00001746593 Port 1: State: Active Physical state: LinkUp Rate: 40 Base lid: 1 LMC: 0 SM lid: 1 Capability mask: 0x0251486a Port GUID: 0x0010e00001746591 Link layer: InfiniBand Port 2: State: Active Physical state: LinkUp Rate: 40 Base lid: 2 LMC: 0 SM lid: 1 Capability mask: 0x0251486a Port GUID: 0x0010e00001746592 Link layer: InfiniBand
まず、この各ポートにある Base lid
というのは、SMが適当に空いてるIDを見つけて割り当てたIDとなり、DHCPで配布されたIPのようなものです。SMによってはもっと大きな値から始まることがありますが、OpenSMは1から始まるようです。
LIDは揮発性のもので、再起動中にIBサブネットに別のホストが参加/脱退すると前回とは別のものが割り当てられる可能性があります。また、シーケンシャルに割り当てられるという保証はありません。
SM lid
というのは、SMが起動しているホストが持つLIDです。上記だとLID1でSMが動いているということになり、LID1は自分のポート1が持っているので、つまりSMのマスターはこのホストのポート1で動いていることになります。
他のホストから見てもSMがLID1で動いているということがわかります。このホストではBase LIDに15と16を割り当てられているようです。
root@pve01:~# ibstat CA 'mlx5_0' CA type: MT4113 Number of ports: 2 Firmware version: 10.14.1100 Hardware version: 0 Node GUID: 0x70106fffff9e2490 System image GUID: 0x70106fffff9e2490 Port 1: State: Active Physical state: LinkUp Rate: 40 Base lid: 15 LMC: 0 SM lid: 1 Capability mask: 0x26516848 Port GUID: 0x70106fffff9e2490 Link layer: InfiniBand Port 2: State: Active Physical state: LinkUp Rate: 40 Base lid: 16 LMC: 0 SM lid: 1 Capability mask: 0x26516848 Port GUID: 0x70106fffff9e2498 Link layer: InfiniBand
GUID
についてはその名前のとおり、サブネット間でユニークなIDとなります。主に ibnetdiscover
をしたときにホストを見分けるときに使います。
sysimgguid
は ibnetdiscover
をしたときに複数のHCA(カード)を持っていても一意なものとして識別できます。
Node GUID
は ibnetdiscover
をしたときに caguid
として表示され、これはポートをまたいでHCA固有のものとなります。 複数のHCAを持つとそれぞれのHCAごとに表示されます。
Port GUID
はその名の通りNICで言うMACアドレスのようなものになります。
root@dev:~# ibstat|grep -i guid Node GUID: 0x0010e00001746590 System image GUID: 0x0010e00001746593 Port GUID: 0x0010e00001746591 Port GUID: 0x0010e00001746592 root@dev:~# ibnetdiscover |grep 0010e00001746590 # Initiated from node 0010e00001746590 port 0010e00001746591 [1] "H-0010e00001746590"[2](10e00001746592) # "MT25408 ConnectX Mellanox Technologies" lid 2 4xQDR [20] "H-0010e00001746590"[1](10e00001746591) # "MT25408 ConnectX Mellanox Technologies" lid 1 4xQDR caguid=0x10e00001746590 Ca 2 "H-0010e00001746590" # "MT25408 ConnectX Mellanox Technologies" root@dev:~# ibnetdiscover |grep 1746593 -A 4 sysimgguid=0x10e00001746593 caguid=0x10e00001746590 Ca 2 "H-0010e00001746590" # "MT25408 ConnectX Mellanox Technologies" [1](10e00001746591) "S-0008f105002062b4"[20] # lid 1 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR [2](10e00001746592) "S-0008f105002062b4"[1] # lid 2 lmc 0 "Mellanox 4036 # 4036-62B4" lid 10 4xQDR
上記の出力からわかることは、 Node GUID
が 0010e00001746590
のHCAはポート1がIBスイッチのポート20へ、ポート2がIBスイッチのポート1につながっている、ということがわかります。EtherでいうLLDPのようなものですね。
IBの場合LAGやVLANが存在せず、フラットなL2として使っているのでポートがどこかというのを気にせずに使っていますが、その結果バラバラのポートに繋がっているというのがよくわかります。
パフォーマンスモニタリングについて
いちばん簡単なのは atop
を入れるとリアルタイムで通信がモニタリングできます。最初は色々あってこれが間違っているかと思いましたが、あっていました。atopを信じろ
IFB | lx5_0/1
というのがIBのポート1の使用帯域になります。
他の方法としては perfquery
がありますが、これはLIDとそのLIDがどのポートに割りあたっているかを知る必要があります。
ibstat
を実行することによりLIDとそのポートがどれなのかというのを識別する方法について上の方で書いていますが、以下の場合はPort1にLID6が、Port2にLID5が割りあたっていることになります。
~# ibstat CA 'mlx5_0' CA type: MT4113 Number of ports: 2 Firmware version: 10.14.2066 Hardware version: 0 Node GUID: 0x5849560e6a1a0201 System image GUID: 0x5849560e6a1a0201 Port 1: State: Active Physical state: LinkUp Rate: 40 Base lid: 6 LMC: 0 SM lid: 1 Capability mask: 0x2659684a Port GUID: 0x5849560e6a1a0201 Link layer: InfiniBand Port 2: State: Active Physical state: LinkUp Rate: 40 Base lid: 5 LMC: 0 SM lid: 1 Capability mask: 0x2659684a Port GUID: 0x5849560e6a1a0209 Link layer: InfiniBand
perfquery -x $lid1 $portnum
をするとそのポートの詳細な値が出てきます。
root@dev2:~# perfquery -x 6 1 # Port extended counters: Lid 6 port 1 (CapMask: 0x1A00 CapMask2: 0x0000000) PortSelect:......................1 CounterSelect:...................0x0000 PortXmitData:....................2846531504504 PortRcvData:.....................2209524373911 PortXmitPkts:....................3680821541 PortRcvPkts:.....................3140372679 PortUnicastXmitPkts:.............3680819873 PortUnicastRcvPkts:..............3132313647 PortMulticastXmitPkts:...........1668 PortMulticastRcvPkts:............8059032 root@dev2:~# perfquery -x 5 2 # Port extended counters: Lid 5 port 2 (CapMask: 0x1A00 CapMask2: 0x0000000) PortSelect:......................2 CounterSelect:...................0x0000 PortXmitData:....................2802858100913 PortRcvData:.....................2179671795138 PortXmitPkts:....................3563833615 PortRcvPkts:.....................3067837969 PortUnicastXmitPkts:.............3563831960 PortUnicastRcvPkts:..............3059778859 PortMulticastXmitPkts:...........1655 PortMulticastRcvPkts:............8059110
PortXmitData
と PortRcvData
が通信したデータになるのですが、IBの送受信データは4バイトになるので、1 PortXmitData
=4byteとなります。
上記の perfquery -x 6 1
のPortXmitDataは 2846531504504
ですが、これをTBに直すと 2846531504504 * 4 /(1024^4)
となり、起動から約10.3TB通信したことになります。
同様の内容は /sys/devices/PCIDEVNUM/infiniband/*/ports/*/counters/port_rcv_data
からも取得できます。
~# find /sys 2>/dev/null |grep "infiniband.*port_.*data" /sys/devices/pci0000:64/0000:64:00.0/0000:65:00.0/infiniband/mlx5_0/ports/1/counters/port_xmit_data /sys/devices/pci0000:64/0000:64:00.0/0000:65:00.0/infiniband/mlx5_0/ports/1/counters/port_rcv_data /sys/devices/pci0000:64/0000:64:00.0/0000:65:00.0/infiniband/mlx5_0/ports/2/counters/port_xmit_data /sys/devices/pci0000:64/0000:64:00.0/0000:65:00.0/infiniband/mlx5_0/ports/2/counters/port_rcv_data ~# cat /sys/devices/pci0000:64/0000:64:00.0/0000:65:00.0/infiniband/mlx5_0/ports/1/counters/port_xmit_data 2846637743298
非常に雑なスクリプトですが、perfqueryでモニタリングする場合は以下のようなスクリプトでモニタリングすることが可能です。2ポートHCAを想定していますが、lid1にibstatのlidを、lid1pにそのポートをいれるといい感じに表示されると思います。
#!/bin/bash # lid1=6 #port num of lid1 lid1p=1 lid2=5 #port num of lid2 lid2p=2 p() { printf '%4s' $1 } while : ; do p1a=`perfquery -x $lid1 $lid1p` p2a=`perfquery -x $lid2 $lid2p` sleep 1 p1b=`perfquery -x $lid1 $lid1p` p2b=`perfquery -x $lid2 $lid2p` Tx1a=`echo "$p1a"|grep PortXmitData|grep -owE "[0-9]+"` Tx1b=`echo "$p1b"|grep PortXmitData|grep -owE "[0-9]+"` Tx2a=`echo "$p2a"|grep PortXmitData|grep -owE "[0-9]+"` Tx2b=`echo "$p2b"|grep PortXmitData|grep -owE "[0-9]+"` Rx1a=`echo "$p1a"|grep PortRcvData|grep -owE "[0-9]+"` Rx1b=`echo "$p1b"|grep PortRcvData|grep -owE "[0-9]+"` Rx2a=`echo "$p2a"|grep PortRcvData|grep -owE "[0-9]+"` Rx2b=`echo "$p2b"|grep PortRcvData|grep -owE "[0-9]+"` TxP1=$(( ( $Tx1b - $Tx1a ) * 4 / (1024*1024) )) TxP2=$(( ( $Tx2b - $Tx2a ) * 4 / (1024*1024) )) RxP1=$(( ( $Rx1b - $Rx1a ) * 4 / (1024*1024) )) RxP2=$(( ( $Rx2b - $Rx2a ) * 4 / (1024*1024) )) echo "Port1 :: Tx: `p $TxP1` MB/s, Rx: `p $RxP1` MB/s Port2 :: Tx: `p $TxP2` MB/s, Rx: `p $RxP2` MB/s Sum :: Tx: `p $(( $TxP1 + TxP2))` MB/s Rx:`p $(( $RxP1 + $RxP2))` MB/s " done
ibnetdiscover
で自分以外のlidとポート番号を見つければ、他のホストの通信状況を見ることも可能です。
実行結果としては大体あっていると思います。
とりあえずこれだけわかればInfinibandをそれとなく使い始められると思います。
あくまで個人の家かつDebianという環境の上での検証結果なので、すべての環境で対応できるかは責任を持ちません。
また、私は仕事でInfinibandを触ったことはありません。すべて家の環境での検証結果です。
Related articles
0 コメント