InfiniBandとは。「承の章」
前回は、IOのインテリジェント化からInfiniBandの生い立ちについて紹介しました。今回は、InfiniBand の仕様について紹介します。InfiniBand は、ISO OSI モデルに則して、階層化されたものになっております。各階層の役割は次の通りです。
物理層:
信号レベルと周波数/速度、信号伝送メディア(ケーブル/コネクタ等)を規定します。
リンク層:
シンボルとフレーム、フロー制御など、送信元から受信先までいかにしてパケットを転送するかを規定します。
ネットワーク層:
サブネット間でどのようにパケットが転送されるかを規定します。
トランスポート層:
Queue ペアと呼ばれる論理通信、メッセージの組み立て・分解、アクセス権等の管理をします。
ソフトウェアトランスポート、Verbs 、上位層プロトコル:
アプリケーションプログラムとハードウェア間のインターフェイスや TCP/IP の様に従来のプロトコルのサポートの管理機能の方法を規定します。
それでは各階層について詳しく見てみましょう。
物理層
この階層では、フレームを形成し、伝送路にどのように信号を流すか仕様を定めています。ケーブル上での信号の変化そしてフレーミング(パケットの開始&パケットの終わり)、データシンボル、そしてパケット間を埋めるために使われるシンボルを定義しています。InfiniBand 仕様により許容される最大ビットエラーレート(BERとも呼ばれます。)は、10e-12(10のマイナス12乗)以下であり、これを満たすために転送品質を保証しなくてはなりません。
InfiniBand は、データ転送にビットシリアルストリーム技術を使用しており、リンク幅は
- 1x – 1対のTxとRxの差動ペア
- 4x – 4対のTxとRxの差動ペア
- 12x – 12対のTxとRxの差動ペア
があります。また、リンク速度は、1対ごとに
- Single Data Rate(SDR) – 2.5GHz シグナリング
- Double Data Rate(DDR) – 5GHz シグナリング
- Quad Data Rate(QDR) – 10GHz シグナリング
- Fourteen Data Rate(FDR) – 14GHz シグナリング
- Enhanced Data Rate(EDR)– 25GHz シグナリング
となっており、下位互換性を保っております。
ケーブル1本当たりのリンクレートは、リンク幅とリンク速度の組み合わせで、現在最も一般的なのは、4x FDR (56Gb/s)です。
信号エンコ―ディングは、SDR、DDR、QDRでは、8b/10b、FDR、EDRでは、64/66エンコーディングを使用しています。ちなみに、これらは、Ethernetと同じなので、Mellanox社のInfiniBand HCA(アダプタカード)は、EthernetとInfiniBandを同一ハードウェアで稼働可能なカードが提供されています。
メディアタイプとしては、到達距離が数mのDAC(銅線)バックプレーンから、10㎞の光ファイバーLong Range(LR)まで幅広く対応可能です。
IBファブリックでの標準的なトポロジー
- Fat Tree – 最も一般的なトポロジーでノートのペア間でフルに全二重の帯域幅を許容するツリー構成です。
- メッシュ – それぞれのノードは、4つの他のノードに接続されており、正負のXY軸構造になっています。
- 3Dメッシュ – それぞれのノードは、6つの他のノードに接続されており、正負のXYZ軸構造になっています。
- 2D/3Dトーラス – 2D/3Dメッシュの端が接続された構造になっています。
リンク層
この階層は、サブネット内の送信元から受信先に送られるパケットの経由方法、およびパケット操作のためのプロトコルとフロー制御、そしてそれらのパケット・フォーマットを規定しています。下図のように、複数のパケットがメッセージを形成形成します。
パケットとは、ファブリック内でルーティング可能な送受信データの最少ユニットであり、またリンクの設定や操作/捕手を行う、リンク管理パケットがあります。データパケットの種類としてSend、Read、WriteおよびAck があり、下図のようなフォーマットになっています。
最大転送ユニット(MTU)
MTUは、256バイトから4Kバイトの範囲で使用され(メッセージサイズは、もっとより大きい)MTUよりも小さいか、同じパケットサイズのみ、宛先へ送られます。大きなMTUは、オーバーヘッドが少なくより効率的で管理しやすく、小さなMTUは、同期タイミングが細かくとれるためジッターが少ない特徴があります。InfiniBandでは、小さなMTUを使用し、HCA内のハードウェアによる分割/再組み立てを行うことが、多用されます。エンドノード間ルーティングは、パス内の複数あるリンクのうち、最も小さなMTU(Path MTU値)が使用されます。
リンク層:仮想レーン (サービス品質・QoS)
16段階のサービスレベルがあり、InfiniBand パケットのローカル・ルーティング・ヘッダー(LRH)内のフィールドで設定され、そして要求されたサービス品質(QoS)を規定します。
仮想レーン(VL)
単一の物理リンク内で複数の論理通信チャネル(Service Layer:SL)が形成され、1ポートで1組の送信/受信バッファーとして使用するVLごとに個別のフロー制御を持っています。それぞれのVLの送信優先度はアービター(仲裁者)により制御され、それぞれのSLは1本のVLにマップされ、IB仕様では、通常16本のVLで構成されます。(データ用に15本& 管理に1本)
全てのリンク上では最小でもデータVL1本と1つの管理VLが必要とされます。スイッチポートとHCAは、VL数が、異なることもあります。VL15は、管理VLでありフロー制御の対象VLではありません。
クレジットに基づいたリンクレベルのフロー制御
リンクフロー制御は、輻輳があったとしてもファブリック内でパケット損失が発生しないことを保証しております。リンク レシーバは、仮想レーンごとのバッファスペース・クレジットによるパケットを送信する許可を受けます。フロー制御クレジットは、64バイト単位で発行されます。
仮想レーンごとのフロー制御
仮想ファブリック – 同じ物理リンクを共有する仮想ファブリックにおいて、1つの仮想レーン上に発生した輻輳とレイテンシは、QoS で保証されており、別の仮想レーンのトラフィックに影響を及ぼしません。
リンクフロー制御は、輻輳があったとしてもファブリック内でパケット損失が無いことを保証します。
リンク レシーバは、仮想レーンごとのバッファースペースクレジットによるパケット受信の許可を受けます。フロー制御クレジットは、64バイト単位ごとに発行されます。
トランスポート層
ネットワークおよびリンクプロトコルは、指定される宛先にパケットを配達しますが、トランスポートプロトコルは、パケットを該当するQPへ配達し、そしてQPがパケットデータをどのように処理すべきかを知らせます。トランスポート層では、メッセージデータがパス上で規定される最大転送ユニット(MTU)よりも大きな場合、複数のパケットの分割して受信側QPへ送信します。受信側のQPは、データバッファ内の分割された複数のデータから順序良く再構築し、上位層へ受け渡します。
転送オペレーションの種類としては、SEND、RDMA Read、RDMA Writeが存在します。
SENDの手順
- 要求側HCA(Host Channel Adapter) の使用するローカルシステムメモリよりメッセージを読み出します。
- 相手側HCAの受信キューロジックへデータを転送します。
- データをリモートメモリ内のどこに書き込むかを指定しません。
- 必要な時にデータを即時転送する機能(Atomic Transfer)があります。
RDMA Read
- 相手側HCAはローカルメモリを読み、要求側のHCAへ転送します。
- リモートメモリのアクセス権、メモリ開始アドレスおよび転送長を指定する必要があります。
RDMA Write
- 要求側HCAは相手側HCAのシステムメモリに書かれるデータを送出します。
- リモートメモリのアクセス権、メモリ開始アドレスおよび転送長を指定する必要があります。
トランスポート層 QP (Queue Pair)
QP:ローカルノードとリモートノードの間に作られる送信/受信キューのペアを示します。
Work Queue:ファブリックへのConsumer/Producerインターフェースします。
Consumer/Producerは、Work Queue Element (WQE)を起動します。チャネルアダプタは、work要求を発行することにより、通信が開始され、Completion Queue(CQ)にCompletion Queue Element (CQE)を書くことによって、完了あるいは、エラーを通知することになります。
トランスポートサービス
信頼性のあるトランスポートを実現するためにRC, XRC QPは、パケットの流れを維持し、パケットが失われた場合に自動的に再送されます。各々のパケットはPSN(Packet Serial Number) を持ち、これにより受信側は失われたパケットを特定します。受信側は、順序良くパケットを受信した時にACKを返送し、そうでない場合はNACKを返送します。
送信側QPは、パケット送信後タイマーを起動し、受信側QPからACK返答が返らなかったり、ACK返答が失われたかどうかを判断します。規定時間内にACK返答が無い場合は再送します。
Verb
Verbは、HCA、そしてInfiniBandファブリックへのソフトウェア インターフェイスとなります。Verbは、フレームワークの定義をする場合柔軟性を持たせることができます。
Verbの例
- Open/Query/Close HCA
- Create Queue Pair
- Query Completion Queue
- Post send Request
- Post Receive Request
上位レイヤープロトコル(ULP) アプリケーションは、TCP/IP などの標準インターフェースを使ったレガシーアプリケーションを そのままInfiniBand上で使用できるように、Verbインターフェースを介してアクセスされます。
サブネットマネージャ
InfiniBand のファブリックには、一つのサブネットを構成する「サブネットマネージャ」が稼働しています。InfiniBand の根幹を構成する機能で、これは、ファブリック中のホストや通信経路の検索、監視、および障害回復などの役割を持っています。
各エンティティ(HCA、Switch、Router)はSubnet Management Agent(SMA)をサポートしなければなりません。これは、サブネットマネージャと通信することにより、ファブリックの構成、監視等が行われます。
サブネットマネージャは、複数のシステムで同時に立ち上げても構いません。調停のあとに、1つがアクティブになり、他はスタンバイ状態になります。また、ホストから立ち上げても、スイッチから立ち上げても構いません。InfiniBandのスイッチは2種類あり、管理用プロセッサが搭載された「Managed」スイッチと、プロセッサが搭載されていない、「Externally Managed(Unmanaged)」スイッチが有りますが、サブネットマネージャは、「Managed」スイッチのみで稼働します。
サブネットマネージャが稼働を開始すると、まず、ノードの検索を行い、サブネット内でノードにLocal IDを割当ます。最終的に、ノードリストをスイッチのテーブルに書き込みます。ここで、同じようなI/Oデバイスでありながら、InfiniBand とEthernetの違いが分かります。Ethernetでは、Link Aggregationを組む場合を除いて、スイッチ間等に複数の物理接続によるループを形成することはできません。Spanning Tree Protocol (STP)が働き、形成されたループの一部を無効にします。Ethernetでは、ノードやスイッチが接続された時に初めてネットワーク構成が分かるわけです。またLID等サブネット内の番号を割り付けるわけでは無いため、STP が動作していないネットワークで Broadcastアドレスを持ったパケットを送ると、途端にフラッタリングを起こします。InfiniBand の場合、サブネットマネージャが起動後、その構成を調べ、しかもLIDも独自に割り付けるため、スイッチ間等で複数の接続があったとしても、接続されている分がそのまま使用できます。
また、マスターのサブネットマネージャに障害があった場合、それらをサブネットエージェントが検知し、次の優先度のサブネットマネージャが引き継ぐようになります。これらにより、拡張性や可用性を高めています。