InfiniBand アダプター (「HCA」) は、ネイティブの「動詞」プログラミング インターフェイスを介して使用できるいくつかの高度な機能を提供します。
- ユーザー空間からハードウェアへのデータ転送を直接開始できるため、カーネルをバイパスし、システム コールのオーバーヘッドを回避できます。
- アダプターは、送信側または受信側の CPU をまったく使用せずに、大きなメッセージ (数メガバイトの場合もある) のパケットへの分割、ACK の生成/処理、失われたパケットの再送信などのすべてのネットワーク プロトコルを処理できます。
IPoIB (IP-over-InfiniBand) は、IB を介して IP パケットを送信する方法を定義するプロトコルです。たとえば、Linux には、このプロトコルを実装する「ib_ipoib」ドライバーがあります。このドライバーは、システム上の各 InfiniBand ポートにネットワーク インターフェイスを作成し、HCA を通常の NIC のように機能させます。
IPoIB は HCA の機能を十分に活用していません。ネットワーク トラフィックは通常の IP スタックを通過します。これは、すべてのメッセージに対してシステム コールが必要であり、ホスト CPU がデータをパケットに分割するなどの処理を行う必要があることを意味します。 IB リンクのフル スピード (ただし、CPU は 32 Gb/秒の QDR IB リンクを使用するのに十分な速度で IP スタックを実行できない可能性があります)。
IPoIB は通常の IP NIC インターフェイスを提供するため、その上で TCP (または UDP) ソケットを実行できます。最近のシステムを使用すると、10 Gb/秒をはるかに超える TCP スループットが可能ですが、これはかなりの量の CPU を消費します。あなたの質問に対して、IPoIB と InfiniBand を使用した TCP の間に実際の違いはありません。どちらも IB ハードウェア上で標準の IP スタックを使用することを指しています。
実際の違いは、通常のソケット アプリケーションで IPoIB を使用する場合と、ネイティブ IB 動詞インターフェイスに直接コーディングされたアプリケーションでネイティブ InfiniBand を使用する場合の違いです。ネイティブ アプリケーションは、ほぼ確実にスループットが大幅に向上し、待ち時間が短縮され、ネットワークに使用される CPU が少なくなります。