ネットワーク アダプターを選択する

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016、Azure Stack HCI バージョン 21H2 および 20H2

このトピックでは、購入の選択に影響する可能性があるネットワーク アダプターのいくつかの機能について説明します。

ネットワークを集中的に使用するアプリケーションには、高パフォーマンスのネットワーク アダプターが必要です。 このセクションでは、ネットワーク アダプターの選択に関する考慮事項と、最適なネットワーク パフォーマンスを実現するためにさまざまなネットワーク アダプター設定を構成する方法について説明します。

ヒント

ネットワーク アダプターの設定は、Windows PowerShell を使用して構成できます。 詳細については、「Windows PowerShell ネットワークアダプターコマンドレット」 を参照してください。

オフロード機能

中央処理装置 (CPU) からネットワーク アダプターにタスクをオフロードすると、サーバーの CPU 使用率が減少し、システム全体のパフォーマンスが向上します。

Microsoft 製品のネットワーク スタックでは、適切なオフロード機能を備えたネットワーク アダプターを選択した場合、1 つ以上のタスクをネットワーク アダプターにオフロードできます。 次の表は、Windows Server 2016 で使用できるさまざまなオフロード機能の簡単な概要を示しています。

オフロードの種類 説明
TCP のチェックサムの計算 ネットワーク スタックでは、送信および受信コード パスでの伝送制御プロトコル (TCP) のチェックサムの計算と検証をオフロードできます。 また、送信および受信コード パスでの IPv4 および IPv6 のチェックサムの計算と検証もオフロードできます。
UDP のチェックサムの計算 ネットワーク スタックでは、送信および受信コード パスでのユーザー データグラム プロトコル (UDP) のチェックサムの計算と検証をオフロードできます。
IPv4 のチェックサムの計算 ネットワーク スタックでは、送信および受信コード パスでの IPv4 のチェックサムの計算と検証をオフロードできます。
IPv6 のチェックサムの計算 ネットワーク スタックでは、送信および受信コード パスでの IPv6 のチェックサムの計算と検証をオフロードできます。
大きい TCP パケットのセグメント化 TCP/IP トランスポート層では、Large Send Offload v2 (LSOv2) がサポートされます。 LSOv2 を使用すると、TCP/IP トランスポート層では、大きい TCP パケットのセグメント化をネットワーク アダプターにオフロードできます。
Receive Side Scaling (RSS) RSS は、マルチプロセッサ システム内の複数の CPU 間でネットワーク受信処理を効率的に分散できるネットワーク ドライバー テクノロジです。 RSS の詳細については、このトピックの以降で説明します。
Receive Segment Coalescing (RSC) RSC は、パケットをグループ化して、ホストで実行するために必要なヘッダー処理を最小限に抑えるための機能です。 最大 64 KB の受信ペイロードを、処理のために 1 つの大きなパケットに結合できます。 RSC の詳細については、このトピックの以降で説明します。

Receive Side Scaling

Windows Server 2016、Windows Server 2012、Windows Server 2012 R2、Windows Server 2008 R2、Windows Server 2008 では、Receive Side Scaling (RSS) がサポートされます。

一部のサーバーには、ハードウェア リソース (物理コアなど) を共有し、同時マルチスレッド (SMT) ピアとして扱われる複数の論理プロセッサが構成されています。 Intel ハイパースレッディング テクノロジがその一例です。 RSS では、ネットワーク処理がコアあたり最大 1 つの論理プロセッサに送信されます。 たとえば、Intel ハイパースレッディング、4 コア、8 個の論理プロセッサを搭載したサーバーでは、RSS によってネットワーク処理に 4 個以下の論理プロセッサが使用されます。

RSS では、受信ネットワーク I/O パケットが論理プロセッサ間で分散され、同じ TCP 接続に属するパケットが同じ論理プロセッサで処理されて、順序が維持されます。

また、RSS では UDP ユニキャスト トラフィックとマルチキャスト トラフィックが負荷分散され、関連するフロー (送信元アドレスと送信先アドレスのハッシュによって決定されます) が同じ論理プロセッサにルーティングされて、関連する受信の順序が維持されます。 これにより、対象となる論理プロセッサよりもネットワーク アダプターの数が少ないサーバーの受信集中型シナリオのスケーラビリティとパフォーマンスが向上します。

