とある社内ネットワークのファイルサーバーでどうしてもパフォーマンスがおかしいということがあった。スイッチとNICは1Gbps対応。eth0の状態をmii-toolで調べると、
# mii-tool eth0 eth0: negotiated 1000baseT-HD flow-control, link ok
NICは1000Mbpsで認識されている。
次にスイッチを疑い、同様構成のものを接続してみるとスイッチは問題ないことがわかったが、それと同時にネットワークに問題がありそうだというのがわかった。 チューニングで何かおかしくしてしまったところがあるのでは? と思い調べているうちに
# cat /sys/class/net/eth0/speed 100 # dmesg [ 29.759653] tg3 0000:01:00.0: eth0: Link is up at 100 Mbps, full duplex [ 29.759658] tg3 0000:01:00.0: eth0: Flow control is on for TX and on for RX [ 29.759660] tg3 0000:01:00.0: eth0: EEE is disabled [ 29.760011] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready # ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Advertised pause frame use: Symmetric Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full : :
と100Mbpsとして認識された状態だったことが判明。mii-toolの表示は参考にしてはいけないことがわかった。mii-toolは使わず、ethtoolを使うようにしていったほうがいい。また、念のためにdmsgか/sysも確認しておいたほうがいいだろう。
ということで、疑いはケーブルへ。調べてみると、見事にCAT5ケーブルで接続していたという事故であった。たとえばCAT6は赤色、CAT5は水色というような管理していたところだったのだが、どこかで余ったCAT5ケーブルがストックに混入し、それがCAT6と同じ赤色だったというオチ。良く見ると微妙に色も異なっていた。色で管理するのも注意が必要だ。ケーブルに刻印されているスペック文字は見る癖をつけておいたほうがいいかもしれない。
念のため実際にiperfで別のマシン(CAT5eで1Gスイッチ経由で接続)から転送速度も実測してみると10倍の差だった。計測方法は、サーバー側で「iperf -s」を実行して待機。クライアント側で「iperf -c IPアドレス」とする。
# iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local xx.xx.xx.xx port 5001 connected with xx.xx.xx.xx port 50964 [ ID] Interval Transfer Bandwidth ・CAT5ケーブルの場合 [ 4] 0.0-10.0 sec 112 MBytes 94.0 Mbits/sec ・CAT6ケーブルの場合 [ 4] 0.0-10.0 sec 1.10 GBytes 941 Mbits/sec
ファイルシステムにボトルネックがあるので、10倍の改善には当然ならないが、数倍の差が出た。簡単なものでも実測を行って検証しておいたほうがいいという事例である。