次の方法で共有


RSS 構成

RSS 構成情報を取得するために、上位ドライバーは、ミニポート ドライバーにOID_GEN_RECEIVE_SCALE_CAPABILITIES の OID クエリを送信できます。 NDIS は、初期化中に NDIS_BIND_PARAMETERS構造体の上位プロトコル ドライバーに RSS 構成情報も提供します。

上位ドライバーは、ハッシュ関数、種類、および間接参照テーブルを選択します。 これらの構成オプションを設定するには、ドライバーはミニポート ドライバーに OID_GEN_RECEIVE_SCALE_PARAMETERS の OID セット要求を送信します。 上位ドライバーは、この OID に対してクエリを実行して、現在の RSS 設定を取得することもできます。 OID_GEN_RECEIVE_SCALE_PARAMETERS OID の情報バッファーには、NDIS_RECEIVE_SCALE_PARAMETERS 構造体へのポインターが含まれています。

上位ドライバーは、NIC の RSS を無効にすることができます。 この場合、ドライバーは、NDIS_RECEIVE_SCALE_PARAMETERS 構造体の Flags メンバーに NDIS_RSS_PARAM_FLAG_DISABLE_RSS フラグを設定します。 このフラグが設定されている場合、ミニポート ドライバーは、他のすべてのフラグと設定を無視し、NIC の RSS を無効にする必要があります。

NDIS は、ミニポート ドライバーに渡す前に OID_GEN_RECEIVE_SCALE_PARAMETERS を処理し、必要に応じて、ミニポート アダプターの *RSS 標準化されたキーワードを更新します。 *RSS キーワードの詳細については、「RSS の標準化された INF キーワード」を参照してください。

NDIS_RSS_PARAM_FLAG_DISABLE_RSS フラグが設定された OID_GEN_RECEIVE_SCALE_PARAMETERS セット要求を受信した後、ミニポート ドライバーは、初期化後に NIC の RSS 状態を NIC の初期状態に設定する必要があります。 したがって、ミニポート ドライバーが、NDIS_RSS_PARAM_FLAG_DISABLE_RSS フラグがクリアされた後続の OID_GEN_RECEIVE_SCALE_PARAMETERS セット要求を受け取った場合、ミニポート アダプターの初期化後に初めて、ミニポート ドライバーが OID_GEN_RECEIVE_SCALE_PARAMETERS セット要求を受け取った後に設定されたものと同じ値が、すべてのパラメーターに設定されている必要があります。

上位ドライバーは、OID_GEN_RECEIVE_HASH OID を使用して、RSS を有効にせずに、受信したフレームのハッシュ計算を有効にして構成できます。 上位ドライバーは、この OID に対してクエリを実行して、現在の受信ハッシュ設定を取得することもできます。

OID_GEN_RECEIVE_HASH OID の情報バッファーには、NDIS_RECEIVE_HASH_PARAMETERS 構造体へのポインターが含まれています。 セット要求の場合、OID は、ミニポート アダプターが使用するハッシュ パラメーターを指定します。 クエリ要求の場合、OID はミニポート アダプターが使用しているハッシュ パラメーターを返します。 この OID は、RSS をサポートするドライバーでは省略可能です。

注: 受信ハッシュ計算が有効になっている場合、NDIS は RSS を有効にする前に受信ハッシュ計算を無効にします。 RSS が有効になっている場合、NDIS は受信ハッシュ計算を有効にする前に RSS を無効にします。

ミニポート ドライバーがサポートするすべてのミニポート アダプターは、後続のすべてのプロトコル バインドに同じハッシュ構成設定を提供する必要があります。 この OID には、ミニポート ドライバーまたは NIC がハッシュ計算に使用する必要がある秘密キーも含まれています。 キーの長さは 320 ビット (40 バイト) であり、上位ドライバーが選択する任意のデータ (バイトのランダム ストリームなど) を含めることができます。

処理負荷を再調整するために、上位ドライバーは RSS パラメーターを設定し、間接参照テーブルを変更できます。 通常、間接参照テーブルを除き、すべてのパラメーターは変更されません。 ただし、RSS が初期化されると、上位ドライバーによって他の RSS 初期化パラメーターが変更される可能性があります。 必要に応じて、ミニポート ドライバーは、NIC ハードウェアをリセットして、ハッシュ関数、ハッシュ秘密キー、ハッシュの種類、ベース CPU 番号、または間接参照テーブルのインデックス作成に使用されるビット数を変更することができます。

注: 上位ドライバーは、いつでもこれらのパラメーターを設定できます。 これにより、受信表示の順序がばらばらになる可能性があります。 TCP をサポートするミニポート ドライバーは、このインスタンスの受信キューを消去する必要はありません。

次の図は、間接参照テーブルの 2 つのインスタンスの内容の例を示しています。

4 プロセッサ構成で 64 個のエントリが含まれる RSS 間接テーブルの 2 つの異なる例を示す図

上の図は、4 つのプロセッサ構成を前提としており、ハッシュ値から使用される最下位ビットの数は 6 ビットです。 したがって、間接参照テーブルには 64 個のエントリが含まれています。

この図のテーブル A は、初期化直後の間接参照テーブルの値をリスト表示しています。 その後、通常のトラフィック負荷が変化すると、プロセッサの負荷が不均衡になります。 上位ドライバーは不均衡な状態を検出し、新しい間接参照テーブルを定義することで負荷の再調整を試みます。 テーブル B には、新しい間接参照テーブルの値がリスト表示されています。 テーブル B では、CPU 2 からの負荷の一部が CPU 1 と 3 に移動されます。

: 間接参照テーブルが変更されると、短時間 (現在の受信記述子キューが処理されている間)、間違った CPU でパケットが処理される可能性があります。 これは正常な一時的状態です。

間接参照テーブルのサイズは、通常、システム内のプロセッサ数の 2 ~ 8 倍です。

ミニポート ドライバーが CPU にパケットを配布するとき、CPU の数が多すぎる場合は、負荷の分散に費やされる労力が非常に大きくなる可能性があります。 この場合、上位ドライバーは、ネットワーク データの処理が行われる CPU のサブセットを選択する必要があります。

場合によっては、使用可能なハードウェア受信キューの数が、システム上の CPU の数よりも少なくなる場合があります。 ミニポート ドライバーは、間接参照テーブルを調べて、ハードウェア キューに関連付ける CPU 番号を決定する必要があります。 間接参照テーブルに表示される異なる CPU 番号の総数が、NIC でサポートされているハードウェア キューの数を超える場合、ミニポート ドライバーは間接参照テーブルから CPU 番号のサブセットを選択する必要があります。 サブセットは、ハードウェア キューの数に等しくなります。 ミニポート ドライバーは、OID_GEN_RECEIVE_SCALE_PARAMETERS から IndirectionTableSize パラメーターを取得しました。 ミニポート ドライバーは、OID_GEN_RECEIVE_SCALE_CAPABILITIES に応答して NumberOfReceiveQueues 値を指定しました。