オフロードって何?みたいなキーワードで僕のサイトにやってくる人が時々いる。僕のThinkPad X121eに入っている「研究社リーダーズ+プラスV2」というEPWING英和辞典によれば、オフロード(offload)の元の意味は「荷物を降ろすこと」だ。コンピュータのTCP/IPプロトコルスタックについていえば、各プロトコルスタック専属であるはずの処理またはその一部を、ハードウエアであるNIC(Network Interface Card)へ割り当てることであり、それによってTCP/IP周りのソフトウエア的な処理量が減るので、ネットワーク通信がより高速化されることを期待するものである。
パフォーマンス向上のためにこのような事をするのが最近の流行なのだが、じつはこのオフロード処理がパフォーマンスを向上させるどころか、かえって悪化させる事案が散見される。特に仮想化したシステムとの相性は最悪で、VMwareとTCP Segmentation Offload (TSO)を参照して欲しい。この記事は本記事と内容が一部重複するけれども、Windows Vista/7に特化してここに小さな記事としてまとめておきたい。
まず、PCのオフロードの状態を確認する。コマンドウインドウを開き、黙ってコマンドを打つ。
インターフェイス 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を再起動する。
再起動後にもう一度オフロード状態を確認する。
インターフェイス 1: Loopback Pseudo-Interface 1
インターフェイス 14: ワイヤレス ネットワーク接続
インターフェイス 16: ローカル エリア接続
インターフェイス 19: ローカル エリア接続 2
C:\Windows\system32>
オフロードは、すべてのインターフェースにてオフとなった。よしよし。
このレジストリエントリーは、私のThinkPad X121e(64bit Windows 7)でも有効であった。64bitの方もご心配なく。
レジストリをいじるのが嫌な人は、以下の手順で個別アダプタの設定としてオフとすることができる。(以下の設定例はWindows 7の場合)
- コントロールパネルをクリック
- ネットワークとインターネットをクリック
- ネットワークと共有センターをクリック
- アダプター設定の変更をクリック
- ローカルエリア接続を右クリックしてプロパティを選択
- アダプタのプロパティが表示されるので、構成ボタンをクリック
- 詳細設定タブをクリック。以下の項目をすべて無効とする。
- IPv4チェックサム オフロード
- TCPチェックサム オフロード(IPv4)
- TCPチェックサム オフロード(IPv6)
- UDPチェックサム オフロード(IPv4)
- UDPチェックサム オフロード(IPv6)
- ジャンボフレーム(無効化:デフォルト)
- 受信側スケーリング(無効化:デフォルト)
- 大量送信オフロード(IPv4)
- 大量送信オフロードv2(IPv4)無効化:デフォルト
- 大量送信オフロードv2(IPv6)無効化:デフォルト
設定はすぐに反映される。(アダプタは一度停止した後再び立ち上がる。)設定後のオフロードの様子はコマンドで確認する。
インターフェイス 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もなんかちょっと早くなったかも?いやぁ、効果あるなぁ!
Webmaster
ハードウエアへのオフロード処理は、OSとハードウエアの相性があるようで、うまくいったり、うまくいかなかったりみたいな感じかな。結局、当該機能をオフとする方がパフォーマンスが出たりするケースがちらほら。ネットワーク越しに大量にファイルをコピーするときは、少しでも転送速度が速い方がうれしいですよね。
Webmasterからsst215への返信
こちらの記事は当ブログで一番閲覧数が多い記事で、本件に関しては皆さん困ってらっしゃる方が多いようです。
sst215
WebmasterからT.への返信
T.
Webmasterから吉原への返信
吉原
Webmasterからありがとうございますへの返信
ありがとうございます