Ubuntu 11.10 on ThinkPad X220 でファン制御
あけましておめでとうございます。
約半年の間、諸事情によりブログを休んでいましたが、2012年になり、気持ちも新たに、ブログを再開しようと思います。
まずは、Ubuntuネタ。
最近仕事用に購入した ThinkPad X220 に Ubuntu 11.10 x86_64 をインストールしました。
しばらくしてCPUファンの音が気になり、回転数を調べてみると 約3600RPM。
特に負荷がかかっているわけではないのに、ほぼフル回転。
とりあえずファンを制御する方法
これはちょっとおかしいと思ってググッてみると、ThinkPad ではCPUファンの制御がうまく行かないという情報が。
カーネルモジュールのオプションで対応できるとのこと。
http://www.thinkwiki.org/wiki/How_to_control_fan_speed
vi /etc/modprobe.d/options などして以下のように書く。(Redhat系では /etc/modprobe.d/fan)
options thinkpad_acpi fan_control=1
モジュールを再ロード。
sudo modprobe -rv thinkpad_acpi sudo modprobe -v thinkpad_acpi
ファン回転数をレベル1にセット
echo level 1 | sudo tee /proc/acpi/ibm/fan
すると、約1900RPM まで下がり、静かになった。CPU温度は59度まで上がり、そこで止まった。
温度によって回転数を自動制御したい
この方法ではCPUに負荷がかかって温度が上がったときにファンの回転数が上がらない。
手動で回転数を変更させるのはちょっと嫌だ。
自動的にファンの回転数が変化するようにしたい。
と思ってまたググッていると、thinkfan なるものを発見。
http://www.naney.org/diki/d/2010-11-13-thinkfan.html
さっそくインストールしてみる。
sudo apt-get install thinkfan
設定ファイルは、/etc/default/thinkfan /etc/thinkfan.conf にある。(2012-03-28 パスが間違ってたので修正)
開いてみると、なにやら T61p でのしきい値の設定例が書かれている。とりあえずこの値で使ってみようということで、thinkfan を起動してみる。
sudo thinkfan -n
ところが、/proc/acpi/ibm/thermal がないとかでエラーになり、実行できない。
X220でthinkfanを動かす
公式Wiki (ドイツ語)によると、ThinkPad X220/T420s/T420 では、温度センサのデバイスファイルが別の位置にあるため、認識できないんだとか。
で、そのサイトにあるとおり、手動でセンサーを検出させるべく対処。
lm-sensors をインストール。
sudo apt-get install lm-sensors
センサーを検出
sudo sensors-detect
質問にはすべて YES と答える。
(デフォルトYESなのでEnterキー連打でよいが、一番最後の Do you want to add these lines automatically to /etc/modules? (yes/NO) だけデフォルトNOなので注意する)
/etc/modules を再読み込みさせる。(または再起動する)
sudo start module-init-tools
センサーの値を読んでみる。
$ sensors acpitz-virtual-0 Adapter: Virtual device temp1: +50.0°C (crit = +99.0°C) thinkpad-isa-0000 Adapter: ISA adapter fan1: 3498 RPM coretemp-isa-0000 Adapter: ISA adapter Physical id 0: +51.0°C (high = +86.0°C, crit = +100.0°C) Core 0: +47.0°C (high = +86.0°C, crit = +100.0°C) Core 1: +46.0°C (high = +86.0°C, crit = +100.0°C)
このように、CPUコアの温度(coretemp)が表示されればOK。
これで、温度センサーが認識され、スペシャルファイルが出来ているはずなので、以下のコマンドで調べてみる。
$ find /sys/devices -type f -name "temp*_input" /sys/devices/platform/coretemp.0/temp1_input /sys/devices/platform/coretemp.0/temp2_input /sys/devices/platform/coretemp.0/temp3_input /sys/devices/virtual/hwmon/hwmon0/temp1_input
OK。
一番最初のセンサーがCPU全体の温度のようなので、これをセンサーデバイスとして thinkfan.conf に設定する。(しきい値設定の前に記述)
sensor /sys/devices/platform/coretemp.0/temp1_input
テスト
ファン回転数が制御されるかどうかをテスト。
まずファンのスピードを自動に設定。
echo level auto | sudo tee /proc/acpi/ibm/fan
ファンがうるさくなった。
thinkファンをフォアグラウンドで起動。
sudo thinkfan -n
おお、静かになった。
いけてる様子。
Ctrl+C でthinkfan を停止。
実験
次にファン回転数が自動的に変化するかどうかを実験。
ファンを止め、CPU温度を上昇させてみる。
echo watchdog 0 | sudo tee /proc/acpi/ibm/fan echo disabled | sudo tee /proc/acpi/ibm/fan
sensorsコマンドをwatchし、温度上昇を監視。
$ watch sensors Every 2.0s: sensors Mon Jan 2 16:36:14 2012 acpitz-virtual-0 Adapter: Virtual device temp1: +60.0°C (crit = +99.0°C) thinkpad-isa-0000 Adapter: ISA adapter fan1: 0 RPM coretemp-isa-0000 Adapter: ISA adapter Physical id 0: +60.0°C (high = +86.0°C, crit = +100.0°C) Core 0: +58.0°C (high = +86.0°C, crit = +100.0°C) Core 1: +58.0°C (high = +86.0°C, crit = +100.0°C)
ちょっと怖いので、60度くらいまででやめておく。
Ctrl+C で watch をやめ、thinkfan を起動する。
sudo thinkfan -n
ファンが回転しだし、レベル5 → 4 → 3 と下がっていった。
大成功。うまく自動制御出来ている様子。
デーモン起動
本格的に thinkfan をデーモンとして起動。
/etc/default/thinkfan ファイルの修正が必要。
START=yes
とし、
sudo /etc/init.d/thinkfan start
thinkfan.conf のしきい値
いろいろ試した結果、X220 では以下のような設定で運用することにしました。
(0, 0, 52) (1, 48, 60) (2, 59, 63) (4, 61, 65) (6, 64, 68) (7, 67, 32767)
とりあえずこれで様子見。
2012/03/28 追記。
もう少し高めの温度でも大丈夫そうなので、出来るだけ静かになるよう以下の設定に修正して運用しています。ご参考になれば。
(0, 0, 64) (1, 55, 66) (2, 65, 68) (4, 67, 70) (6, 69, 72) (7, 71, 32767)