JSOR ゼロ・コピー機能 (Linux のみ)

JSOR データ転送では、中間バッファーのコピー操作がデフォルトで使用されます。 ラージ・データの転送の場合、ゼロ・コピー機能を使用可能にすることにより、パフォーマンスを向上させることができます。 この関数は、1 つのホスト上の Java™ アプリケーション・メモリーから別のホスト上の Java アプリケーション・メモリーに、どちらのホストでもプロセッサーを使用せずに直接データをコピーします。

注: サービス・リフレッシュ 8 フィックスパック 30 の変更点の始まり以前非推奨であった RDMA 実装は、 IBM® SDK, Java Technology Edition, Version 8 から削除された。サービスリフレッシュ8 フィックスパック30の変更終了について
次の図に示すように、バッファー・コピー・プロセスでは常にホスト・オペレーティング・システムが使用されるため、複数の中間コピーが作成され、ユーザー・スペースとカーネル・スペース間で計算上不経済なコンテキスト切り替えが行われます。 ゼロ・コピー・プロセスでは、直接コピー操作に使用されるバッファーが登録されていれば、ホストの CPU のみが使用されます。 バッファーが登録された後、データ転送は直接行われます。
この図は、2 つのホスト間の JSOR 通信の概要を示しています。 それぞれのホスト上で、JSOR 機能を含む IBM Developer Kit の 1 つのインスタンス上で、バッファーを備えた Java アプリケーションが実行されています。 IBM Developer Kit は、ホストのオペレーティング・システムを通じて RDMA アダプターと対話します。 このプロセスがバッファー・コピー・プロセスです。 以下のテキストでは、バッファー・コピーを使用する場合とゼロ・コピーを使用する場合を挙げて、ゼロ・コピー機能について説明しています。 2 つの通信サイドは、各サイドの RDMA アダプターが使用する RDMA コンジットによって、最下位レベルでリンクされています。 最高レベルでは、各サイドにはバッファーを持つ Java アプリケーションがあります。

この図のアプリケーション 2 にデータの受信が可能なバッファーがある場合、このアプリケーションは、データの直接配置用にバッファーを登録することにより、バッファーが使用可能であることを通知します。 アプリケーション 1 に、送信するデータがある場合、アプリケーション 1 は登録されたバッファーにデータを直接書き込みます。 書き込み操作が完了すると、書き込み完了メッセージがアプリケーション 1 から他方のサイドに送信されます。 アプリケーション 2 は、このメッセージを受け取ると、転送されたデータを処理できます。 データ転送が完了すると、アプリケーション 2 は受信バッファーを登録抹消できます。

バッファー登録によるオーバーヘッドが生じるため、期待される CPU サイクルの削減は、データ転送サイズが大きい場合にのみ達成されます。 例えば、単一接続の場合、データ転送サイズが 256 KB を超えるまでは削減を確認できない可能性があります。 複数の並列接続で、データの直接配置用に同じバッファーを共有している場合、このデータしきい値を小さくすることができます。

パフォーマンスの向上は大きなデータ・サイズの場合にのみ実現されるため、ゼロ・コピー機能は、デフォルトで使用可能になっていません。 この機能を有効にするには、-Dcom.ibm.net.rdma.zeroCopy=true プロパティを使用します。

制約事項: 全二重通信は現在サポートされていません。 一方のサイドが送信するとき、他方のサイドは受信のみを行う必要があります。
制限事項: Service Refresh 2 フィックスパック 10 の変更点の開始JSOR ゼロコピー機能は NIO チャンネルではサポートされていません。Service Refresh 2 フィックスパック 10 の変更点の終了 JSORのゼロコピー機能はNIOチャンネルではサポートされていません