2014年7月24日木曜日

ネット対戦に特化したネット環境作りとOSチューニング(OSチューニング編)

はじめに

今回はOSチューニングについて寄稿します。
プロバイダの品質が高く、ハードウェアのスペックも高いことが前提です。
最終的な詰めであるので連載の全てを読んだことを前提とします。
レジストリの編集がメインなので意味を深く理解してからチューニングしましょう。

対象とする読者

1.Windows7でとにかく最小遅延を目指す
2.1Gbps以上の回線を契約している
3.ルータやNICも問題がない
4.レジストリの編集に抵抗がなく、万一の際も自分で修復可能

TCP処理先をNICからCPUに変更する

XPまでのOSの場合、TCPに関する処理(例えば、パケットが届いた順番の管理や、正しいデータが届いたかのチェック)を全てCPUで行っていました。
一方、最近のOSとNICの組み合わせではこの処理をNIC側にさせることでCPU負荷を下げています。
しかし、通信量がNICの処理速度を超えるとNICが処理しきれずに遅延やパケットロスをする可能性が出てきます。
これに対処するために、TCP処理のオフロード無効化を施します。

※一部のIPやホスト名は*にマスクしています。
C:\Users\YukiKaki> reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /f /v DisableTaskOffload /t REG_DWORD /d 1

C:\Users\YukiKaki reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    ICSDomain    REG_SZ    mshome.net
    SyncDomainWithMembership    REG_DWORD    0x1
    NV Hostname    REG_SZ  
******** 
    DataBasePath    REG_EXPAND_SZ    %SystemRoot%\System32\drivers\etc
    NameServer    REG_SZ
    ForwardBroadcasts    REG_DWORD    0x0
    IPEnableRouter    REG_DWORD    0x0
    Domain    REG_SZ
    Hostname    REG_SZ    ********
    SearchList    REG_SZ
    UseDomainNameDevolution    REG_DWORD    0x1
    EnableICMPRedirect    REG_DWORD    0x1
    DeadGWDetectDefault    REG_DWORD    0x1
    DontAddDefaultGatewayDefault    REG_DWORD    0x0
    EnableWsd    REG_DWORD    0x1
    QualifyingDestinationThreshold    REG_DWORD    0x3
    MaxUserPort    REG_DWORD    0xfffe
    TcpTimedWaitDelay    REG_DWORD    0x1e
    StrictTimeWaitSeqCheck    REG_DWORD    0x1
    EnableIPAutoConfigurationLimits    REG_DWORD    0x1
    ReservedPorts    REG_MULTI_SZ    1433-1434
    DnsOutstandingQueriesCount    REG_DWORD    0x3e8
    EnableTCPA    REG_DWORD    0x0
    DisableTaskOffload    REG_DWORD    0x1
    Tcp1323Opts    REG_DWORD    0x0
    EnableDca    REG_DWORD    0x0
    DhcpNameServer    REG_SZ    ***.***.
***.***

 C:\Users\YukiKaki

うまくDisableTaskOffloadが追加できていれば、TCP処理のオフロード無効化が出来ています。


TCPパラメータをチューニング(ウインドウサイズの変更と余計な機能の無効化)

ウインドウサイズの変更とは、 一度に送受信するデータのサイズを変更することです。
ここではウインドウサイズを拡大し、その他余計な機能を全て無効にしています。

※一部のIPやホスト名は*にマスクしています。
C:\Users\YukiKaki> netsh interface tcp set global rss=disabled chimney=disabled autotuninglevel=highlyrestricted congestionprovider=none ecncapability=disabled timestamps=disabled netdma=disabled dca=disabled

C:\Users\YukiKaki netsh interface tcp show global
アクティブ状態を照会しています...

TCP グローバル パラメーター
----------------------------------------------
Receive-Side Scaling 状態              : disabled
Chimney オフロード状態                 : disabled
NetDMA 状態                            : disabled
Direct Cache Acess (DCA)               : disabled
受信ウィンドウ自動チューニング レベル  : highlyrestricted
アドオン輻輳制御プロバイダー           : none
ECN 機能                               : disabled
RFC 1323 タイムスタンプ                : disabled
** 上の autotuninglevel 設定は、少なくとも 1 つのプロファイルのローカル/ポリシー構成を
上書きするウィンドウ スケーリング ヒューリスティックの結果です。


 C:\Users\YukiKaki> 

netsh interface tcp show global の結果が同じになっていればうまく反映されています。

