Power management/Guide
In recent years, power management has become one of the differentiating features in the quest for finding the perfect laptop. Yet, the operating system must support the various power saving functionalities too. This guide covers the configuration of a Gentoo system to manage power-hungry resources in a flexible-yet-automated manner.
- Add instructions for kernel configuration of remaining CPU frequency drivers
Introduction
About this document...
This document describes the setup of power management features for laptops. Although some of the information in this guide can be applied to power management for servers, it is not the intention of this document to go that route. Please be careful when applying this on a non-laptop system.
Within this document, the primary focus will be on laptop mode tools since it offers a complete set of functionalities. However, we will also refer to other tools that might offer a more detailed approach on individual settings. In such cases, the feature from the laptop mode tools must be disabled so that both tools do not fight over the same resource control.
About laptop_mode
The laptop_mode setting is an in-kernel configuration setting that optimizes I/O, allowing disks to spin down properly (and not be woken up immediately afterwards for queued operations).
About laptop-mode-tools
The Laptop Mode Tools is a software package (app-laptop/laptop-mode-tools) which allows the user to optimize power saving functions. It allows managing the laptop_mode setting in the Linux kernel, but has additional features that allow the tweaking of other power-related settings on the system.
Linux kernel configuration
Minimum kernel setup
There are different kernel sources in Portage sys-kernel. We recommend using sys-kernel/gentoo-sources, but if advanced hibernation support is desired, TuxOnIce might be needed.
To enable proper power management features in the Linux kernel, enable the following settings:
Power management and ACPI options --->
-*- Device power management core functionality
[*] ACPI (Advanced Configuration and Power Interface) Support --->
<*> AC Adapter
<*> Battery
-*- Button
-*- Video
<*> Fan
<*> Processor
<*> Thermal Zone
[*] CPU Frequency scaling --->
Default CPUFreq governor (ondemand) --->
-*- 'performance' governor
<*> 'powersave' governor
<*> 'userspace' governor for userspace frequency scaling
-*- 'ondemand' cpufreq policy governor
<*> 'conservative' cpufreq governor
<*> ACPI Processor P-States driver
Selecting CPU frequency driver
Intel P-state
For newer Intel Core series of processors (based on the Sandy Bridge microarchitecture or newer), use the Intel P-state driver.
In this case, the userspace, ondemand, and conservative governors are unnecessary. The performance governor should be selected as the default. [1]
Power management and ACPI options --->
-*- Device power management core functionality
[*] ACPI (Advanced Configuration and Power Interface) Support --->
<*> AC Adapter
<*> Battery
-*- Button
-*- Video
<*> Fan
<*> Processor
<*> Thermal Zone
[*] CPU Frequency scaling --->
Default CPUFreq governor (performance) --->
-*- 'performance' governor
<*> Intel P state control
Enabling additional drivers
For Intel processors used in laptops since 2011 you may want to enable additional advanced features - Thermal and powercap sysfs.
Thermal sysfs driver
Device Drivers --->
-*- Generic Thermal sysfs driver --->
(0) Emergency poweroff delay in milli-seconds
[*] Expose thermal sensors as hwmon device
-*- Enable writable trip points
Default Thermal governor (step_wise) --->
[*] Fair-share thermal governor
-*- Step_wise thermal governor
-*- Bang Bang thermal governor
-*- User_space thermal governor
[ ] Thermal emulation mode support
[*] Power allocator thermal governor
<M> Intel PowerClamp idle injection driver
<M> X86 package temperature thermal driver
< > Intel SoCs DTS thermal driver
ACPI INT340X thermal drivers --->
<M> ACPI INT340X thermal drivers
<M> Intel PCH Thermal Reporting Driver
powercap sysfs driver
Additionally, you can enable Running Average Power Limit – RAPL technology. Both PowerTOP and turbostat utilities are aware of RAPL. For RAPL enablement use:
Device Drivers --->
[*] Generic powercap sysfs driver --->
<M> Intel RAPL Support
To make use of Intel's Linux thermal daemon you first need to emerge sys-power/thermald and enable it via:
root #
rc-config add thermald
or
root #
systemctl enable thermald
dptfxtract from Intel may be used to auto generate a thermald.conf.xml for the system.
Kernel setup finalization
For a more detailed configuration description see the Power management/Processor#Kernel article.
Build and install the new kernel (if necessary) and reboot.
Using Laptop Mode Tools
Installation
It comes to no surprise that installation of the Laptop mode tools software is easily done via:
root #
emerge --ask app-laptop/laptop-mode-tools
However, this package takes on additional, optional settings through USE flag configuration. So let's first take a look at the supported USE flags and what they mean to the package.
USE flag | Description | Suggested when... |
---|---|---|
acpi
|
Depend on sys-power/acpid so that changes in the system are captured and power saving features are automatically enabled/disabled. | the laptop is not too old (around year 2003 and later). |
apm
|
Depend on sys-apps/apmd so that changes in the system are captured and power saving features are automatically enabled/disabled. | the laptop is very old. |
bluetooth
|
Depend on net-wireless/bluez , enabling laptop-mode-tools to manage bluetooth settings (enabling/disabling the service based on battery availability) | the laptop (and kernel) support bluetooth. |
scsi
|
Depend on sys-apps/sdparm , enabling laptop-mode-tools to manage SCSI (and not SATA) disk parameters. | the laptop uses SCSI disks. |
Observe there are two USE flags that seem to collide: acpi
and apm
. So what is the deal?
- The
apm
USE enables support for Advanced Power Management , an older (before year 2000) standard for power management features within a system. - The
acpi
USE enables support for Advanced Configuration and Power Interface , the successor of APM. All modern laptops support ACPI.
Depending on the system, either acpi
or apm
will need to be set. In the remainder of this guide, it is assumed the laptop is recent enough to use ACPI.
So, with the USE flags set, install laptop-mode-tools:
root #
emerge --ask app-laptop/laptop-mode-tools
Configuration
Having laptop-mode-tools installed on the system does not automatically enable the power management features that may be needed. To configure the package, first take a look at /etc/laptop-mode/laptop-mode.conf. This is the main configuration file for the package and is pretty well described (through comments).
But it is not the only configuration file to work with. The laptop-mode-tools package supports plugins (or modules) which have their own configuration file(s). These files are located in /etc/laptop-mode/conf.d and are named after the module they represent (such as intel-sata-powermgmt.conf).
Now, one of the important settings in each configuration file is if the laptop-mode-tools package should govern a particular setting or not. This is important when combining laptop-mode-tools with other power management services such as cpufreqd. In this example case, CONTROL_CPU_FREQUENCY=0
must be set:
CONTROL_CPU_FREQUENCY=0
The next few sections will help the user configure laptop-mode-tools to suit specific needs. When finished, start the laptop_mode service and make sure it is started upon system boot.
With OpenRC:
root #
rc-service laptop_mode start
root #
rc-update add laptop_mode default
With systemd:
root #
systemctl enable laptop-mode.service --now
How does laptop-mode-tools work
When running the laptop_mode service, the software will check in which state the system is in. The states are defined as:
- Battery, which is active when the system is running on battery power; the configuration files use the
BATT_
prefix for settings related to this state; - AC, which is active when the system is running on AC power; the configuration files use the
AC_
prefix for settings related to this state; - Laptop Mode, which is active when laptop mode is enabled; the configuration files use the
LM_
prefix for settings related to this state; - No Laptop Mode, which is active when laptop mode is disabled; the configuration files use the
NOLM_
prefix for settings related to this state.
The AC/BATT_ and LM/NOLM_ prefixes can be combined to have a AC_LM_ prefix.
When the laptop_mode service is started, it will switch modes based on events that occur (and of course based on the configuration settings). For instance, the setting ENABLE_LAPTOP_MODE_ON_BATTERY=1
will make sure that the laptop mode tools switch to laptop mode when battery power is used. If that is the case, then the settings starting with LM_
, LM_BATT_
, BATT_LM_
, and BATT_
will be used.
To make sure settings do not collide, it is not allowed to have overlapping settings. In the next example, the first set (for CPU_MAXFREQ
) is valid, but the second one (for CPU_MINFREQ
) is not.
## Valid set
BATT_CPU_MAXFREQ=fastest
LM_AC_CPU_MAXFREQ=fastest
NOLM_AC_CPU_MAXFREQ=fastest
## Invalid set
BATT_CPU_MINFREQ=fastest
LM_AC_CPU_MINFREQ=fastest
# The following includes AC and BATT, but BATT is already defined
NOLM_CPU_MINFREQ=fastest
Configuring CPU frequency management
The support for CPU frequency management in the laptop mode tools allows switching frequencies. It supports setting the CPU frequency governor, minimum frequency and maximum frequency. The configuration file used here is /etc/laptop-mode/conf.d/cpufreq.conf
The CPU frequency governor is a kernel-level policy that defines how the kernel will select the CPU frequency. We already selected the governors we want to use in the kernel configuration earlier. Let's recap:
performance
always picks the highest frequency;powersave
always picks the lowest frequency;userspace
does not pick anything, but lets the user decide (or any process that the user is running that will decide for the user);ondemand
will scale the CPU frequency up to the highest frequency when load is available;conservative
will scale the CPU frequency up gradually when load is available.
When switching between AC or battery, or (no) laptop mode, the appropriate governor (as well as its minimum and maximum frequency) is selected.
Configuring display brightness
With /etc/laptop-mode/conf.d/lcd-brightness.conf, the laptop mode tools can govern the brightness of the LCD screen.
The file currently uses the /proc/acpi/video/VID/LCD/brightness file (bug 499544) to set brightness values. Recent kernels do not provide this anymore; it will need to adjust this to /sys/class/backlight/acpi_video0/brightness instead.
The possible values that can be used are between 0 and the value in /sys/class/backlight/acpi_video0/max_brightness, with 0 being the lowest brightness value.
Configuring other services
An interesting feature of laptop-mode-tools is to support reloading particular services (like the system logger) after switching its configuration file. This is handled through /etc/laptop-mode/conf.d/configuration-file-control.conf
If enabled, the laptop_mode application will switch the configuration file(s) of the mentioned services with the same file, but suffixed with -nolm-ac , -lm-ac or -batt. It will then signal or reload the appropriate services so they can use the new configuration file.
Using cpufreqd
Package sys-power/cpufreqd is deprecated and has been removed from the Portage tree. sys-power/ncpufreqd can still be used for 2.6.x kernels.
Installation
The cpufreqd application allows the user to manage CPU frequencies in a more granular approach than what laptop-mode-tools supports. But before we dive into the installation of cpufreqd, let us first look at the USE flags it supports.
USE flag | Description | Suggested when... |
---|---|---|
acpi
|
Enable support for ACPI, allowing cpufreqd to be notified about specific events as well as govern power through the ACPI interface | the laptop is not very old (around year 2003 and later) |
apm
|
Enable support for APM, allowing cpufreqd to be notified about specific events as well as govern power through the APM interface | the laptop is very old |
lm_sensors
|
Enable support for the Linux hardware sensors (through sys-apps/lm_sensors), allowing to switch profiles based on hardware sensor results | using advanced events through lm_sensors |
nforce2
|
Enable support for NForce, allowing cpufreqd to change the NForce FSB clock and video card frequency | an NVidia graphics card based on the NForce chipset is present |
nvidia
|
Enable support for NVidia graphical card configuration (through the NVidia nvclock interface), allowing cpufreqd to change the video card frequency of NVidia graphical cards | an NVidia graphics card is present |
pmu
|
Enable the Power Management Unit plug-in of cpufreqd. This allows the software to poll the Linux kernel Power Supply interface, getting more detailed information on battery charge | the laptop does not support ACPI or APM |
The acpi
, apm
, and pmu
USE overlap, so only one should be active. If the laptop is sufficiently recent, acpi
is the best bet. If not, apm
offers all that is needed. When even APM isn't supported, try using pmu
.
With the USE flags configured, it is time to install cpufreqd.
root #
emerge --ask cpufreqd
Configuration
The cpufreqd application monitors the status of the system through several plugins. Based on the feedback it receives from those plugins, it will adjust the policy used to govern the CPU frequency.
cpufreqd can be configured by editing /etc/cpufreqd.conf. It contains three different sections:
- The
[General]...[/General]
section contains general configuration information. - The
[Profile]...[/Profile]
section defines the policies that the cpufreqd daemon can switch to. The section is very similar to the information used when manually setting the CPU frequency policy using cpufreq-set. - The
[Rule]...[/Rule]
section is the work-horse of the cpufreqd daemon, defining when the daemon decides to switch to a different profile.
Take a quick look at an example rule.
[...]
[Profile]
name=On Demand High
minfreq=40%
maxfreq=100%
policy=ondemand
[/Profile]
[Rule]
name=AC Off - High Power
ac=off
battery_interval=70-100
profile=On Demand High
[/Rule]
[...]
In the above example, cpufreqd will switch the system to the On Demand High profile (also shown in the above excerpt). This profile by itself uses the ondemand governor with a minimum frequency of 40% (iow, a CPU of 2 GHz will have by this policy a minimum frequency of 800 MHz).
The cpufreqd application can offer a more granular approach on CPU frequency scaling. But not only that, but the CPU frequency scaling can be tweaked based on various other metrics available. The default configuration offers a sample rule: when a movie is watched, maximum performance is desired (unless the CPU temperature is getting too high).
When cpufreqd has been configured, it is time to start it (and make sure the service is loaded automatically). Make sure that CPU frequency handling by other tools (like laptop-mode-tools) is disabled!
root #
rc-update add cpufreqd default
root #
/etc/init.d/cpufreqd start
See also
External resources
- Laptop Mode Tools Homepage, includes About laptop mode.
- PowerTOP, an interactive application helping users to find out which processes are forcing wakeups on the CPU most often.
- A ThinkWiki article on How to reduce power consumption (on Linux). This article offers an exhaustive list of measures one can take. However, it should be noted that the laptop mode tools implements the majority of these (if properly configured).
References
- ↑ Dominik Brodowski. Intel P-State driver, [https://www.kernel.org /doc/Documentation/cpu-freq/index.txt CPU frequency and voltage scaling code in the Linux(TM) kernel]. Retrieved 12 June 2016.