体力,気力,ときどき知力

情報系HPC大学院生の日頃のメモなど.intel CPU, SIMD, AVX, vim, Linux,簡単なことから書きはじめてみたBlog

サーバを作ったけどなんか遅かったときの原因究明(dstat, ethtool)

こんばんは.久々の更新です.ちょっと色々バタバタしていたので.
久々のネタはクラスタを作った時のバッドノウハウです.
今回自分は,市販のPC4台を作ってクラスタを構築しました.
クラスタ構築の方法はまた別の機会に.

先に落ちを言うと,ミスって100Mスイッチを使ってしまって速度が出ず,先月末に2,3日それで悩みました.(ひどい話だ)
しかし,いざサーバを組んで速度が出ないとき,ハードウェアに原因があるとはなかなか思わない上に,さらに僕のサーバは遠隔にあるので,すぐにはハードウェアを見に行けない.
ハードウェアが悪い!とどうやって検証,断定して,どうやってそれを検証したかという話.

1. タスクマネージャ的なやつ(dstat)
まず,なんか遅いと思ったらネットワーク帯域のベンチマークをするのが第一.
詳細なネットワークのベンチマーク結果が必要ないなら,scpで適当な所にデータを送ってみると速度が出るので案外分かりますが,
ちゃんとやるなら,"dstat"というコマンドがあります.yumで落とせます.

dstat 1とやると,様々なシステム情報が出ます.
(1にすると1秒おきにシステム情報を取得.)
1つめはCPUのuserプロセスの使用率,systemプロセスの使用率,waitなど
2つめはDiskのI/O
3つめはネットワークのSend/recv.
他は良くわかんない.

取り敢えず,3つめを見れば良くて,なんかネットワークに負荷をかけて転送速度を見れば宜しい.
自分の環境だと,100Mbpsなら10~12MB/s出て,1000Mbpsなら80~90MB/s出ました.

今回は10~12MBだったので,そもそもNICかネットワーク機器がおかしいと判断.

2. 原因特定に至るまで(ethtool)
NICがおかしいか,ネットワーク機器がおかしいかを試してみるために,NICのシステム情報を見る方法.
ethtool (Ethernetの名前)を打てば情報が得られる.
Ethernetの名前はifconfigをするとわかる.eth1とか,そういう名前だと思う.

やると色々出てくるけど,最初に見るのは下のほうの
Speed
Duplex
の2つ.これが1000とfullになってればいいけど,今回は100,fullだった.

次に見るのは,supported link modesとAdvertised link modes
supported link modesは自分のNICの情報.ここに10,100,1000が全部あればOK
Advertised link modesは相手の情報.今回はここに10,100しかなかった.

これでLANケーブルかスイッチが悪いと断定.行きがてらスイッチとLANケーブルを買って行き,差し替えたら直った.

なお,Advertised link modesに1000があるのにspeedが100だったら,sysconfig/network-scripts/ifcfg-eth1を編集すると直せる.