RSS の構成

Windows Server 2016 では、Windows PowerShell コマンドレットと RSS プロファイルを使用して RSS を構成できます。

RSS プロファイルを定義するには、Set-NetAdapterRss Windows PowerShell コマンドレットの –Profile パラメーターを使用します。

RSS 構成のための Windows PowerShell コマンド

次のコマンドレットを使用すると、ネットワーク アダプターごとに RSS パラメーターを表示および変更できます。

注意

構文やパラメーターなど、各コマンドレットの詳細なコマンド リファレンスについては、以下のリンクをクリックしてください。 また、各コマンドの詳細を確認するには、Windows PowerShell プロンプトで Get-Help にコマンドレット名を渡します。

  • Disable-NetAdapterRss: 指定したネットワーク アダプターで RSS を無効にします。

  • Enable-NetAdapterRss: 指定したネットワーク アダプターで RSS を有効にします。

  • Get-NetAdapterRss: 指定したネットワーク アダプターの RSS プロパティを取得します。

  • Set-NetAdapterRss: 指定したネットワーク アダプターの RSS プロパティを設定します。

RSS プロファイル

どの論理プロセッサをどのネットワーク アダプターに割り当てるか指定するには、Set-NetAdapterRss コマンドレットの –Profile パラメーターを使用します。 このパラメーターに使用できる値は次のとおりです。

  • Closest: ネットワーク アダプターのベース RSS プロセッサに近い論理プロセッサ番号が優先されます。 このプロファイルを使用すると、オペレーティング システムによって、負荷に基づいて論理プロセッサが動的に再調整されることがあります。

  • ClosestStatic: ネットワーク アダプターのベース RSS プロセッサに近い論理プロセッサ番号が優先されます。 このプロファイルを使用すると、オペレーティング システムでは、負荷に基づいて論理プロセッサを動的に再調整しません。

  • NUMA: 通常、論理プロセッサ番号は、負荷を分散するために異なる NUMA ノードで選択されます。 このプロファイルを使用すると、オペレーティング システムによって、負荷に基づいて論理プロセッサが動的に再調整されることがあります。

  • NUMAStatic: これが既定のプロファイルです。 通常、論理プロセッサ番号は、負荷を分散するために異なる NUMA ノードで選択されます。 このプロファイルを使用すると、オペレーティング システムによって、負荷に基づいて論理プロセッサが動的に再調整されません。

  • Conservative: RSS では、負荷に耐えられるように、可能な限り少ないプロセッサが使用されます。 このオプションは、割り込みの数を減らすために役立ちます。

シナリオとワークロードの特性に応じて、Set-NetAdapterRs Windows PowerShell コマンドレットの他のパラメーターを使用して、以下のことを指定することもできます。

  • ネットワーク アダプターごとの、RSS に使用できる論理プロセッサの数。
  • 論理プロセッサの範囲の開始オフセット。
  • ネットワーク アダプターでそこからメモリが割り当てられるノード。

RSS の構成に使用できるその他の Set-NetAdapterRs のパラメーターを次に示します。

注意

