TSOが原因でさくらVPSへのウェブアクセスが異常に遅くなるトラブルに遭遇

自宅のネット環境から都道府県別統計とランキングで見る県民性 [とどラン]を運営している、さくらVPSへのアクセスが異常に遅くなるトラブルに遭遇した。


現象としては

  • ブラウザ経由のアクセス、ftpクライアント経由のアクセス速度が異常に遅くなる。(数バイト/秒程度)
  • 小さいパケットだと問題ないので、pingやtracerouteでは異常が発見されない。
  • 自宅ネット環境はDHCPでIPがふられているが、特定のIP,ゲートウェイのセットでのみ発生する。
  • 職場の別回線ではそのようなトラブルは一切発生しない。
  • 複数のWindowsXPで発生したが、Linuxデスクトップ(Debian)では発生しない。


この件について自宅のプロバイダともやりとりをしたが、原因が見つからなかった。そこでさくらインターネットに問い合わせたところ、すぐに対策法が送られてきて問題は解決した。


サーバー側でTSO(TCP Segmentation Offload)をかけているのが原因で、これをoffにすることで問題は解決した。


http://www.ginnokagi.com/2008/05/vmwaretcp_segmentaion_offload.html

ネットをさまよってみると、どうやらこれはNIC(Network Interface Card)のTSO(TCP Segmentation Offload)と関係するらしい。TSOとは一言で言うと、CPUが処理していたTCP接続をIPパケットに分解する仕事の一部(TCPをセグメントと呼ばれる単位へ分割するタスク)をハードウエア的にNICにやらせてしまおうということだ。そうすればCPUは余計な雑務から開放されるので、その分他の仕事をすることが出きるようになる。


結論から言うと、ホストOSであれ、ゲストOSであれ、LinuxであれWindowsであれ、TSOをオフとするのが無用のトラブルを回避するためのキモとなる。ホストOSがやるべきレイヤー4の処理の一部(TCPセグメント化)をハードウエアに丸投げすれば、その時点でその処理単位は割り込みによる処理の調停ができなくなるのであるから、CPUコンテキストスイッチの折、ホストOS・ゲストOS間でのハードウエアリソース(NIC)の切り替え処理などがうまくいかなくなることがありそうだ。


IPアドレスからさくらVPSと思われるページをいくつか調べたところ、アクセスが異常に遅くなっており、このことに気づいていないさくらVPSユーザーも多いようだ。私も自分の環境で問題が発生しなければ気づかなかった。さくらVPSを使っているユーザーはこの設定をしておくことをおすすめする。


さくらインターネットでもFAQに掲載しているようだが、私の検索能力では引っかからなかったので、後に続く人のためにもエントリーとしてあげておく。


ページが見つかりません|さくらインターネット公式サポートサイト

さくらのVPSにおきまして、不特定のVPS収容ホストとクライアント環境(プロ
バイダ等)の組み合わせにて、VPSからのダウンロード方向の通信に遅延が発生
するとのお問い合わせを複数のお客様より頂いております。


本現象への対策といたしまして、ご利用されるVPSにて以下の設定を推奨させ
て頂きますので、さくらのVPSをご利用中のお客様におかれましては、サーバ
設定の修正をお願いいたします。


■現象
・http,ftp,scp等でのファイルのダウンロード速度が極端に遅い。
・ファイルをダウンロード中に通信が切断される。
・ホームページの静的なコンテンツ表示に異常に時間がかかる。


■対策方法
VPS の ネットワークインターフェース設定にて、TSO(TCP Segmentation
Offload)を off へ設定変更を行うことで本現象を回避できる場合があります。


さくらのVPSで提供中の各OS毎の設定手順は下記の通りとなります。


CentOS
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001387


Debian
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001388


Fedora
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001389

FreeBSD
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001390


Ubuntu
http://sakura.cb-faq.com/faq/public/app/servlet/qadoc?QID=001391