JSOR と Java TCP 通信の比較 (Linux のみ)

TCP プロトコルはオペレーティング・システム・カーネルに依存しますが、RDMA プロトコルはオペレーティング・システム・カーネルをバイパスして、異なる RDMA 対応ホスト・システム上の Java™ アプリケーション間の直接通信を可能にします。 このため、RDMA ネットワーク操作では、必要なプロセッサー・リソースが少なくて済み、ネットワーク・スループットが向上します。

注意: サービス・リフレッシュ 8 フィックスパック 30 の変更点の始まり 以前に非推奨とされた RDMA 実装は、IBM® SDK、Java Technology Edition、バージョン 8.サービスリフレッシュ8 フィックスパック30の変更終了について から削除されました
Java TCP ソケット処理の従来のモデルでは、ホスト・オペレーティング・システム・カーネルが重要な役割を果たします。 すべての共通ネットワーク操作 (例えば以下のネットワーク操作) に対して、オペレーティング・システム呼び出しが必要です。
  • ソケットの作成
  • ポートへのバインド
  • よく知られたアドレスの listen
  • リモート・ホストへの接続
  • 着信接続要求の受け入れ
  • 接続されたエンドポイント間でのデータ転送
Java クライアント・アプリケーションとサーバー・アプリケーションが異なるホスト・システム上に存在する場合、システム間でデータを転送するには、ネットワーク・インターフェース・カード間でデータを転送する前に、バッファー間でいくつかのコピー操作を行う必要があります。 このプロセスでは、各システム上の以下のバッファーが関与します。
  • Java アプリケーション・バッファーから Java ソケット・バッファーへ
  • Java ソケット・バッファーからオペレーティング・システム・ソケット・バッファーへ
  • オペレーティング・システムのソケット・バッファーからネットワーク・インターフェース・ドライバーのバッファー
これらのコピー操作では、プロセッサー・サイクルが使用された後にホスト・システム間でデータが転送されます。

TCP プロトコルとは異なり、RDMA プロトコルは、オペレーティング・システム・カーネルから独立した高速スイッチ・ファブリック (InfiniBand など) 上に定義されます。 代わりに、ネットワーク処理の負荷が専用 RDMA ネットワーク・インターフェース・アダプターに移行されます。 RDMA プロトコルにより、1 つのホスト上の Java アプリケーションは、別のホスト上の Java アプリケーションのメモリーに直接アクセスできます。 この機能により、Java アプリケーション間でデータを直接転送できます。

次の図は、TCP/IP 通信および RDMA 通信のために Java クライアントとサーバー・アプリケーションの間で必要な接続を示しています。
この図は、TCP/IP 通信および RDMA 通信に必要な Java クライアントとサーバー・アプリケーションの間の対話を示しています。 特に TCP/IP 通信の場合、オペレーティング・システム・レベルで必要とされる詳細なバッファー・コピー操作が図に示されています。 対話については、本文で詳しく説明しています。

TCP 処理と比べて、RDMA では、使用されるプロセッサー・リソースが少なくなります。また、ハイパフォーマンス・スイッチ・ファブリックを利用して、RDMA 対応システム間のデータ・スループットを最大化できます。