以下の各パラメーターの構文例では、Set-NetAdapterRss コマンドの –Name パラメーターの値の例として、ネットワーク アダプター名 Ethernet が使用されています。 このコマンドレットを実行するときは、使用するネットワーク アダプター名がお使いの環境で適切であることを確認してください。

  • * MaxProcessors: 使用する RSS プロセッサの最大数を設定します。 これにより、アプリケーション トラフィックが特定のインターフェイスのプロセッサの最大数にバインドされます。 構文例を次に示します。

    Set-NetAdapterRss –Name "Ethernet" –MaxProcessors <value>

  • * BaseProcessorGroup: NUMA ノードのベース プロセッサ グループを設定します。 これは、RSS によって使用されるプロセッサ アレイに影響します。 構文例を次に示します。

    Set-NetAdapterRss –Name "Ethernet" –BaseProcessorGroup <value>

  • * MaxProcessorGroup: NUMA ノードの最大プロセッサ グループを設定します。 これは、RSS によって使用されるプロセッサ アレイに影響します。 これを設定すると、最大プロセッサ グループが制限され、負荷分散が k グループ内で調整されます。 構文例を次に示します。

    Set-NetAdapterRss –Name "Ethernet" –MaxProcessorGroup <value>

  • * BaseProcessorNumber: NUMA ノードのベース プロセッサ番号を設定します。 これは、RSS によって使用されるプロセッサ アレイに影響します。 これにより、ネットワーク アダプター間でプロセッサをパーティション分割できます。 これは、各アダプターに割り当てられている RSS プロセッサの範囲内の最初の論理プロセッサです。 構文例を次に示します。

    Set-NetAdapterRss –Name "Ethernet" –BaseProcessorNumber <Byte Value>

  • * NumaNode: 各ネットワーク アダプターでそこからメモリを割り当てることができる NUMA ノード。 これは、k グループ内にある場合と異なる k グループにある場合があります。 構文例を次に示します。

    Set-NetAdapterRss –Name "Ethernet" –NumaNodeID <value>

  • * NumberofReceiveQueues: 論理プロセッサで受信トラフィックの使用率が低いと考えられる場合 (たとえば、タスク マネージャーに表示された場合)、RSS のキュー数を既定の 2 から、お使いのネットワーク アダプターでサポートされている最大値まで増やしてみることができます。 ネットワーク アダプターによっては、ドライバーの一部として RSS キュー数を変更するオプションがあります。 構文例を次に示します。

    Set-NetAdapterRss –Name "Ethernet" –NumberOfReceiveQueues <value>

詳細については、次のリンクをクリックして、スケーラブルなネットワーク: 受信処理のボトルネックを排除する - RSS の導入を Word 形式でダウンロードします。

RSS のパフォーマンスについて

RSS をチューニングするには、構成と負荷分散ロジックを理解する必要があります。 RSS 設定が有効になっていることを確認するには、Get-NetAdapterRss Windows PowerShell コマンドレットを実行したときの出力を確認します。 このコマンドレットの出力例を次に示します。


PS C:\Users\Administrator> get-netadapterrss
Name                           : testnic 2
InterfaceDescription           : Broadcom BCM5708C NetXtreme II GigE (NDIS VBD Client) #66
Enabled                        : True
NumberOfReceiveQueues          : 2
Profile                        : NUMAStatic
BaseProcessor: [Group:Number]  : 0:0
MaxProcessor: [Group:Number]   : 0:15
MaxProcessors                  : 8

IndirectionTable: [Group:Number]:
     0:0    0:4    0:0    0:4    0:0    0:4    0:0    0:4
