はじめに
-
WindowsServerでサーバを構築する際、昔はWindowsServer2008 R2でChimney オフロード状態なるパラメーターを適切に設定しないと、とんでもないことが起きたという話を諸先輩方から聞いたことがありました
- TCP/IPの処理をプロセッサにさせるか、NICにさせるかのパラメーターで、これをenable(=NICで処理させる)にすると大変だったらしい...
-
OSがバージョンアップすると、このTCPグローバルパラメーターにも変化があったので、備忘として残しておきます
WindowsServer2022の場合
TCP グローバル パラメーター
----------------------------------------------
Receive-Side Scaling 状態 : disabled
受信ウィンドウ自動チューニング レベル : normal
アドオン輻輳制御プロバイダー : default
ECN 機能 : enabled
RFC 1323 タイムスタンプ : allowed
初期 RTO : 1000
Receive Segment Coalescing 状態 : enabled
非 Sack の Rtt 回復性 : disabled
SYN の最大再送信数 : 4
Fast Open : disabled
Fast Open フォールバック : enabled
HyStart : enabled
Proportional Rate Reduction : enabled
ペーシング プロファイル : off
- サーバ構築の際、以下項目はいつもいじってた
- NetDMA
- WindowsServer2019以降、非サポートのため考慮しない
- Receive-Side Scaling 状態
- enabled→disabledはこれまで通り変更
- NetDMA
デフォルト値について
-
RFC 1323 タイムスタンプ : allowed
- TCPの再送タイマーで使用されるRTTを計算する際、TCPウインドウサイズ(ACKを待たず一度に送信できるデータ量)が最大の65535バイトである場合、正確な計算ができない
- タイムスタンプを有効にしておくと、特にデータ量が多い通信の場合、正確なRTTの計算が可能になり、スループットが最適化されるとのこと。
ということで、このまま
-
Proportional Rate Reduction : enabled
- WindowsServer2022から追加された項目。パケロス時の回復を早めてくれるとのことで、このまま
-
初期 RTO : 1000
最大 SYN 再送信数 : 4
-
RTOは再送するまでの時間、最大 SYN 再送信数はリトライ数
この設定だと1秒後に再送、次は2秒、4秒、8秒とRTOが増え、5回目に諦めるという設定 -
これまでだと初期 RTO:3000、最大 SYN 再送信数:2であったため、3秒後に再送、次は6秒、12秒、3回目に諦めるという設定
-
タイムアウトまでの時間が早い代わりに、再送回数が多いので通信の品質向上という意味で、このまま
-
参考(それ以前のバージョンについて)
WindowsServer2019とWindowsServer2016のTCPグローバルパラメーターのSNPについて
-
Chimney オフロード状態
(Win2016以前)
NetDMA 状態
- Windows Server2019からパラメータ廃止。
構築ではこの両パラメータをdisableにしていた
- Windows Server2019からパラメータ廃止。
-
したがって、WindowsServer2019でのSNP無効化は以下コマンドのみ
netsh int tcp set global rss=disabled
=====Windows Server 2019=====
C:\Users\Administrator>netsh int tcp show global
アクティブ状態を照会しています...
TCP グローバル パラメーター
----------------------------------------------
Receive-Side Scaling 状態 : disabled
受信ウィンドウ自動チューニング レベル : normal
アドオン輻輳制御プロバイダー : default
ECN 機能 : enabled
RFC 1323 タイムスタンプ : disabled
初期 RTO : 3000
Receive Segment Coalescing 状態 : enabled
非 Sack の Rtt 回復性 : disabled
最大 SYN 再送信数 : 2
Fast Open : disabled
Fast Open フォールバック : enabled
HyStart : enabled
ペーシング プロファイル : off
=====Windows Server 2016=====
C:\Users\Administrator>netsh int tcp show global
アクティブ状態を照会しています...
TCP グローバル パラメーター
----------------------------------------------
Receive-Side Scaling 状態 : disabled
Chimney オフロード状態 : disabled
NetDMA 状態 : disabled
Direct Cache Access (DCA) : disabled
受信ウィンドウ自動チューニング レベル : normal
アドオン輻輳制御プロバイダー : none
ECN 機能 : enabled
RFC 1323 タイムスタンプ : disabled
初期 RTO : 3000
Receive Segment Coalescing 状態 : enabled
非 Sack の Rtt 回復性 : disabled
SYN の最大再送信数 : 2
TCP Fast Open : disabled
まとめ
- ここまで細かく考える必要があるのか...という感じですし、そういった場面に遭遇したことがないですが、もしもの時の参考になれば幸いです