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

情報系大学院生 兼 HPC系ソフトウェアエンジニアのメモ書き.やったことを貼って後日にコピペ再現するために書いているので新規性・汎用性・芸術性は考えてません.数値計算,高精度演算,SIMD, vim, Linuxなど.

サーバを作ったけどなんか遅かったときの原因究明(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を編集すると直せる.