サーバの動作が遅く感じられる。調べてみると CPU の動作が極端に遅くなっていた。CPU の動作速度は BIOS の設定が関係しているようだ。
最近どうもサーバが遅いような気がする。Movable Type の記事を再構築するのに時間がかかり過ぎる。先日はようやく CPU の動作速度が上がり喜んでいたのだが(nlog(n): カーネルの再構築でスピードステップに対応),よく調べてみると,動作速度は上がったがスピードステップで正しく動作していた訳ではないことが分かった。以下は調査の記録である。
環境は,Vine Linux 3.2, kernel-2.4.31-0vl1.12, ハードウェアは ThinkPad T22 Pentium III 1 GHz である(ThinkPad T22(2647-9EJ) - 製品仕様)。
CPU の情報を見てみると次のようになっていた。
CPU の周波数が 187.288 MHz になっている。この CPU の最高速度は 1 GHz なので,20 % に満たない遅さである。cpufreqd は動作しているように思えたが,実は失敗していた。
cpufreqd は「動作OK」のように見えるが,実際は起動に失敗している。cpufreq の設定は,変更も可能である。
しかし,動作していない。ロードされたモジュールを表示してみる。
よく見てみると,(unused) になっているのだ。使われていないことになっているのだ。dmesg を見てみる。
前回確認したものと同じである(nlog(n): カーネルの再構築でスピードステップに対応)。ここで,再度よくよくメッセージを見てみると「could not detect low and high frequencies by SMI call.」と表示されていることに気がつく。最低と最高の周波数の検出ができていないと言っているのだ。見落としていた。
Vine Linux 3.2 は Kernel 2.4 系なので,proc ファイルシステムを使っている。CPU のデバイス情報は,/proc/cpu 以下にある(/sys/device/system/cpu 以下にあるのは Kernel 2.6 系)。調べてみると,次のようになった。
最低動作周波数 speed-min,最高動作周波数 speed-max の値がともに「0」になってしまっている。そして,現在の動作周波数の表示は「700000 kHz」なのだが,実際の速度は最初に /proc/cpuinfo で見たように「187228 kHz」なのである。試行錯誤をしていて不思議に思ったのは,「/proc/sys/cpu」というディレクトリは i686 アーキテクチャ(このマシンの CPU)でカーネルを再構築したときに現れ,i386 で再構築すると現れないことである。
設定を少しずつ変えながら,何度もカーネルの再構築をしたが,一向に動作周波数が上がらない。
電源管理に問題があるかも知れないと思い,設定を変更してみることにした。普段は ACPI モードで動作しているが,Linux ブートオプションに「acpi=off apm=on」を指定すると,APM モードでも動作することが分かった。しかし,LCD を閉じるとサスペンドに入ってしまい,サーバとして使えないことが分かった(設定をきちんとすれば恐らくは動作するのだろうが)。
そこで,最後の試みをすることにした。一旦シャットダウンし,BIOS の設定を変えるというものである。BIOS の Power セクションで LCD を閉じたときの動作「Suspend when LCD is closed」が「Susupend」だったので「No Suspend」に変更して再起動を行った。
これがビンゴ! 動作周波数が最高速度の 995.684 MHz になった。/proc/cpufreq の設定がどうなっていても最高速度での動作になってしまうが。今は気温が低いので最高速度でもOK。しかし,夏までには何とかしないと CPU が焼けてしまうかも知れない。BIOS の設定を変更しながら試行錯誤をするしかなさそうだ。
(お願い)
しばらくの間,夜中に一時的にサーバが停止することがあると思います。その時は「実験中」ですので大目に見てください。
2006年2月21日追記:
電源の入り切りを繰り返したところ,画面が暗いままになってしまいました(nlog(n): LCD のバックライト逝く)。悲。
Master Archive Index
Total Entry Count: 1957