イーサネット・テストの知見

RoCEv2フローをエミュレートするにはどうすればよいですか?

RoCEv2-coverのエミュレーション方法

RoCEv2とは何ですか?

RoCEv2(RDMA over Converged Ethernet version 2)は、UDPカプセル化を利用して、ルーティング可能なIPネットワーク上でリモート・ダイレクト・メモリ・アクセス(RDMA)を実現するネットワークプロトコルです。

RDMAは、CPUやオペレーティングシステム、あるいは中間的なデータコピーを介することなく、あるサーバーが別のサーバーのメモリから直接読み書きを行うことを可能にする高性能プロトコルです。これは、レイテンシとCPUのオーバーヘッドを低減するため、高速データセンターネットワークで広く利用されています。

RoCEv2ヘッダー形式とは何ですか?

RoCEv2フレームは、基本的にInfiniBand(IB)をUDP、IP、およびイーサネットにカプセル化したものであり、以下に示す通りです。

UDP宛先ポート4791は、ペイロードがRoCEv2であることを示しています。

RoCEv2 フレーム形式

RDMAプロトコルとは何ですか?

RDMAプロトコルでは、あるサーバーのメモリ位置から別のサーバーのメモリ位置へデータを交換するために、以下の大まかな手順が実行されます:

1. 接続の確立
– 2つのデバイスが、RDMA対応ハードウェア(例:RDMAをサポートするNIC)を使用して接続を確立します。
– 両方のデバイスがキューペア(送信キュー、受信キュー、完了キュー)を作成します。

2. メモリの登録
– 送信側および受信側のデバイスは、RDMAハードウェアに対してメモリ領域を登録します。
– 登録されたメモリ領域は「ピン留め」されるため、RDMA操作中はOSによって移動やスワップが行われることはありません。

3. メモリキーの交換
– デバイス間で、登録されたメモリ領域への直接アクセスを可能にするメモリキー(リモートメモリアドレスやアクセス権限など)が交換される。

4. データ転送
– 一方のデバイスが、両端のCPUを経由せずに、リモートデバイスのメモリから直接読み込み、または書き込みを行います。
– 中間バッファやカーネルのコンテキストスイッチが介在しないため、転送時の遅延は最小限に抑えられます。

5. 完了通知
– RDMAハードウェアは、操作が完了した際にアプリケーションに通知し、信頼性と一貫性を確保します。

6. 接続の切断
– データ交換が完了すると、RDMA接続が閉じられ、メモリ領域の登録が解除されます。

2つのデバイス間で交換されるさまざまな種類のパケットは、ベース・トランスポート・ヘッダー(BTH)にエンコードされます。データ交換については上記の4番目の項目で説明されているため、この点がパフォーマンステストにおいて特に重要となります。 データの交換は、IPv4またはIPv6のいずれかで行われ、信頼性のある接続(RC)、信頼性のあるデータグラム(RD)、信頼性のない接続(UC)、信頼性のないデータグラム(UD)の形式をとることができます。さらに、すべてのデータ交換は、SEND FIRSTフレーム、複数のSEND MIDDLEフレーム、およびSEND LASTフレームで構成されます。

これは、RC SEND 操作の場合について、以下の図 2 に示されています。また、この図では、BTH オペコードが 3 種類の RC SEND フレームをどのように符号化しているかも示されています。

RC送信図

Z800Freya ジェネレータを使用してRoCEv2フローをエミュレートするにはどうすればよいですか?

Teledyne LeCroy LeC Teledyne LeCroy 社のZ800Freya ジェネレータを使用すれば、さまざまなワークロード下でNIC、スイッチ、およびネットワーク全体の性能テストを行うためのRoCEv2フローを生成することができます。

Freya RoCEv2のトラフィックをFreya 、RDMAプロトコル自体には関与しないという点に留意する必要があります。これにより、トラフィックの生成とプロトコルの処理を分離することで、潜在的な問題を特定しやすくなり、パフォーマンスのボトルネックやネットワークの非効率性をより正確に特定することが可能になります。

Z800Freya は、XenaManagerソフトウェアと当社の設定ファイルのいずれかを使用することで、RoCEv2フローをエミュレートするように設定Freya 。さらに高度なスクリプト処理を行う場合は、Xena (XOA)と併用できるPythonコードも用意されています。

XenaManagerで設定ファイルを読み込む

XenaManagerと設定ファイルを使用してRoCEv2を設定するにはどうすればよいですか?

RoCEv2 フローの設定を容易にするため、以下の 4 つの設定ファイルを用意しました。

XenaManagerでファイルを読み込むには、左図のようにポートを右クリックし、「ポート設定を読み込む」を選択するだけです。

XOAを使用してRoCEv2を設定するにはどうすればよいですか?

より高度なRoCEv2フローを設定し、必要に応じてお客様のテスト環境と統合できるように、Pythonスクリプトのサンプルを作成しました。このスクリプトでは、フローあたりのフレーム数、トラフィックレート、バースト性、繰り返し回数などの柔軟な設定が可能です。

この例はこちらでご覧いただけます:open-automation-script-library/rocev2 at main · xenanetworks/open-automation-script-library · GitHub

「headers.py」ファイルには、BTHの各種オペコードやその他の要素に関するすべての定義が含まれています。「roce2_emulate.py」ファイルでは、フローあたりのフレーム数やフレームサイズなどが定義されています。

E100Chimera を使用して RoCEv2 フローの障害を再現するにはどうすればよいですか?

Teledyne LeCroy Xena E100Chimera、遅延、ジッター、パケットおよびポートの障害、柔軟な分配、帯域幅シェーピングなど、幅広いネットワーク障害をエミュレートすることができます。

これは、遅延やパケットの順序崩れ、その他の障害の影響を受けやすいRoCEv2トラフィックにとって特に重要です。

Chimera設定ファイルをご用意しています。これをアップロードすると、UDP宛先ポート4791に基づいてRoCEv2フレームをフィルタリングします。これにより、RoCEv2フレームのみを制限するテスト環境を簡単に構築できます。