印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux スピードステップの動作はBIOSが関連

サーバの動作が遅く感じられる。調べてみると 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 の情報を見てみると次のようになっていた。

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 10
cpu MHz         : 187.228
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse
bogomips        : 355.53

CPU の周波数が 187.288 MHz になっている。この CPU の最高速度は 1 GHz なので,20 % に満たない遅さである。cpufreqd は動作しているように思えたが,実は失敗していた。

# /etc/init.d/cpufreqd restart
CPU Frequency daemonを停止中:                              [ 失敗 ]
CPU Frequency daemonを起動中:                              [  OK  ]
# ps -ef | grep cpu
n        20099  1503  0    22:28 pts/0    00:00:00 grep cpu

cpufreqd は「動作OK」のように見えるが,実際は起動に失敗している。cpufreq の設定は,変更も可能である。

# cat /proc/cpufreq
          minimum CPU frequency  -  maximum CPU frequency  -  policy
CPU  0       700000 kHz ( 70 %)  -    1000000 kHz (100 %)  -  powersave
# echo "0%80%100%performance" > /proc/cpufreq
# cat /proc/cpufreq
          minimum CPU frequency  -  maximum CPU frequency  -  policy
CPU  0       800000 kHz ( 80 %)  -    1000000 kHz (100 %)  -  performance

しかし,動作していない。ロードされたモジュールを表示してみる。

# lsmod
Module                  Size  Used by    Tainted: P
speedstep-smi           3344   0  (unused)
speedstep-lib           2292   0  [speedstep-smi]

よく見てみると,(unused) になっているのだ。使われていないことになっているのだ。dmesg を見てみる。

# dmesg | less
speedstep-smi: signature:0x47534943, command:0x008200b2, event:0x00c000b3, perf_level:0x07d00000.
speedstep-smi: could not detect low and high frequencies by SMI call.
cpufreq: change to 4 MHz succeded
cpufreq: change to 700 MHz succeded
speedstep-smi: workaround worked.
cpufreq: currently at low speed setting - 700 MHz

前回確認したものと同じである(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 系)。調べてみると,次のようになった。

# cat /proc/sys/cpu/0/speed-min
0
# cat /proc/sys/cpu/0/speed-max
0
# cat /proc/sys/cpu/0/speed
700000

最低動作周波数 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」に変更して再起動を行った。

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 10
cpu MHz         : 995.684
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse
bogomips        : 1984.80

これがビンゴ! 動作周波数が最高速度の 995.684 MHz になった。/proc/cpufreq の設定がどうなっていても最高速度での動作になってしまうが。今は気温が低いので最高速度でもOK。しかし,夏までには何とかしないと CPU が焼けてしまうかも知れない。BIOS の設定を変更しながら試行錯誤をするしかなさそうだ。

(お願い)
しばらくの間,夜中に一時的にサーバが停止することがあると思います。その時は「実験中」ですので大目に見てください。

2006年2月21日追記:
電源の入り切りを繰り返したところ,画面が暗いままになってしまいました(nlog(n): LCD のバックライト逝く)。悲。

Posted by n at 2006-02-20 23:14 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?