EC2 Windows インスタンスでのネットワークパフォーマンスを最適化する
ネットワーキングが拡張された Windows インスタンスで最良のネットワークパフォーマンスを実現するには、デフォルトのオペレーティングシステム設定を変更する必要がある場合があります。高いネットワークパフォーマンスを必要とするアプリケーションには、次の設定変更をお勧めします。その他の最適化 (チェックサムオフロードをオンにして RSS を有効にするなど) は、公式の Windows AMI で既に行われています。
注記
TCP Chimney オフロードはほとんどのユースケースで無効にする必要があり、Windows Server 2016 では廃止されています。
これらのオペレーティングシステムの最適化に加えて、ネットワークトラフィックの最大送信単位 (MTU) も考慮し、ワークロードとネットワークアーキテクチャーに応じて調整する必要があります。詳細については、EC2 インスタンスのネットワークの最大送信単位 (MTU)を参照してください。
AWS では、99.9 パーセンタイルで 50us のクラスタープレイスメントグループで起動されたインスタンスと 200us のテールレイテンシーの間のラウンドトリップレイテンシーを定期的に測定しています。アプリケーションで一貫して低レイテンシーが必要な場合、Nitro System で構築された固定パフォーマンスインスタンスで最新バージョンの ENA ドライバーを使用することをお勧めします。
受信側スケーリング CPU アフィニティを設定する
受信側スケーリング (RSS) は、複数のプロセッサにネットワークトラフィック CPU 負荷を分配するために使用されます。デフォルトでは、公式 Amazon Windows AMI は、RSS を有効にして設定され、RSS を許可します。ENA Elastic Network Interface では、最大 8 個の RSS キューを利用できます。RSS キューやその他のシステム処理の CPU アフィニティを定義することで、マルチコアシステムで CPU の負荷を分散することができ、より多くのネットワークトラフィックを処理できます。16 個を超える vCPU を備えたインスタンスタイプでは、Set-NetAdapterRSS
PowerShell cmdlet を使用することをお勧めします。この cmdlet は、さまざまなシステムコンポーネントとの競合を防ぐために、すべての Elastic Network Interface の RSS 設定からブートプロセッサ (ハイパースレッディングが有効になっている場合は論理プロセッサ 0 と 1) を手動で除外します。
Windows はハイパースレッド対応であり、単一の Elastic Network Interface の RSS キューが常に異なる物理コアに配置されるようにします。したがって、ハイパースレッディングが無効になっていない限り、他の NIC との競合を完全に防ぐために、各 NIC の RSS 設定が 16 個の論理プロセッサの全体で分散されます。Set-NetAdapterRss
cmdlet を使用すると、BaseProcessorGroup、BaseProcessorNumber、MaxProcessingGroup、MaxProcessorNumber、および NumaNode (オプション) の値を定義することによって、NIC ごとの有効な論理プロセッサの範囲を定義できます。Elastic Network Interface 間の競合を完全に排除するのに十分な物理コアがない場合は、インターフェイスで想定されるワークロードに応じて、Elastic Network Interface 範囲内の論理プロセッサの数を減らします (つまり、管理ネットワークインターフェイスが少量であれば、それほど多くの RSS キューを割り当てる必要はないということです)。また、前記のように、さまざまなコンポーネントを CPU 0 で実行する必要があるため、十分な vCPU が利用可能な場合は、すべての RSS 構成から除外することをお勧めします。
例えば、ハイパースレッディングが有効になっている NUMA ノードを 2 つ備えた 72 の vCPU インスタンスに Elastic Network Interface が 3 つある場合、以下のコマンドは 2 つの CPU 間でネットワーク負荷を重複なく分散させ、コア 0 の使用を完全に防ぎます。
Set-NetAdapterRss -Name NIC1 -BaseProcessorGroup 0 -BaseProcessorNumber 2 -MaxProcessorNumber 16 Set-NetAdapterRss -Name NIC2 -BaseProcessorGroup 1 -BaseProcessorNumber 0 -MaxProcessorNumber 14 Set-NetAdapterRss -Name NIC3 -BaseProcessorGroup 1 -BaseProcessorNumber 16 -MaxProcessorNumber 30
これらの設定は各ネットワークアダプターに対して永続的であることに注意してください。インスタンスの vCPU 数が異なるインスタンスにサイズ変更された場合は、有効になっている Elastic Network Interface ごとに RSS 設定を再評価する必要があります。Set-NetAdapterRss
cmdlet に関するマイクロソフトのドキュメントは、こちらにあります。https://docs.microsoft.com/en-us/powershell/module/netadapter/set-netadapterrss
SQL ワークロードに関する特記事項: 同じ CPU に対する I/O およびネットワークの競合を最小限に抑えるために、Elastic Network Interface RSS 構成と共に I/O スレッドアフィニティ設定を確認することをお勧めします。affinity mask Server Configuration Option