2013/06/27

Linux Power and Battery Life



這篇文章整理之前在看 Ubuntu 省電機制的。


電池資訊


Linux 系統中的電池資訊在 sysfs 裡都找得到,如下。或是直接使用 gnome-power-statistics 來看也可以,如上圖。

u-Latitude-E6440:/sys/class/power_supply/BAT01 ls
alarm               current_now   model_name     status      uevent
charge_full         cycle_count   power          subsystem   voltage_min_design
charge_full_design  device        present        technology  voltage_now
charge_now          manufacturer  serial_number  type

對 voltage_now, current_now, charge_full, voltage_min_design 做簡單的運算便能得到放電速度及總電量。底下的 script 提供了簡單的放電速度統計。

#!/bin/sh
echo "current average capacity full_capacity time_left"
factor=0.7
last_pwr=0
charge_full=`cat /sys/class/power_supply/BAT0/charge_full`
voltage_min_design=`cat /sys/class/power_supply/BAT0/voltage_min_design`
full_pwr=`echo "scale=5; $charge_full * $voltage_min_design / 1000000 / 1000000" | bc`
while [ 1 ]; do
voltage_now=`cat /sys/class/power_supply/BAT0/voltage_now`
current_now=`cat /sys/class/power_supply/BAT0/current_now`
charge_now=`cat /sys/class/power_supply/BAT0/charge_now`
voltage_now=`cat /sys/class/power_supply/BAT0/voltage_now`
cur_pwr=`echo "scale=5; $voltage_now * $current_now / 1000000 / 1000000" | bc`
if [ "$last_pwr" != "0" ]; then
last_pwr=`echo "scale=5; $last_pwr * $factor + $cur_pwr * (1.0 - $factor)" | bc`
else
last_pwr=$cur_pwr
fi
rest_pwr=`echo "scale=5; $voltage_min_design * $charge_now / 1000000 / 1000000" | bc`
time_left_h=`echo "scale=2; $rest_pwr / $last_pwr" | bc`
echo $cur_pwr " " $last_pwr " " $rest_pwr " " $full_pwr " " $time_left_h
sleep 5
done
view raw power.sh hosted with ❤ by GitHub


執行畫面如下:

u@u-Latitude-E6540:~1 ./power.sh  ts
Jun 13 16:20:43 current   average   capacity   full_capacity   time_left
Jun 13 16:20:43 14.13254   14.13254   37.19610   65.49000   2.63
Jun 13 16:20:48 14.07107   14.11409   37.17390   65.49000   2.63
Jun 13 16:20:53 14.08747   14.10610   37.15170   65.49000   2.63
Jun 13 16:20:58 13.77746   14.00750   37.14060   65.49000   2.65
Jun 13 16:21:03 14.03222   14.01491   37.11840   65.49000   2.64
Jun 13 16:21:08 13.16450   13.75978   37.09620   65.49000   2.69

有時沒儀器可以量時,用 script 來計算是蠻方便的。


延長電池使用時間


之前用了 2 種方式來讓系統更省電。

  1. Append boot coomand "pcie_aspm=force"
  2. Install PowerTOP
  3. Install Laptop Mode Tools

第一種 ASPM 的方法,大概可以省個 2 W 左右。第二種 PowerTOP 的方式,全部省電機制啟用,也可再省個 2 W 左右。最後第三種 laptop-mode-tools,這只是個方便的 PowerTOP 工具而已,它會讓你在沒插 AC 電源時,自動將 PowerTOP 的省電機制啟用。個人是建議一般的 NB 可以試試 1 + 3。

最近做到的平台都是 SharkBay (haswell),對於硬體比較有針對省電設計的,大概上面那些機制全下,大概平均耗電量是 6 W/h,對於常見的 50 W 的電池用個 8 小時是沒問題,但 8 小時也是要 NB 放著都不動,如果像我常看個影片,開個 VM,那還會有 5 小時嗎?呵呵

(對於 MBA 的 12 小時來說,8 小時跟垃圾一樣)

No comments: