続・NETSHコマンド
先日(http://d.hatena.ne.jp/atsurin/20101117)まとめたNETSHコマンドだが、それでは実際にどのように設定すれば通信速度の最適化が図れるか改めてまとめてみる。
基本は、Vista以降に搭載された「Auto-Tuning機能」及び、「SNP(Scalable Networking Pack)」を環境に合わせて変更すればよい。ちなみに「SNP(Scalable Networking Pack)」の機能は以下の通り。
- Receive Side Scaling(RSS) : TCPの受信制御を効率化する機能。この機能を有効にすると、通常は一つのプロセッサコアで行う受信制御を、複数のコアが分担して行うようになる。特定のプロセッサコアへの負荷を分散できる。
- TCP Chimney Offload : TCPのネットワーク制御をプロセッサからNICにオフロード(負荷を軽減)する機能。この機能を有効にすると、大量データの送信処理や、通信データの信頼性をチェックするための値(チェックサム)の計算などを、NIC上のTOE(TCP Offload Engine)と呼ぶモジュールで処理する。プロセッサにかかるネットワーク処理の負荷を軽減できる。
- Network Direct Memory Access(NetDMA) : NICからのメモリーアクセスを効率化する機能。この機能を有効にすると、NICに処理をオフロードしてもプロセッサを経由しなければできなかったメモリーアクセスが、直接できるようになる。プロセッサの負荷の軽減と、NICでの処理の高速化が図れる。
見た限りではネットワークパフォーマンス向上に一役買っている様だが、いずれもカーネルモードで処理されるため、メモリーリークが発生したりメモリ領域不足が起こる可能性がある。そもそも発展途上の機能だけにデバイスドライバとの相性問題(対応云々も含めて)も存在し、実際に特定のネットワーク操作でパフォーマンスが低下するといった不具合が発生したり、ネットワークパケットの取りこぼしが発生するのなど問題もあることから、PC環境や状況にもよるが無効にする方がいいケースが多い(OSデフォルトで有効化されている)。
具体的な通信速度の最適化は、以下の様にNETSHコマンドでグローバルTCPパラメーターを設定することになる。尚、コマンドプロンプト(DOS窓)を起動させる場合は必ず管理者権限で行うこと。
- set globalの使用法及びパラメーターの確認方法
- netsh interface tcp set global ?
- Auto-Tuning機能の最適化
- netsh interface tcp set global autotuninglevel=[パラメータ]
- パラメータ一覧
- disabled : 受信ウィンドウを既定値に修正します。
- highlyrestricted : 受信ウィンドウの既定値を少しだけ超えて拡大できるようにします。
- restricted : いくつかのシナリオで制限されますが、受信ウィンドウの既定値を越えて拡大できるようにします。
- normal(規定) : 受信ウィンドウをほとんどすべてのシナリオに合わせて拡大できるようにします。
- experimental : 受信ウィンドウを極端なシナリオにも合わせて拡大できるようにします。
- 一般的に、highlyrestrictedを設定した方が通信速度の高速化に繋がるケースが多い模様。
- netsh interface tcp set global autotuninglevel=highlyrestricted
- SNPの無効化(有効化にする場合は、パラメータをenabledに)
- 設定の確認
- netsh interface tcp show global
- Auto-Tuning機能及びSNPの各機能の設定変更が反映されているか確認すること。また、ハード側の設定も必要な場合があるので注意すること。
- netsh interface tcp show global