i915GMm-HFS にインストールしてある Debian を etch から lenny にしたところ、勝手にシャットダウンするようになってしまった。
前後のログをみると、
May 8 19:23:22 myhost kernel: ACPI: Critical trip point May 8 19:23:22 myhost kernel: Critical temperature reached (109 C), shutting down.温度が異常に高いため保護のためにシャットダウンしてるようである。
どうしたもんだろう?
現状
- i915GMm-HFS
- Pentium M 770 / Dothan / 2.13G Hz
- cpufrequtils を使って周波数制御の設定を行っている。
- ondemand governor で負荷に応じて 800M Hz〜2.13G Hz の変動させる。
/etc/default/cpufrequtils
ENABLE="true"
GOVERNOR="ondemand"
MAX_SPEED=2133000
MIN_SPEED=800000
この状況で負荷が高いときにシャットダウンするようになった。
例えば「openssl speed」で長時間の高負荷状態にすると確実に1〜2分以内でシャットダウンする。 どうも、シャットダウンの処理主体はLinuxカーネルの drivers/acpi/thermal.c 内の acpi_thermal_critical 関数らしく、正規の動作らしい。
Gentoo 電力管理ガイドを参照すると、ondemand/conservative を使う限り、 温度に依存した抑制動作がないので、ちょっとした負荷で頻繁に周波数が上がったり下がったりで発熱して、致命的な温度になるらしい。
筐体の廃熱がうまくいってないのかもしれん。
対応
温度状況もいれて周波数管理するためには cpufreqd を使うのが良さげである。 試行錯誤の結果「openssl speed」の実行完了してもシャットダウンしない設定を見つけた。
- conversative governor で負荷に応じて 800M Hz〜1.60G Hz の変動させる。
- CPUが 65℃以上になったら、800M Hz に制限する。
/etc/cpufreqd.conf
[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
verbosity=4
#enable_remote=1
#remote_group=root
[/General]
[acpi]
acpid_socket=/var/run/acpid.socket
[/acpi]
[sensors_plugin]
sensors_conf=/etc/sensors.conf
[/sensors_plugin]
[Profile]
name=Performance High
minfreq=0%
maxfreq=100%
policy=conservative
[/Profile]
[Profile]
name=Performance Low
minfreq=0%
maxfreq=75%
policy=conservative
[/Profile]
[Profile]
name=Powersave
minfreq=40%
maxfreq=40%
policy=powersave
[/Profile]
##
# Basic states
##
[Rule]
name=Normal
cpu_interval=0-100
#profile=Performance High
profile=Performance Low
[/Rule]
# CPU Too hot!
[Rule]
name=CPU too Hot
acpi_temperature=65-150
cpu_interval=0-100
profile=Powersave
[/Rule]
cpufreqd に一言
何で、acpi でバッテリとACアダプタの状態が取得できない場合、ACアダプタが刺さって無く、バッテリ容量が0%として認識するんだい!?
ソースを見る限り変数が適当な値で初期化していないので、偶然0になり、そういう状態になるらしいが。。。
そのうち Ubuntu とかがまた整理してくれるのかなぁ。
0 件のコメント:
コメントを投稿