…
(# indirection table entries are a power of 2 and based on # of processors)
…
                          0:0    0:4    0:0    0:4    0:0    0:4    0:0    0:4

設定されているパラメーターがエコーされることに加えて、この出力の主な特徴は間接指定テーブルが出力されることです。 間接指定テーブルには、受信トラフィックの分散に使用されるハッシュ テーブルのバケットが表示されます。 この例では、n:c という表記によって、受信トラフィックを転送するために使用される Numa K グループ:CPU のインデックスのペアが指定されています。 2 つの一意のエントリ (0:0 と 0:4) だけが表示されています。これは、それぞれ k グループ 0/cpu0 と k グループ 0/cpu 4 を表します。

このシステムには、1 つの k グループ (k グループ 0) と n 個 (ここで、n <= 128) の間接指定テーブルのエントリがあります。 受信キューの数は 2 に設定されているため、最大プロセッサ数が 8 に設定されている場合でも、2 つのプロセッサ (0:0、0:4) のみが選択されます。 実際には、間接指定テーブルでは受信トラフィックをハッシュして、使用可能な 8 個の CPU のうちの 2 つのみが使用されます。

CPU を最大限に活用するには、RSS 受信キューの数が最大プロセッサ数以上である必要があります。 前の例では、受信キューを 8 以上に設定する必要があります。

NIC チーミングと RSS

RSS は、NIC チーミングを使用して別のネットワーク インターフェイス カードとチーミングされているネットワーク アダプターで有効にすることができます。 このシナリオでは、RSS を使用するように構成できるのは、基になる物理ネットワーク アダプターのみです。 ユーザーは、チーミングされたネットワーク アダプターに RSS コマンドレットを設定することはできません。

Receive Segment Coalescing (RSC)

Receive Segment Coalescing (RSC) を使用すると、特定の量の受信データで処理される IP ヘッダーの数を減らすことで、パフォーマンスを向上させることができます。 小さいパケットをより大きな単位にグループ化 (または結合) することで、受信データのパフォーマンスを向上させるために使用する必要があります。

この方法を使用すると、待機時間に影響することがあり、主にスループットの向上に恩恵が見られます。 受信される大量のワークロードのスループットを向上させるには、RSC をお勧めします。 RSC がサポートされるネットワーク アダプターを展開することを検討してください。

これらのネットワーク アダプターでは、RSC がオンになっていることを確認します (これは既定の設定です)。ただし、RSC がオフにすることが利点になる特定のワークロード (待機時間が少ない、低スループットのネットワークなど) がある場合を除きます。

RSC の診断について

RSC を診断するには、Windows PowerShell コマンドレット Get-NetAdapterRscGet-NetAdapterStatistics を使用します。

Get-NetAdapterRsc コマンドレットを実行したときの出力例を次に示します。


PS C:\Users\Administrator> Get-NetAdapterRsc

Name                       IPv4Enabled  IPv6Enabled  IPv4Operational IPv6Operational               IPv4FailureReason              IPv6Failure
                                            Reason
----                           -----------  -----------  --------------- --------------- ----------------- ------------
Ethernet                       True         False        True            False                  NoFailure       NicProperties

Get コマンドレットでは、RSC がインターフェイスで有効にされているかどうか、および TCP で RSC が動作状態にされているかどうかが示されます。 エラーの理由により、そのインターフェイスで RSC を有効にできなかったことに関する詳細が示されます。

前のシナリオでは、IPv4 RSC がサポートされていて、インターフェイスで動作可能です。 診断エラーを理解するには、結合されたバイトまたは発生した例外を確認できます。 これにより、結合の問題が示されます。

Get-NetAdapterStatistics コマンドレットを実行したときの出力例を次に示します。

PS C:\Users\Administrator> $x = Get-NetAdapterStatistics "myAdapter"
PS C:\Users\Administrator> $x.rscstatistics

CoalescedBytes       : 0
CoalescedPackets     : 0
CoalescingEvents     : 0
CoalescingExceptions : 0

RSC と仮想化

RSC は、ホストのネットワーク アダプターが Hyper-V 仮想スイッチにバインドされていない場合にのみ、物理ホストでサポートされます。 ホストが Hyper-V 仮想スイッチにバインドされている場合、RSC はオペレーティング システムによって無効にされます。 また、仮想ネットワーク アダプターでは RSC がサポートされないため、仮想マシンで RSC の利点は得られません。

シングルルート I/O 仮想化 (SR-IOV) が有効にされている場合、仮想マシンに対して RSC を有効にすることができます。 この場合、仮想機能で RSC 機能がサポートされます。そのため、仮想マシンでも RSC の利点が得られます。

ネットワーク アダプターのリソース

いくつかのネットワーク アダプターでは、最適なパフォーマンスを実現するためにリソースが積極的に管理されます。 いくつかのネットワーク アダプターでは、アダプターの [高度なネットワーク] タブを使用して、リソースを手動で構成できます。 そのようなアダプターでは、受信バッファーや送信バッファーの数など、多くのパラメーターの値を設定できます。

次の Windows PowerShell コマンドレットを使用すると、ネットワーク アダプター リソースの構成が簡単になります。

詳細については、「Windows PowerShell ネットワークアダプターコマンドレット」 を参照してください。

このガイドのすべてのトピックへのリンクについては、「ネットワーク サブシステムのパフォーマンス チューニング」を参照してください。