Windows Vista/7のオフロードを無効化する

  • 投稿日:
  • by
  • カテゴリ:

オフロードって何?みたいなキーワードで僕のサイトにやってくる人が時々いる。僕のThinkPad X121eに入っている「研究社リーダーズ+プラスV2」というEPWING英和辞典によれば、オフロード(offload)の元の意味は「荷物を降ろすこと」だ。コンピュータのTCP/IPプロトコルスタックについていえば、各プロトコルスタック専属であるはずの処理またはその一部を、ハードウエアであるNIC(Network Interface Card)へ割り当てることであり、それによってTCP/IP周りのソフトウエア的な処理量が減るので、ネットワーク通信がより高速化されることを期待するものである。

パフォーマンス向上のためにこのような事をするのが最近の流行なのだが、じつはこのオフロード処理がパフォーマンスを向上させるどころか、かえって悪化させる事案が散見される。特に仮想化したシステムとの相性は最悪で、VMwareとTCP Segmentation Offload (TSO)を参照して欲しい。この記事は本記事と内容が一部重複するけれども、Windows Vista/7に特化してここに小さな記事としてまとめておきたい。

まず、PCのオフロードの状態を確認する。コマンドウインドウを開き、黙ってコマンドを打つ。

C:\Windows\system32> netsh int ip show offload

インターフェイス 1: Loopback Pseudo-Interface 1

udp transmit チェックサムはサポートされています。
tcp transmit チェックサムはサポートされています。
udp receive チェックサムはサポートされています。
tcp receive チェックサムはサポートされています。

インターフェイス 14: ワイヤレス ネットワーク接続


インターフェイス 16: ローカル エリア接続

ipv4 transmit チェックサムはサポートされています。
udp transmit チェックサムはサポートされています。
tcp transmit チェックサムはサポートされています。
tcp large send offload はサポートされます。
ipv4 receive チェックサムはサポートされています。
udp receive チェックサムはサポートされています。
tcp receive チェックサムはサポートされています。

インターフェイス 19: ローカル エリア接続 2

C:\Windows\system32>

実際に使っているのは、ローカルエリア接続で、こらは普通のイーサネット接続だ。Windowsのオフロードは対象がチェックサムとLSO(Large Send Offload、おそらく大きなパケットのオフロード処理)のみのようだね。

オフロードをオフとするには、OS全体でまとめてオフとできるとよい。レジストリエディタ(regedit.exe)を開いて"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"をクリックし、新規でDWORD値を作成する。エントリー名を"DisableTaskOffload"とし、そのDWORD値を"1"とする。この設定を反映させるためにWindows Vista/7を再起動する。

再起動後にもう一度オフロード状態を確認する。

C:\Windows\system32> netsh int ip show offload

インターフェイス 1: Loopback Pseudo-Interface 1


インターフェイス 14: ワイヤレス ネットワーク接続


インターフェイス 16: ローカル エリア接続


インターフェイス 19: ローカル エリア接続 2


C:\Windows\system32>

オフロードは、すべてのインターフェースにてオフとなった。よしよし。

このレジストリエントリーは、私のThinkPad X121e(64bit Windows 7)でも有効であった。64bitの方もご心配なく。

レジストリをいじるのが嫌な人は、以下の手順で個別アダプタの設定としてオフとすることができる。(以下の設定例はWindows 7の場合)

  1. コントロールパネルをクリック
  2. ネットワークとインターネットをクリック
  3. ネットワークと共有センターをクリック
  4. アダプター設定の変更をクリック
  5. ローカルエリア接続を右クリックしてプロパティを選択
  6. アダプタのプロパティが表示されるので、構成ボタンをクリック
  7. 詳細設定タブをクリック。以下の項目をすべて無効とする。
    • IPv4チェックサム オフロード
    • TCPチェックサム オフロード(IPv4)
    • TCPチェックサム オフロード(IPv6)
    • UDPチェックサム オフロード(IPv4)
    • UDPチェックサム オフロード(IPv6)
    • ジャンボフレーム(無効化:デフォルト)
    • 受信側スケーリング(無効化:デフォルト)
    • 大量送信オフロード(IPv4)
    • 大量送信オフロードv2(IPv4)無効化:デフォルト
    • 大量送信オフロードv2(IPv6)無効化:デフォルト

設定はすぐに反映される。(アダプタは一度停止した後再び立ち上がる。)設定後のオフロードの様子はコマンドで確認する。

C:\Windows\system32> netsh int ip show offload

インターフェイス 1: Loopback Pseudo-Interface 1

udp transmit チェックサムはサポートされています。
tcp transmit チェックサムはサポートされています。
udp receive チェックサムはサポートされています。
tcp receive チェックサムはサポートされています。

インターフェイス 14: ワイヤレス ネットワーク接続


インターフェイス 16: ローカル エリア接続


インターフェイス 19: ローカル エリア接続 2


C:\Windows\system32>

見ての通り、設定していないローカルループバックはオフロードがまだ有効となっている。

似たような外国の記事で、Windows 7/Vista上でパケットロスが起こるというものがある(Packet loss in Win7/vista but not XP)。この記事の中のアドバイスでは、電力管理設定もいじってスリープ時にアダプタの電源をオフとしないようにしろと書いてあるが、僕はそこまで気になったことはないし。

僕のThindPad X121e/Windows7 でオフロードをオフとしたら、とても遅かったSylpheedのメール受信速度が通常の速さに戻った。IEもなんかちょっと早くなったかも?いやぁ、効果あるなぁ!