CodingBox ドキュメント

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/NAKRDMA はここで動作する
上位層verbs API、MPI、NCCL(UCX/SHARP 経由)、ストレージ(SRP、iSER、NVMe/IB)、IPoIBアプリケーションが使うもの

アドレッシングと識別情報

識別子サイズ割り当て元意味
GUID64 ビット製造元ポート、ノード、システムの恒久的な識別情報(MAC アドレスに相当)
LID(ローカル識別子)16 ビットサブネットマネージャーサブネット内のアドレス。フォワーディングテーブルは LID を使う
GID128 ビットSM(プレフィックス)+ GUIDサブネットプレフィックス+ GUID。サブネット間および RoCE で使用
PKey(パーティションキー)16 ビットSMパーティションへの所属(VLAN に相当)。フルメンバーとリミテッドメンバー
QPN24 ビット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 は次を行います。

  1. 有向経路管理パケット(VL15/QP0 上の SMP)でファブリックを巡回し、すべてのスイッチと HCA ポートのトポロジーを検出します。
  2. LID を割り当て、ポート(速度、幅、MTU、VL 調停、PKey)を設定します。
  3. 最小ホップ、up-down、ファットツリー、ドラゴンフライ+、適応ルーティングなど経路を計算し、各スイッチの線形フォワーディングテーブルに反映します。
  4. 定期的に、またトラップ(ポートの up/down)発生時に再走査し、障害箇所を迂回するよう再ルーティングします。
  5. ホストからの経路照会に応答するサブネットアドミニストレーター(SA)を実行します。

これを実装するのが OpenSM(オープンソース)や各ベンダーのファブリックマネージャー(UFM)です。ファブリックマネージャーは、ポートエラー、リンク速度/幅のネゴシエーション結果、光学部品の DDM をフリート全体で収集する場所でもあります(リンクの信頼性と監視)。

リンクネゴシエーション

リンクアップ時には両端が(1x/2x/4x)と速度(レーンごとのレート)を、共通してサポートする最も高い値までネゴシエートします。想定より 2x で、あるいは1世代低い速度でリンクアップした場合、それは Ethernet でいう「10G でリンクしていて 25G ではない」状態の InfiniBand 版であり、1レーン分の光ファイバーやレーザー、限界に近いケーブル、あるいはトランシーバーの世代の不一致が原因です(速度とレート)。ネゴシエートされた状態はファブリックマネージャーが報告し、ホスト側では ibstat / ibportstate で確認できます。

管理と診断のツール

ツール目的
ibstatibstatusローカルポートの状態、レート、幅、LID
ibnetdiscoverトポロジーのダンプ
ibdiagnetファブリック全体のチェック:エラー、速度/幅の不一致、GUID の重複、ケーブル情報
perfqueryibqueryerrorsポートごとのカウンター:シンボルエラー、リンクダウン、リンクリカバリー、ポート受信エラー、バッファオーバーラン過多、VL15 ドロップ、FEC カウンター
mlxlinkmlxcablesポートごとの 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 transceiverDDM で確認できます。定格速度を下回ってネゴシエートしたポートは、両端をベンチで読み取ってみる価値があります。


この記事に不正確な点や誤りを見つけた場合は、該当する箇所を選択して Ctrl+Enter を押すと、できます。