2009年9月14日月曜日

net-snmpのC10K問題(前編)

このエントリーをはてなブックマークに追加
昔C10K問題というのが話題になりました。Y2K問題をもじった名前なので2000年から数年間くらいですね。インターネットのバックボーンが1Gbpsに到達した。GbEを備えた1GHzのCPUのサーバが安価に手に入るようになった。しかし、10,000クライアントを同時にさばこうとすると、ハードウェアではなくOSがボトルネックになるという問題です。

当時はsendfileのようなゼロコピーsendのシステムコールはありませんでした。大量のスレッドを効率よく実行できるのは一部の商用OSだけでした。大量のファイル記述子の状態変化を効率よく待つ仕掛けもありませんでした。これではOSがボトルネックになるのも無理からぬ話でした。しかし、これはもう過去のことです。

我々はSun Fire T2000のメモリを64GBに増設した時点で、これまでの経験から30,000クライアント程度は同時にさばけると見積もりました。とはいえ、これまでの最大は5,000クライアント程度でC10Kの世界は実は未経験だったのです。

先日Firefoxの新しいバージョンがリリースされたときに初めてC10Kの世界に突入しました。Solaris 10のTCP/IPスタックFireEngineが押し寄せるパケットをさくさくさばき、UltraSPARC T1は1万を超えるスレッドを涼しい顔で処理し、64GBのメモリはすぐに必要なファイルをキャッシュし、ほとんどディスクアクセスなしに要求は処理されていきました。「さすがゴッグだ。なんともないぜ。」

と思っていたんですが、確か20,000クライアント近くだったと思います。様子がおかしいことに気が付きました。MRTGのグラフが更新されなくなってしまったんです。それもSNMPで値を取ってるグラフだけ。確かに叩いてみてもsnmpdから値が返ってきません。タイムアウトをすごく長くしてやれば返ってきますけど、これは何かおかしい。(後編へ続く)

0 件のコメント:

コメントを投稿