ただし、これは一例です。
相手側の環境が最良でない場合はcongestionprovider=ctcpや、timestamps=enabledが好ましい場合もあります。
これらのパラメータを編集する際は マイクロソフトの公式情報 を参照して意味を理解しましょう。


TCPパラメータをチューニング(TcpAckFrequency)

通称TAFの名称で、ネトゲ界隈では有名なチューニングです。

余りに有名なのでゆとり溢れるツール出ていますが、本記事の読者はどこを編集するか知ることが目的の人が多いので、全ての編集はコマンドラインで行います。


①初めに、wmic nic getコマンドでインタフェースGUIDを確認します。(赤字部分)
※一部のIPやホスト名は*にマスクしています。
C:\Users\YukiKaki> wmic nic get  "GUID" , "NetConnectionID"

GUID                                                                        NetConnectionID
{46740908-ABB6-46D1-A48C-AA5A7E72E296}  ローカル エリア接続

{2D320EBC-8F7A-4ACE-9ADC-48E6AEC2FC97}  ワイヤレス ネットワーク接続

 C:\Users\YukiKaki> 




②レジストリエントリにTcpAckFrequencyを追加します。
  赤字部分は"対象のインタフェースGUID"を適宜書き換えましょう。

※一部のIPやホスト名は*にマスクしています。
C:\Users\YukiKaki> reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{46740908-ABB6-46D1-A48C-AA5A7E72E296} /f /v TcpAckFrequency /t REG_DWORD /d 1

C:\Users\YukiKaki reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{46740908-ABB6-46D1-A48C-AA5A7E72E296}
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{1379B417-12D1-465D-871B-D0590A15E452}
    UseZeroBroadcast    REG_DWORD    0x0
    EnableDeadGWDetect    REG_DWORD    0x1
    EnableDHCP    REG_DWORD    0x1

    NameServer    REG_SZ
    Domain    REG_SZ
    RegistrationEnabled    REG_DWORD    0x1
    RegisterAdapterName    REG_DWORD    0x0
    DhcpIPAddress    REG_SZ    ***.***.***.***
    DhcpSubnetMask    REG_SZ    255.255.0.0
    DhcpServer    REG_SZ   
***.***.***.***
    Lease    REG_DWORD    0x3840
    LeaseObtainedTime    REG_DWORD    0x508a6c0c
    T1    REG_DWORD    0x508a882c
    T2    REG_DWORD    0x508a9d44
    LeaseTerminatesTime    REG_DWORD    0x508aa44c
    AddressType    REG_DWORD    0x0
    IsServerNapAware    REG_DWORD    0x0
    DhcpConnForceBroadcastFlag    REG_DWORD    0x1
    TcpAckFrequency    REG_DWORD    0x1
    DhcpInterfaceOptions    REG_BINARY    FC000000000000000000000000000000196C8A503B0000000000000004000000000000004CA48A50000031383A0000000000000004000000000000004CA48A5000001C200600000000000000040000
00000000004CA48A50AC100001030000000000000004000000000000004CA48A50AC100001010000000000000004000000000000004CA48A50FFFF0000330000000000000004000000000000004CA48A5000003840360000000000000004000000000000
004CA48A50AC100001350000000000000001000000000000004CA48A5005000000
    DhcpGatewayHardware    REG_BINARY    AC10000106000000003A9DAFF77E
    DhcpGatewayHardwareCount    REG_DWORD    0x1
    DhcpNameServer    REG_SZ   
***.***.***.***
    DhcpDefaultGateway    REG_MULTI_SZ    ***.***.***.*** 
    DhcpSubnetMaskOpt    REG_MULTI_SZ    ***.***.***.***
 
 C:\Users\YukiKaki> 
reg queryの結果でTcpAckFrequency0x1で存在すればうまく反映されています。


ここまで進んだらレジストリの編集結果を反映するために再起動しましょう。



まとめ

本記事では、TCPのパラメータを変更して高速化を図っていますが、他にもTCPパラメータはたくさんあります。
http://www.microsoft.com/en-us/download/details.aspx?id=9152

Web上では、ブログなどで「○○のレジストリが~」等の記事がよくあります。
しかし、よく分かっていない人が書いている記事が非常に多いです。
特に、XP用のレジストリをWindows7に適用している意味不明なものが多いです。

Windowsの仕様は、MSDNやTechnetでマイクロソフトが公開しています。
その裏付けを確認している人の記事を参考とするようにしましょう。

0 件のコメント:

コメントを投稿