Google Code Prettify

2008年5月10日

ちょっとだけ cpufreqd を使って Dothan の発熱を抑える

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.
温度が異常に高いため保護のためにシャットダウンしてるようである。

どうしたもんだろう?

現状

  1. i915GMm-HFS
  2. Pentium M 770 / Dothan / 2.13G Hz
  3. cpufrequtils を使って周波数制御の設定を行っている。
  4. 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」の実行完了してもシャットダウンしない設定を見つけた。

  1. conversative governor で負荷に応じて 800M Hz〜1.60G Hz の変動させる。
  2. 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 とかがまた整理してくれるのかなぁ。

2008年5月6日

Linux でビープ音を消す

Linux を使ってると大きなビープ音がしてとても恐縮する。最近は対応方法があるらしく pcskpr モジュールを読み込まないようにすれば良いらしい。

/etc/modprobe.d/blacklist

blacklist pcspkr

ビープ音を適当なメロディにするとかはできないらしい。。。でも?

追記(2009/08/02)

最近のカーネルでは、PC-Speaker の制御が pcspkr/snd_pcsp のどちらかで出来るようになっている。なので、両方をブラックリストに追加する必要がある。

blacklist pcspkr
blacklist snd_pcsp

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...