tech.guitarrapc.cóm

Technical updates

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

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

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

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

目次

レジストリ操作

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

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

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

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

TCP遅延Ack のレジストリ

書いてある通りです。

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

エントリ :
TcpAckFrequency

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

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

コード

ちょっとだけ説明

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

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

まとめ

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

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