目次
TSO(TCP Segmentation Offload)とは、TCP通信の際にセグメント分割タスクの処理をCPUからNICに移管する技術のことである。理論的にはTSOによりTCP通信の処理をCPUとNICに分散させ、CPUの処理をNICに肩代わりさせることにより浮いたCPUリソースを有効活用しようという考え方である。
しかしながら、環境によってはこの機能により通信の劣化やインターフェイスに過負荷がかかった際に通信が途切れる、パケットロスが発生するなどの不具合が発生する可能性があるため、以下の手順にて無効化する。
ethtoolを使用して設定状態を確認する。~
ethtool -k eth0
Offload parameters for eth0: rx-checksumming: on tx-checksumming: on scatter-gather: off tcp-segmentation-offload: off udp-fragmentation-offload: off generic-segmentation-offload: on generic-receive-offload: off large-receive-offload: on
上記の内、以下の項目がTSO関連の項目となる。これらがonの場合はTSOが動作している。
rx-checksumming: on tx-checksumming: on tcp-segmentation-offload: on
ethtoolを使用して設定を無効化する。
この方法は一過性の設定のため、恒常的に無効化するには後述の手順を行う必要がある。
ethtool -K eth0 rx off tx off tso off
ethtool -k eth0
無効化設定が適用された場合は以下の表示となる
rx-checksumming: off tx-checksumming: off tcp-segmentation-offload: off
無効設定を保持するためには、起動時にethtoolを動作させて変更を行う必要がある。
インターフェイスの設定ファイル(/etc/sysconfig/network-scripts/ifcfg-eth[n])にETHTOOL_OPTSにてethtoolのオプションを設定することができるが、TSO関連の設定はこのオプションでは定義できない。
このため、/etc/rc.d/rc.localなどにethtoolを実行する設定を行い、起動時に実行させる。
/sbin/ethtool -K eth0 rx off tx off tso off