2013年2月19日火曜日

高負荷状態のルータの内情 その1

普段あまり使う機会が無いといえば無いし、一般的な用途には下火な印象もあるBitTorrentみたいなP2Pだけど、ああいう物でネットワーク的に負荷?をかけるとルータのレスポンスが著しく落ちるのは何故なのか前から興味があった。

昔のルータは少し負荷をかけるとそのまま逝っちゃってリセットしないと復旧しなかったりしたけど最近のはFONみたいな安い奴でも落ちずに粘るし、そういう意味でもメカニズムに興味が。

丁度?FONルータのファームを書き換えられる環境が整ったので(基盤からシリアルの足生やしてUSBシリアル変換アダプタ買ってきて繋いだだけだけど)カスタムファームを入れてtelnetでつないで状況をウォッチしてみる事に。

結果としては・・・softirqが99%とかになっておりここが問題っぽい。そしてdnsmasqタスクが結構な高負荷になっている事象は観測出来た。ただしdnsmasqは常に高負荷なわけでは無さそう。ソフトウェア割り込みでフン詰まっているのは間違いないんだろけど割り込み要因が問題。

softirqに関してはカスタムファームのKernelであるLinuxの仕組みという事で良いと思うんだけど、実際キャパやその処理能力を超える割り込みが入った場合の挙動は勉強不足でよく分からない。何かツールとかでその瞬間に入っている割り込み種別とかプライオリティとか確認する方法あるのかな?Linuxでの開発ってした事無いのでこちらも勉強しないとね。

ルータのファームってLinuxとは限らないと思うけど他のOSでも同じ事が起きるのだろうか?基本的にP2Pって同時に張られるセッション数が凄い数になっているんじゃないかと仕様も調べずに勝手に想像しているけど、単にそれが原因なのか、それともデバイスドライバの実装上の問題なのかはまず確認が必要かも。

いずれにせよサーバに負荷が集中して~ってパターンと同様の事象が起きているという認識であっているのかなぁ。だとしたらこの辺を勉強しておく事は仕事にもつながりそうだしちょっと調べてみますか。デバッグ手法に関してはAndroidの下回りとか開発するときにも生かせそうだしね。(無理やり紐づけてみる)

というわけで、その2につづく(はず)