仕事で使っている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にもなる。