仕事で使っているThinkPad X60には、Core2Duo T7200が載っていて、何をするにも高速でとても快適です。しかし、標準のバッテリーパックが小さい上に、やはり、2GHz のマルチコアは電気を食うのか、せいぜい2時間くらいしか電池が持ちません。これだと、安心して外で仕事ができません。
そこで、まず、大容量バッテリーパックを購入しました。
標準の4セルバッテリー
ThinkPad X60シリーズ 4セル・スリムライン・バッテリー 40Y6999
主な仕様
- 4セルのシステムバッテリー, 14.4V, 2.6Ah
- 平均稼働時間4.0時間 ※1
8セル大容量バッテリー
製品番号(P/N) : 40Y7003
ThinkPad X60シリーズ 8セル大容量バッテリー
主な仕様
- 8セルのシステムバッテリー, 14.4V, 5.2Ah
- 平均稼働時間8.0時間 ※1
このバッテリーに交換したことで、バッテリーが4時間程度、持つようになりました。
さて、これで、外出先でも何とかドキドキせずに、このパソコンを使えるようになったのですが、より長持ちさせるには、省電力設定を行う必要があります。
Enhanced Intel SpeedStep® Technology and Demand-Based Switching on Linux*
カーネルコンパイルオプション
│ │ [*] CPU Frequency scaling │ │
│ │ [*] Enable CPUfreq debugging │ │
│ │ <*> CPU frequency translation statistics │ │
│ │ [*] CPU frequency translation statistics details │ │
│ │ Default CPUFreq governor (userspace) ---> │ │
│ │ <M> 'performance' governor │ │
│ │ <M> 'powersave' governor │ │
│ │ --- 'userspace' governor for userspace frequency scaling │ │
│ │ <M> 'ondemand' cpufreq policy governor │ │
│ │ <M> 'conservative' cpufreq governor │ │
│ │ --- CPUFreq processor drivers │ │
│ │ <M> ACPI Processor P-States driver │ │
関連モジュールのロード
x60:~# more /etc/modules
battery
ibm_acpi
acpi-cpufreq
cpufreqdがバッテリー容量や、CPUの使用率に応じて、クロックやLCDの輝度を変更してくれる。
このパソコンのCPUがサポートするクロックは、次の様になっている。
ktaka@x60:~$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
2000000 1667000 1333000 1000000
また、LCDの輝度は次の8通りに設定できるようである。
ktaka@x60:~$ cat /proc/acpi/ibm/brightness
level: 7
commands: up, down
commands: level <level> (<level> is 0-7)
以上のことから、次のような cpufreqdの設定ファイルを作成した。
x60:~# more /etc/cpufreqd.conf
[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
verbosity=4
enable_remote=1
[/General]
[Profile]
name=ondemand_high
minfreq=1000000
maxfreq=2000000
up_threshold=50
policy=ondemand
[/Profile]
[Profile]
name=ondemand_medium
minfreq=1000000
maxfreq=1667000
up_threshold=50
policy=ondemand
[/Profile]
[Profile]
name=ondemand_low
minfreq=1000000
maxfreq=1333000
up_threshold=50
policy=ondemand
[/Profile]
[Rule]
name=AC
ac=on
exec_post=echo level 7 > /proc/acpi/ibm/brightness
profile=ondemand_high
[/Rule]
[Rule]
name=Performance Battery
ac=off
battery_interval=0-100
cpu_interval=ANY:80-100
exec_post=echo level 0 > /proc/acpi/ibm/brightness
profile=ondemand_high
[/Rule]
[Rule]
name=High Battery
ac=off
battery_interval=50-100
cpu_interval=ANY:0-80
exec_post=echo level 2 > /proc/acpi/ibm/brightness
profile=ondemand_medium
[/Rule]
[Rule]
name=Low Battery
ac=off
battery_interval=0-50
cpu_interval=ANY:0-80
exec_post=echo level 0 > /proc/acpi/ibm/brightness
profile=ondemand_low
[/Rule]
モジュール
ktaka@x60:~$ lsmod|egrep "cpu|acpi"
cpufreq_ondemand 9484 1
acpi_cpufreq 11592 1
processor 26824 2 thermal,acpi_cpufreq
ibm_acpi 31896 0
backlight 6912 1 ibm_acpi
cpufreqdの起動
/etc/init.d/cpufreqd start
状態確認
x60:/home/ktaka# cpufreqd-get
Name (#1): ondemand_high
Governor: ondemand
Min freq: 1000000
Max freq: 2000000
Name (#2): ondemand_medium
Governor: ondemand
Min freq: 1000000
Max freq: 1667000
Name (#3): ondemand_low
Active on CPU#: 0, 1
Governor: ondemand
Min freq: 1000000
Max freq: 1333000
現在#3の状態にいることがわかる。
以上で、CPU負荷が少ない時には1GHzで動作し、CPU負荷が高くなるとクロックを最大2GHzまであげて動作する設定ができた。バッテリ動作時には更にLCDを暗くし、CPUクロックの最大値も、バッテリの残量に応じて1.67GHz、1.33GHzと制限するようにもなっている。
CPUの周波数とバッテリーの状態をモニタリングするスクリプト
ktaka@x60:~$ more battery_monitor.sh
#!/bin/bash
watch -n 1 "
echo cat /proc/acpi/battery/BAT0/state
cat /proc/acpi/battery/BAT0/state
echo -n 'Estimated battery capacity : '
egrep 'rate|remaining' /proc/acpi/battery/BAT0/state |xargs | awk '{print \$7 / \$3 \" hours\"}'
echo
echo cat /proc/acpi/battery/BAT0/info
cat /proc/acpi/battery/BAT0/info | grep 'design capacity'
echo
echo cpu0
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
echo cpu1
cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq
"
使ってみる
Every 10.0s: ... Tue May 1 03:04:55 2007
cat /proc/acpi/battery/BAT0/state
present: yes
capacity state: ok
charging state: discharging
present rate: 16056 mW
remaining capacity: 23350 mWh
present voltage: 14895 mV
Estimated battery capacity : 1.45429 hours
cat /proc/acpi/battery/BAT0/info
design capacity: 74880 mWh
design capacity warning: 3925 mWh
design capacity low: 200 mWh
cpu0
1000000
cpu1
1000000
これで、バッテリーの状態と、CPUクロックを常に確認することができるようになった。
2007-05-11追記
バッテリーほぼ100%の状態、ほぼ無負荷で
Every 5.0s: ... Fri May 11 02:10:46 2007
cat /proc/acpi/battery/BAT0/state
present: yes
capacity state: ok
charging state: discharging
present rate: 16080 mW
remaining capacity: 73600 mWh
present voltage: 16459 mV
Estimated battery capacity : 4.57711 hours
cat /proc/acpi/battery/BAT0/info
design capacity: 74880 mWh
design capacity warning: 3856 mWh
design capacity low: 200 mWh
cpu0: 1000000 kHz
cpu1: 1000000 kHz
lcd level: 2
CPUクロックは1GHzで、電力消費は、16W
次のように、カーネルコンパイルで負荷をかけてみる
ktaka@x60:~/Kernel/linux-2.6.21.1$ make clean; make -j 10
そうすると、
Every 10.0s: ... Fri May 11 02:15:12 2007
cat /proc/acpi/battery/BAT0/state
present: yes
capacity state: ok
charging state: discharging
present rate: 44708 mW
remaining capacity: 71170 mWh
present voltage: 16036 mV
Estimated battery capacity : 1.59189 hours
cat /proc/acpi/battery/BAT0/info
design capacity: 74880 mWh
design capacity warning: 3856 mWh
design capacity low: 200 mWh
cpu0: 2000000 kHz
cpu1: 2000000 kHz
lcd level: 0
CPUクロックが2GHzになり、消費電力は45Wにもなる。