tech.guitarrapc.cóm

Technical updates

PowerShell でTCP遅延Ack 設定を操作する

ネットワークチューニングの1ついえば、TCP遅延ACKやNagleですね。

http://ja.wikipedia.org/wiki/TCP%E9%81%85%E5%BB%B6ACK

Windowsではどちらの設定も「レジストリを操作して再起動する」ことで調整可能です。

じゃぁ実際どうやって操作するか? TCP遅延Ackを操作するサンプルを紹介しましょう。

レジストリ操作

PowerShellは、 Registry::とすることで、各種レジストリキーにアクセスできます。

レジストリツリー(ハイブ)はGet-ChildItemで取得でき、キーのの状態はGet-ChildItemで取得できます。

さらに、Set-ItemProperyで任意のキーに任意の値をセットできます。

ここまで書けばイメージできる通り、ファイル操作と同様にレジストリ操作が可能です。PSプロバイダに隠ぺいされた、異なるプロバイダへの容易なアクセスがPowerShellで操作する最大のメリットです。

TCP遅延Ack のレジストリ

Microsoftのサポートページに設定が書かれています。

サブキー :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<Interface GUID>

エントリ :
TcpAckFrequency

値の種類 : REG_DWORD、数値
有効な範囲 : 0 ~ 255
デフォルト値 : 2
無効にする値 : 1

ということで、書きます。

コード

https://gist.github.com/guitarrapc/87b6686d3691f1805ade

ちょっとだけ説明

ネットワークインタフェースそれぞれにキーを設定する必要があるのですが、AddressTypeから設定すべきネットワークアダプタが特定できます。

あとは、有効、無効をboolからDWORDに変換して判定するだけです。

まとめ

操作をする以上、冪等性って大事ですよね。状態を持たないように書くと比較的楽に書けます。PowerShellにはパイプラインがあるので、これを使うのが楽でしょう。

ちなみにDSCで書くともっと楽です。興味のある人はぜひ考えてみてください。