Power management in Linux has come a long way in the last few years. With the advent of netbooks and other mobile platforms like phones and tablets, the need for better battery life and thermal controls under Linux has led to innovative solutions that work out of the box in most distributions. That being said, there are a number of configuration options and programs which you may wish to learn about which can net you better control of your mobile Linux platform.
Powertop is a great tool for easily finding processes which eat up battery life as well as enabling power management related kernel parameters. It also displays the discharge rate of a device as reported by a battery in Watts.
Powertop requires a certain amount of collected data to be able to accurately calculate the battery life left. Simply keep powertop running without charging the device to collect this data.
It may be necessary to calibrate powertop for more accurate predictions of power usage. To do this, run
sudo powertop --calibrate. This will take several minutes while powertop measures each individual component available. I did notice calibrate caused my wifi card to be put in an inconsistent state which only a reboot was able to recover from. So run with caution.
To automatically enable all power management features as found by powertop, execute the following command:
sudo powertop --auto-tune
To enable these settings on boot, create the following Systemd service file:
[Unit] Description=Powertop Autotune [Service] Type=oneshot ExecStart=/usr/sbin/powertop --auto-tune [Install] WantedBy=multi-user.target
Note: powertop is placed in either
/usr/bin/ based on the distribution you are using. Run
which powertop to determine the correct path to use for ExecStart in the service file.
Be sure to run
systemctl enable powertop to run the service on boot.
lm-sensors is a great utility for displaying thermal temperatures as well as fan speeds of a system. Before you can run the
sensors program, you must first run
sensors-detect so that lm-sensors can probe your system for devices that report temperature data.
$ sensors coretemp-isa-0000 Adapter: ISA adapter Core 0: +42.0°C (high = +80.0°C, crit = +100.0°C) Core 1: +41.0°C (high = +80.0°C, crit = +100.0°C) Core 2: +43.0°C (high = +80.0°C, crit = +100.0°C) Core 3: +41.0°C (high = +80.0°C, crit = +100.0°C) it8720-isa-0a10 Adapter: ISA adapter in0: +0.83 V (min = +0.00 V, max = +4.08 V) in1: +0.03 V (min = +0.00 V, max = +4.08 V) in2: +3.31 V (min = +0.00 V, max = +4.08 V) +5V: +2.99 V (min = +0.00 V, max = +4.08 V) in4: +3.06 V (min = +0.00 V, max = +4.08 V) in5: +3.01 V (min = +0.00 V, max = +4.08 V) in6: +2.14 V (min = +0.00 V, max = +4.08 V) 5VSB: +2.99 V (min = +0.00 V, max = +4.08 V) Vbat: +3.30 V fan1: 1190 RPM (min = 0 RPM) fan2: 0 RPM (min = 0 RPM) fan3: 0 RPM (min = 0 RPM) temp1: +41.0°C (low = +0.0°C, high = +127.0°C) sensor = thermistor temp2: +42.0°C (low = +0.0°C, high = +127.0°C) sensor = thermistor temp3: +127.0°C (low = +0.0°C, high = +127.0°C) ALARM sensor = thermistor cpu0_vid: +1.219 V intrusion0: ALARM
To continuously run the sensors program every 2 seconds, you can execute this command:
watch -n 2 sensors
cpupower is a process for displaying CPU information, such as processor speed and C-state and idle statistics. It can also be used for selecting or displaying the configured CPU governor.
Example output of my idling i7 930:
$ sudo cpupower monitor |Nehalem || Mperf || Idle_Stats CPU | C3 | C6 | PC3 | PC6 || C0 | Cx | Freq || POLL | C1-N | C1E- | C3-N | C6-N 0| 0.32| 94.21| 0.00| 0.00|| 1.67| 98.33| 1674|| 0.00| 2.43| 0.00| 0.06| 95.92 4| 0.32| 94.21| 0.00| 0.00|| 0.57| 99.43| 1607|| 0.00| 0.00| 0.02| 0.33| 99.23 1| 0.17| 28.13| 0.00| 0.00|| 0.94| 99.06| 1708|| 0.00| 70.47| 0.00| 0.04| 28.58 5| 0.17| 28.14| 0.00| 0.00|| 0.09| 99.91| 1698|| 0.00| 0.00| 0.00| 0.20| 99.71 2| 0.29| 91.48| 0.00| 0.00|| 3.21| 96.79| 1708|| 0.00| 4.10| 0.00| 0.03| 92.71 6| 0.29| 91.48| 0.00| 0.00|| 0.22| 99.78| 1613|| 0.00| 0.00| 0.00| 0.32| 99.52 3| 0.11| 27.48| 0.00| 0.00|| 2.91| 97.09| 1790|| 0.00| 17.74| 0.01| 0.14| 79.23 7| 0.11| 27.47| 0.00| 0.00|| 0.15| 99.85| 2294|| 0.00| 70.57| 0.00| 0.00| 29.30
i7z is a great little utility for reporting CPU sleep states on your Intel processor. It can be used to debug which C-state each core of your processor is in at any given moment in time.
Laptop Mode Tools used to be the defacto standard for enabling power management features in Linux. It is not really needed anymore as most of the configuration changes that can be done through it are now enabled by default in the Linux kernel. It is worth a mention though.
TLP is an easy to use service which can help squeeze additional battery life out of a Linux system. I have heard mixed reviews concerning the helpfulness of this utility. Running too advanced of a configuration can lead to stability issues when using BTRFS.
We have looked at some of the excellent utilities for monitoring and tweaking power management features on mobile devices. Linux comes with sane defaults which should allow battery life comparable to other [proprietary] operating systems.