Difference between revisions of "Power saving"

From ArchWiki
Jump to navigation Jump to search
m (typo)
(merged to Power management, redirecting there)
(142 intermediate revisions by 24 users not shown)
Line 1: Line 1:
{{Article summary start}}
#REDIRECT [[Power management]]
{{Article summary text|Configuration and tools for saving power.}}
{{Article summary heading|Related}}
{{Article summary wiki|CPU Frequency Scaling}}
{{Article summary wiki|Kernel modules}}
{{Article summary wiki|Hybrid graphics}}
{{Article summary wiki|Sysctl}}
{{Article summary wiki|udev}}
{{Article summary end}}
[[Category:Power management]]
This article covers the configuration needed to turn on power saving features. Almost all of the features listed here are worth using whether or not the computer is on AC or battery power. Most have negligible performance impact and are just not enabled by default because of commonly broken hardware/drivers. Reducing power usage means reducing heat, which can even lead to higher performance on a modern Intel or AMD CPU, thanks to [[Wikipedia:Intel Turbo Boost|dynamic overclocking]].
== Configuration ==
If you would like to create your own scripts and power saving settings such as by udev rules you can take the following settings as a reference.
=== Audio ===
By default, audio power saving is turned off by most drivers.  It can be enabled by setting the {{ic|power_save}} parameter; a time (in seconds) to go into idle mode.  To idle the audio card after one second, create
{{hc|/etc/modprobe.d/audio_powersave.conf|2=options snd_hda_intel power_save=1}}
for Intel, or use
  options snd_ac97_codec power_save=1
