Optimizing Linux Power Usage

A lot of Linux distro is not optimised for laptops, some of them could use up much power if you don't optimize it. By the end of this guide, you should be able to reduce your power consumption by 3-5 watts, I know it seems not much but it can give my machine 15-30 mins more power. By default, my machine used up more than 24 watts of power, as indicated by powertop. To find out the power usage of your machine:

1. Unplug or switch off your AC to your laptop
2. Enter sudo /usr/sbin/powertop in a terminal

To reduce the power consumption, I have installed laptop-mode-tools, as its name suggest, it is a tool for laptops. Once installed, I found that my wireless driver (ath5k) does not support power saving mode yet, so I have to disable it. Edit /etc/laptop-mode/ and change WIRELESS_BATT_POWER_SAVING=1 to WIRELESS_BATT_POWER_SAVING=0, this step is optional, nothing might happen if you don't do anything to it.

To enable laptop-mode:

$ sudo systemctl enable laptop-mode.service

Next, I created a custom script for laptop-mode-tools to enable certain power saving not included in laptop-mode-tools modules:

1. Edit $HOME/bin/powersaving_on and add the following lines:

#!/bin/sh

# ATI Radeon power saving
echo profile > /sys/class/drm/card0/device/power_method
echo low > /sys/class/drm/card0/device/power_profile

# Audio power saving
echo 1 > /sys/module/snd_hda_intel/parameters/power_save
echo Y > /sys/module/snd_hda_intel/parameters/power_save_controller

# Writeback time
echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

2. Edit $HOME/bin/powersaving_off and add the following lines:

#!/bin/sh

# ATI Radeon power saving
echo profile > /sys/class/drm/card0/device/power_method
echo default > /sys/class/drm/card0/device/power_profile

# Audio power saving
echo 2 > /sys/module/snd_hda_intel/parameters/power_save
echo N > /sys/module/snd_hda_intel/parameters/power_save_controller

# Writeback time
echo 500 > /proc/sys/vm/dirty_writeback_centisecs

3. Add executable bit to both scripts:

$ chmod +x $HOME/bin/powersaving_on; chmod +x $HOME/bin/powersaving_off

4. Create symbolic links for laptop-mode-tools:

$ sudo ln -s /home/<username>/bin/powersaving_on /etc/laptop-mode/batt-start/powersaving_on;\
sudo ln -s /home/<username>/bin/powersaving_on /etc/laptop-mode/lm-ac-stop/powersaving_on;\
sudo ln -s /home/<username>/bin/powersaving_off /etc/laptop-mode/batt-stop/powersaving_off;\
sudo ln -s /home/<username>/bin/powersaving_off /etc/laptop-mode/lm-ac-start/powersaving_off;\
sudo ln -s /home/<username>/bin/powersaving_off /etc/laptop-mode/nolm-ac-start/powersaving_off;\
sudo ln -s /home/<username>/bin/powersaving_off /etc/laptop-mode/nolm-ac-stop/powersaving_off

Explanation and Notes:
Step 1: Enable some powersaving features to reduce power usage (require root permission), see the script's comments. You can change echo low > /sys/class/drm/card0/device/power_profile to echo mid > /sys/class/drm/card0/device/power_profile if you need more power

Step 2: Disable powersaving features by setting all its values to default

Step 3: Make both scripts executable

Step 4: I have wrote it in a way that you can cut and paste into your terminal emulator in one step, just replace <username> with your username. laptop-mode-tools provide a way for users to execute certain scripts when on AC or battery by placing your scripts in its corresponding directories:

  • /etc/laptop-mode/batt-start: Executed when laptop enters battery mode
  • /etc/laptop-mode/batt-stop: Executed when laptop exits battery mode
  • /etc/laptop-mode/lm-ac-start: Executed when laptop-mode is enabled AND laptop enters AC mode
  • /etc/laptop-mode/lm-ac-stop: Executed when laptop-mode is enabled AND laptop exits AC mode
  • /etc/laptop-mode/nolm-ac-start: Executed when laptop-mode is disabled through /etc/laptop-mode/laptop-mode.conf AND laptop enters AC mode
  • /etc/laptop-mode/nolm-ac-stop: Executed when laptop-mode is disable through /etc/laptop-mode/laptop-mode.conf AND laptop exits AC mode

Other Tips:
1. Disable bluetooth: sudo rfkill block bluetooth
2. It seems that monitor used up most power (11-18 watts depending on brightness on my machine), reduce brightness to save more power
3. Another power killer is WiFi, (more than 6 watts on my machine), so turn it off if you don't use it

REFERENCES:
1. Great ArchWiki Article on Power Saving
2. ATI Radeon Power Management Guide
3. Linux Journal Article on laptop-mode-tools
4. Using ATI Radeon Power Management with laptop-mode-tools