IB プロトコルとトランスポート:層、QP、RDMA、サブネットマネージャー
InfiniBand は当初から、見知らぬ者同士がパケットをやり取りするためではなく、コンピューター同士が互いのメモリと直接対話するためのファブリックとして設計されました。そのレイヤー構成、アドレッシング、管理の仕組みは Ethernet の技術者には馴染みが薄く見えますが、用語さえ押さえれば単純です。そしてそれこそが、物理層がこれほど厳格な規格を課されている理由でもあります。このページはプロトコルの視点を扱い、光学部品については InfiniBand の光学部品を参照してください。
レイヤー
| レイヤー | 内容 | 備考 |
|---|---|---|
| 物理層 | レーン(1x、4x、8x、12x)、レーンごとの信号方式(NRZ から HDR の PAM4 まで…速度を参照)、符号化(QDR までは 8B/10B、FDR 以降は 64B/66B)、FEC(FDR からオプション、HDR/NDR では RS-FEC) | トランシーバーの領域 |
| リンク層 | LID を伴うローカルルーティングヘッダー(LRH)、仮想レーン(VL0–VL14 がデータ用、VL15 が管理用)、VL ごとのクレジットベースのフロー制御、リンク層 CRC(ICRC/VCRC) | 設計上ロスレス |
| ネットワーク層 | マルチサブネットルーティング用の 128 ビット GID を伴うグローバルルーティングヘッダー(GRH) | 1つのクラスター内ではほとんど使われない |
| トランスポート層 | 送信・受信キューを持つキューペア(QP)、サービスタイプ RC/UC/UD/XRC、MTU へのセグメンテーション、信頼性サービス用の ACK/NAK | RDMA はここで動作する |
| 上位層 | verbs API、MPI、NCCL(UCX/SHARP 経由)、ストレージ(SRP、iSER、NVMe/IB)、IPoIB | アプリケーションが使うもの |
アドレッシングと識別情報
| 識別子 | サイズ | 割り当て元 | 意味 |
|---|---|---|---|
| GUID | 64 ビット | 製造元 | ポート、ノード、システムの恒久的な識別情報(MAC アドレスに相当) |
| LID(ローカル識別子) | 16 ビット | サブネットマネージャー | サブネット内のアドレス。フォワーディングテーブルは LID を使う |
| GID | 128 ビット | SM(プレフィックス)+ GUID | サブネットプレフィックス+ GUID。サブネット間および RoCE で使用 |
| PKey(パーティションキー) | 16 ビット | SM | パーティションへの所属(VLAN に相当)。フルメンバーとリミテッドメンバー |
| QPN | 24 ビット | HCA | キューペア番号——ポート内のエンドポイント |
キューペアとトランスポートサービス
キューペアとは、HCA 内にありアプリケーションが所有する、送信キューと受信キューの組です。投入されたワークリクエストはハードウェアが実行し、完了通知は完了キューに届きます。サービスタイプは次のとおりです。
| タイプ | 信頼性 | コネクション型 | 用途 |
|---|---|---|---|
| RC——信頼性のあるコネクション型 | あり(ACK/NAK、再送) | あり、ピアごとに QP を1つ | RDMA トラフィックの大半。MPI、NCCL、ストレージ |
| UC——信頼性のないコネクション型 | なし | あり | まれ |
| UD——信頼性のないデータグラム型 | なし | なし、全ピアで QP を1つ共有 | 管理、IPoIB、マルチキャスト |
| XRC——拡張信頼性コネクション型 | あり | プロセス間で受信キューを共有 | QP 数を抑える大規模 MPI ジョブ向け |
| RD——信頼性のあるデータグラム型 | あり | なし | ほぼ使われない |
RDMA 操作(READ、WRITE、atomic)は、どちらの CPU もコピーに関与することなく、 2台のホスト上のアプリケーションバッファ間で直接データを移動させます。SEND/RECEIVE はメッセージを運びます。HCA がメモリに触れる前に、そのメモリは登録(ピン留めしてキーを付与)されている必要があります。GPUDirect RDMA はこれを GPU メモリにまで拡張します(GPU ファブリック)。
フロー制御と MTU
すべてのリンクは仮想レーンごとのクレジットベースのフロー制御で動作します。受信側がバッファの空き容量を通知し、送信側は相手が吸収できる量を超えて送信することはありません。輻輳によってフレームが破棄されることはなく、代わりに背圧が伝播します。これは Fibre Channel のクレジットと同じトレードオフであり、1本の遅い、あるいはエラーの多いリンクがジョブ全体を劣化させる理由でもあります。リンクの MTU は 256–4096 バイト(通常 4096)で、パス MTU はエンドツーエンドでネゴシエートされます。サービスレベル(SL) はトラフィッククラスを分けるために VL に対応付けられ、適応ルーティングは輻輳したリンクを避けるようフローを誘導できます。
サブネットマネージャー
サブネットごとに稼働するサブネットマネージャー(SM)はちょうど1つです(他は待機系となります)。SM は次を行います。
- 有向経路管理パケット(VL15/QP0 上の SMP)でファブリックを巡回し、すべてのスイッチと HCA ポートのトポロジーを検出します。
- LID を割り当て、ポート(速度、幅、MTU、VL 調停、PKey)を設定します。
- 最小ホップ、up-down、ファットツリー、ドラゴンフライ+、適応ルーティングなど経路を計算し、各スイッチの線形フォワーディングテーブルに反映します。
- 定期的に、またトラップ(ポートの up/down)発生時に再走査し、障害箇所を迂回するよう再ルーティングします。
- ホストからの経路照会に応答するサブネットアドミニストレーター(SA)を実行します。
これを実装するのが OpenSM(オープンソース)や各ベンダーのファブリックマネージャー(UFM)です。ファブリックマネージャーは、ポートエラー、リンク速度/幅のネゴシエーション結果、光学部品の DDM をフリート全体で収集する場所でもあります(リンクの信頼性と監視)。
リンクネゴシエーション
リンクアップ時には両端が幅(1x/2x/4x)と速度(レーンごとのレート)を、共通してサポートする最も高い値までネゴシエートします。想定より 2x で、あるいは1世代低い速度でリンクアップした場合、それは Ethernet でいう「10G でリンクしていて 25G ではない」状態の InfiniBand 版であり、1レーン分の光ファイバーやレーザー、限界に近いケーブル、あるいはトランシーバーの世代の不一致が原因です(速度とレート)。ネゴシエートされた状態はファブリックマネージャーが報告し、ホスト側では ibstat / ibportstate で確認できます。
管理と診断のツール
| ツール | 目的 |
|---|---|
ibstat、ibstatus | ローカルポートの状態、レート、幅、LID |
ibnetdiscover | トポロジーのダンプ |
ibdiagnet | ファブリック全体のチェック:エラー、速度/幅の不一致、GUID の重複、ケーブル情報 |
perfquery、ibqueryerrors | ポートごとのカウンター:シンボルエラー、リンクダウン、リンクリカバリー、ポート受信エラー、バッファオーバーラン過多、VL15 ドロップ、FEC カウンター |
mlxlink、mlxcables | ポートごとの PHY 詳細、ケーブル/トランシーバーの EEPROM、DDM、FEC ヒストグラム |
ibportstate | 速度/幅の強制設定、ポートのリセット |
シンボルエラーとリンクリカバリーは物理層のカウンターであり、Ethernet の CRC/FEC に相当します。Rx パワーと清浄度に結び付いています(ファブリック)。
InfiniBand と RoCE の違いを一段落で
RoCE v2 は同じ verbs/RDMA トランスポートを UDP/IP/Ethernet 上で運びます。サブネットマネージャーは IP ルーティングに、PKey は VLAN に置き換わり、クレジットフロー制御は PFC/ECN(DCQCN)に置き換わります。ロスレスにするにはこれを正しく設定する必要があります(ロスレス Ethernet、 インターコネクト)。トランシーバー自体は物理的に同一で、異なるのは識別情報のコーディングとホスト側のポリシーだけです。
CodingBox では
InfiniBand モジュールも通常の QSFP/OSFP と同様に読み取ります。識別情報(SFF-8636 バイト 164 の InfiniBand レートビットや CMIS のアプリケーション情報を含む)、レーンごとの DDM とチェックサムは、Check transceiver と DDM で確認できます。定格速度を下回ってネゴシエートしたポートは、両端をベンチで読み取ってみる価値があります。