for ac97.
{{Note|Toggling the audio card's power state can cause a popping sound or noticeable latency on some broken hardware.}}
=== Active state power management ===
To verify that [[Wikipedia:Active State Power Management|ASPM]] is enabled:
{{hc|$ cat /sys/module/pcie_aspm/parameters/policy|[default] performance powersave}}
Either {{ic|[default]}} or {{ic|[powersave]}} means you do not need to force it on. Otherwise, it's either unsupported or broken on your hardware, or has to be forced on with {{ic|1=pcie_aspm=force}} on the [[kernel line]].
* Forcing on ASPM can cause a freeze/panic, so make sure you have a way to undo the option if it doesn't work.
* On systems that don't support it forcing on ASPM can even increase power consumption.}}
=== Backlight ===
When system starts, screen backlight is set to maximum by default. This can be fixed by specifying backlight level in the following udev rule:
SUBSYSTEM=="backlight", ACTION=="add", KERNEL=="acpi_video0", ATTR{brightness}="1"
=== Bluetooth ===
{{expansion|reason=The device should likely be disabled with hciconfig first.}}
[[Kernel_modules#Blacklisting|Blacklist]] the {{ic|hci_usb}} module if the driver is loaded automatically.
Alternatively, [[Kernel_modules#Blacklisting|blacklist]] the {{ic|btusb}} and {{ic|bluetooth}} modules.
Another variant is to {{pkg|rfkill}} it:
# rfkill block bluetooth
Or with udev rule:
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="0"
=== Web-Camera ===
If you won't use integrated web camera then [[Kernel_modules#Blacklisting|blacklist]] the {{ic|uvcvideo}} module.
=== Kernel parameters ===
This section uses configs in {{ic|/etc/sysctl.d/}}, which is ''"a drop-in directory for kernel sysctl parameters, extending what you can already do with /etc/sysctl.conf."''  See [http://0pointer.de/blog/projects/the-new-configuration-files The New Configuration Files] and more specifically [http://0pointer.de/public/systemd-man/sysctl.d.html systemd's sysctl.d man page] for more information.
==== Disabling NMI watchdog ====
The [[Wikipedia:Non-maskable interrupt|NMI]] watchdog is a debugging feature to catch hardware hangs and cause a kernel panic. On some systems it can generate a lot of interrupts, causing a noticeable increase in power usage.
{{hc|/etc/sysctl.d/disable_watchdog.conf|2=kernel.nmi_watchdog = 0}}
or add {{ic|1=nmi_watchdog=0}} to the [[kernel parameter|kernel line]] to disable it completely from early boot.
==== Writeback Time ====
Increasing the VM dirty writeback time can help to aggregate I/O together - reducing disk writes, and decreasing power usage:
  vm.dirty_writeback_centisecs = 1500
To do the same for journal commits with ext4 and some other filesystems, use {{ic|1=commit=15}} as a parameter in [[fstab]] or with the {{ic|rootflags}} [[kernel parameter]].
==== Laptop Mode ====
See the [https://www.kernel.org/doc/Documentation/laptops/laptop-mode.txt kernel documentation] on the laptop mode 'knob.' ''"A sensible value for the knob is 5 seconds."''
  vm.laptop_mode = 5
=== Network interfaces ===
[[Wikipedia:Wake-on-LAN|Wake-on-LAN]] can be a useful feature, but if you're not making use of it then it's simply draining extra power waiting for a magic packet while in suspend. Disabling for all Ethernet interfaces:
{{hc|/etc/udev/rules.d/70-disable_wol.rules|2=ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*" RUN+="/usr/bin/ethtool -s %k wol d"}}
To enable powersaving on all wireless interfaces:
{{hc|/etc/udev/rules.d/70-wifi-powersave.rules|2=ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan*" RUN+="/usr/sbin/iw dev %k set power_save on"}}
In these examples, {{ic|%k}} is a specifier for the kernel name of the matched device.  For example, if it finds that the rule is applicable to {{ic|wlan0}}, the {{ic|%k}} specifier will be replaced with {{ic|wlan0}}. To apply the rules to only a particular interface, just replace the pattern {{ic|eth*}} and specifier {{ic|%k}} with the desired interface name. For more information, see [http://www.reactivated.net/writing_udev_rules.html Writing udev rules].
In this case, the name of the configuration file is important. Due to the introduction of [[Network_Configuration#Device_names|persistent device names]] via {{ic|80-net-name-slot.rules}} in systemd v197, it is important that the network powersave rules are named lexicographically before {{ic|80-net-name-slot.rules}}, so that they are applied before the devices are named e.g. {{ic|enp2s0}}.
=== PCI Runtime Power Management ===
{{hc|/etc/udev/rules.d/pci_pm.rules|2=ACTION=="add", SUBSYSTEM=="pci", ATTR{power/control}="auto"}}
=== SATA Active Link Power Management ===
{{Note|This adds latency when accessing a drive that has been idle, so it's one of the few settings that may be worth toggling based on whether you're on AC power.}}
{{hc|/etc/udev/rules.d/hd_power_save.rules|2=SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="min_power"}}
=== USB Autosuspend ===
To enable USB autosuspend after 2 seconds of inactivity:
{{hc|/etc/udev/rules.d/usb_power_save.rules|2=ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control" ATTR{power/control}="auto"
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/autosuspend" ATTR{power/autosuspend}="2"}}
=== Device Power Management ===
{{accuracy|reason=Should be done with a udev rule.}}
echo auto | tee /sys/bus/i2c/devices/*/power/control > /dev/null
echo auto | tee /sys/bus/spi/devices/*/power/control > /dev/null
== Tools and scripts ==
=== Packages ===
There are many scripts and tools which make use of the various settings described in the previous sections. These are notably:
* [[TLP]]
* [[Powerdown]]
* {{AUR|powerconf}}
* {{AUR|ftw-git}}
* [[Laptop Mode Tools]]
* [[pm-utils]]
If you do not want to take care of the settings by yourself it is recommended to use these tools. But be aware of running only '''one''' of these tools to avoid possible conflicts as they all work more or less similar.
=== Print power settings ===
This script prints power settings and a variety of other properties for USB and PCI devices.  Note that root permissions are needed to see all settings.
for i in $(find /sys/devices -name "bMaxPower")
title=$(lsusb -s $busnum:$devnum)
printf "\n\n+++ %s\n  -%s\n" "$title" "$busdir"
for ff in $(find $busdir/power -type f ! -empty 2>/dev/null)
v=$(cat $ff 2>/dev/null|tr -d "\n")
[[ ${#v} -gt 0 ]] && echo -e " ${ff##*/}=$v";
done | sort -g;
printf "\n\n\n+++ %s\n" "Kernel Modules"
for mod in $(lspci -k | sed -n '/in use:/s,^.*: ,,p' | sort -u)
echo "+ $mod";
systool -v -m $mod 2> /dev/null | sed -n "/Parameters:/,/^$/p";

Latest revision as of 12:30, 23 April 2015

Redirect to: