[OpenBlockS Users page]
[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[obu:01306] Re: 熱暴走


岡本です。

> naka です。
>
> On Mon, 7 Jan 2002 16:50:01 +0900
> "fujiura" <hideki@xxxxxxxxxxx> wrote:
>
> > 皆さんのSSはどれくらいあつくなりますか?
>
> 自分のOBSSはIBM6Gを入れてケースも完全に閉じていますが、ほんのり暖かくなる
> 程度です。ネジはそれなりに熱いですが...
>
> それほど煩雑に disk アクセスがあるわけでもないので、 hdparmを使ってマメに
> 回転を止めるようにドライブの設定を変えています。

hdparmというのを初めて知って私も試して見ました。
うちのOBSSはメインがルータ用途、付随するサーバ機能をプラスしているぐらいで
ファイルサーバみたいにディスクアクセスを必要としていませんから、ディスクが
止まっていてもぜんぜん問題ありません。

今回はその顛末を...。

最初このメールを読んで目標を立ててみました。
1. ほとんどアクセスがないので、遊んでいる時間は止めて静かにする
これだけ。(笑)

それでhdparm-4.6をInternetで拾ってきてインストール。
"-S 1 /dev/hda"をつけて起動。これで5秒アイドルになると自動的に止まって
くれるようになりました。

簡単簡単、ルンルン、なんてのもつかの間。1分に1回のペースでHDDが起き上がりま
す。
当初は「まぁ1分のうち10秒ぐらいだから...」なんてほおっておいたのですが、
これくらいのペースで寝たり起きたりしていると、逆に気になって気になって...。

1分に1回というと、うちの場合fetchmailがこの頻度で動いているので、まずこれを
調査してみました。

ソースを見たところ、メールが来ていないときに何かテンポラリで書き出すなんて
ことはしていないことを確認。

fetchmailrcの変更を毎回確認しているみたいだったので、これをRAMディスクに
移動させて様子をみたけれども、まったく変化なし。

次に、straceでファイルアクセスを覗いてみると、name resolver関連で
/etc/hostsなんかにアクセスしてる。でもReadOnly。(ココがミソだった:後述)
書き込みは一切なし。(長くなりそうな予感...)

とりあえず/etc/hostsへのアクセスを止めさせるため、nscdを導入。
しかしぜんぜん/etc/hostsへのアクセスが止まない。ちゃんとnscdはキャッシュを
返しているのにもかかわらず。
(ここでわき道にそれる)
glibc-2.1.3のソースを覗くと、gethostbyname内nscdからの戻り値サイズの
判断にバグがあることが判明。新しいglibc-2.2.5を落として確認してみると、
2001/9/11にパッチが差し込まれていた。つまり、OBSSデフォルトのglibc-2.1.3
では、nscdがhostsに対して効かない、無駄であることが判明。
ここで、
1. glibc-2.1.3にパッチをあてて入れ替える
2. glibc-2.2.5を入れる
なんていうのを考えたのですが、面倒くさそうなので、安易に/etc/nsswitch.conf
のhostsの順番をdns filesに変更して/etc/hostsへのアクセスを止めさせました。

これで様子を見たところ、1分に1回アクセスするというのがなくなり、HDDの
アクセスは気にならなくなりました。

その後ReadOnlyでファイルアクセスしたときに、なぜHDDにアクセスするのか
調べたのですが、これはどうも「アクセス時間」を記録するためみたいだ
ということがわかりました。これを回避するためには、対象ファイルがある
ファイルシステムを「アクセス時間」を記録しないようにしてマウント
すればよいそうです。
 例: mount -o remount,rw,noatime /
こうすれば読み込みだけでアクセスしたファイルがHDDを起こすということは
なくなるようで、根本的な対策になるかと思います。

でもこれと引き換えに、find -atimeが効かなくなるんでしょうね。


まとめると、
1. mountオプションで「アクセス時間」の記録をやめると効果絶大
2. findコマンドで、最近アクセスがあってかつ残っているファイルを探すと
   何のプロセスかあたりがつきやすい
3. プロセスにあたりがついたら、straceで追いかけてみる
4. name resolverだったら、/etc/nsswitch.confを変更するか、glibcにパッチを
   あてる

ただし、書き込みがある場合は厄介です。
1. /proc/sys/vm/bdflushあたりのパラメータを変更する
2. RAMディスクに書き出す
なんていうのが一般的でしょうか。2番のRAMディスクは、捨てていいファイルなら
よいですが、システム終了時、また定期的にrsyncかなにかでHDD上に退避し、
システム起動時にまたRAMディスクに戻してやる必要があるかと思われます。
(Linuxならもっと簡単な方法があるのかな?)

あと、ext2以外のファイルシステムの場合は、事情が違うようです。特に
ジャーナリング機能を持つものなど。


私の場合、目標は高くなかったのがよかったのだと思いますが、Internetでは
「無音」「静音」を求めてかなり努力されている方の涙ぐましい努力のページが
いくつかありました。
本気でやろうとすると、結構大変な世界ですね。


岡本剛和@横浜のチベット在住なので熱暴走心配なし?

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: