Blog

※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。 / # The contents expressed here are only my personal opinions.

IPoIB(IP over InfiniBand)関連の話題

IPoIB(IP over InfiniBand)は、InfiniBand上でIPプロトコルを動作させるプロトコルである。

f:id:kz_tomo:20140601215530j:plain

フレームフォーマットとしては、InfiniBandフレームでIPフレームをカプセル化するため、IPoIBヘッダが存在する。

WireSharkでのキャプチャ例

InfiniBandパケットはibdumpというコマンドでダンプでき、WireSharkで表示することができる。下記はIPoIBのパケットを表示した例である。

上述のIPoIBフレームでのInfiniBandヘッダ、IPoIBヘッダ、IPヘッダ、TCPヘッダが確認できる。

f:id:kz_tomo:20140601220227j:plain

IPoIBにはEthernetヘッダ(MACヘッダ)が存在しないが、EthernetヘッダもInfiniBandでカプセル化したEoIBというプロトコルも存在する。

また、IPoIBフレームのIPoIBヘッダをホスト側の中間ドライバでEthernetヘッダに付け替えることにより、ソフトウェアからはEthernetデバイスとしての処理を可能とするeIPoIBという方式もある。eIPoIBは、ネットワークを流れるプロトコルはあくまでIPoIBである。

EoIBとeIPoIBについては、別途今後の記事にて説明を行いたいと考えている(ここでは省略)。

Connected modeとDatagram mode

IPoIBには、Connected modeとDatagram modeが存在する。Connected mode(CM)は、RC(Reliable Connected)というInfiniBandの通信形態を使用し、Datagram modeは、UD(Unreliable Datagram)というInfiniBandの通信形態を使用する。RC通信は、通信ペア毎にメモリ上にリソースを確保(Connected)し、通信ロスを検出する(ロスレス)プロトコルである。一方、UD通信は、通信に関するメモリリソースを確保することなく(Datagram)、通信ロスは検出できない(※TCPUDPの関係に似ている。UDPであっても、上位ソフトウェアで通信管理することでロスレス通信が可能である。ロスのある通信プロトコルだから信頼性がないと考えるのは正しくない。)

また、IPoIB CMでは、Connected通信を行うことで、MTUを最大64KBとすることができる。ただし、ここでのMTUは、IPoIBとしてのMTUであり、InfiniBand通信のMTUはInfiniBand規格での最大4KBである点は変わらない点には注意が必要である。実際にMTU=64KBのInfiniBandフレームがネットワークを流れることはない。(したがって、InfiniBandスイッチのMTUとの整合性についても問題ない。)

f:id:kz_tomo:20140601223228j:plain

Connected modeでのIPoIB通信キャプチャ例。IPoIBとしてのMTUは大きいが、InfiniBandネットワーク上では最大4KBでのフレームに分割されている。上図のWireSharkキャプチャにおいて、枠で囲った部分がIPoIBパケットに組み立てられる際にMTU=64KB等の大きなサイズになる。

 

最新状況:Datagramモードの方が性能が良い

長らくConnectedモードの方が性能が出る状況が続いていたが、最近の状況を補足しておく。

MellanoxのLinuxドライバであるMLNX OFEDでは、従来のMLNX OFED 1.x系とMLNX OFED 2.x系(2013年4月~)以降ではIPoIBドライバの設計が見直されており、従来の1.x系ではMTUの大きいConnectedモードの方が性能が良かったが、2.x系以降、IPoIB通信の性能は、1.x系でのIPoIB性能を上回ると共に、同じ2.x系で比較した場合、Datagramモードの方が性能が出る作りとなっているようだ。詳しい性能値は省略するが、InfiniBandの帯域を充分に活用できるスループット値が出るレベルになっていると考えてよい。従来、IPoIBは汎用性が高いものの性能面で課題があると言われていたが、最新状況ではスループット的にも実用性が増してきている。

スループット的には相当レベルに到達はしているが、RDMA系ドライバとの差異は、CPU使用率レイテンシーといったカーネルバイパス、CPUゼロコピーの点で依然として存在する。

  • MLNX OFED IPoIB性能状況 : 1.x系IPoIB-UD < 1.x系IPoIB-CM < 2.x系IPoIB-CM < 2.x系IPoIB-UD

また、MLNX OFEDをインストールした際のデフォルト設定は、1.x系ではConnectedモードであったが、2.x系ではDatagramモードとなっている。一般には、性能面からもデフォルトのDatagram modeのまま使用するのが推奨である。

(2014/6/7追記)現時点での最新ドライバMLNX OFED 2.2-1.0.1でのデフォルト設定は、Datagram mode, MTU=2044となっている。

例外として、Connect-IBという最新のHCAでは本稿執筆時点のMLNX OFED 2.2-1.0.1ではデフォルトはConnectedモードとなっている。 

 

以上、IPoIBの方式と最近の状況について説明した。本ブログ筆者は元々、長年ストレージ関連の開発に従事し、ファイバチャネルドライバやiSCSIドライバの開発も長らく務めていたため、プロトコル周辺の話題については非常に親しみがある。今後も重点的に取り上げていきたいと考えている。