Difference between revisions of "Power saving"

From ArchWiki
Jump to navigation Jump to search
Line 85: Line 85:
== USB Autosuspend ==
== USB Autosuspend ==
{{accuracy|reason=Should be done with a udev rule.}}
To enable USB autosuspend after 2 seconds of inactivity:
To enable USB autosuspend after 2 seconds of inactivity:
  for i in `find /sys/bus/usb/devices/*/power/control`; do echo auto > $i; done;
  {{hc|/etc/udev/rules.d/usb_power_save.rules|2=ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control" ATTR{power/control}="auto"
for i in `find /sys/bus/usb/devices/*/power/autosuspend`; do echo '''2''' > $i; done;
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/autosuspend" ATTR{power/autosuspend}="2"}}
== Device Power Management ==
== Device Power Management ==

Revision as of 21:52, 23 November 2012

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 dynamic overclocking.


By default, audio power saving is turned off by most drivers. It can be enabled by setting the power_save parameter to a time (in seconds) to go in idle.

Note: Toggling the audio card's power state can cause a popping sound or noticeable latency on some broken hardware.
options snd_hda_intel power_save=1
options snd_ac97_codec power_save=1

Active State Power Management

To verify that ASPM is enabled:

$ cat /sys/module/pcie_aspm/parameters/policy
[default] performance powersave

Either [default] or [powersave] means you do not need to force it on.

Otherwise, it's either unsupported/broken on your hardware, or has to be forced on with pcie_aspm=force on the kernel line.

Warning: Forcing on ASPM can cause a freeze/panic, so make sure you have a way to undo the option if it doesn't work.


Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: The device should likely be disabled with hciconfig first. (Discuss in Talk:Power saving#)

Blacklist the hci_usb module if the driver is loaded automatically.

Disabling NMI watchdog

The 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.

kernel.nmi_watchdog = 0

or add nmi_watchdog as a kernel parameter to disable it completely from early boot.

Disabling 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 one interface:

Note: This should be combined with static naming of devices, the eth* names are not static.
ACTION=="add", SUBSYSTEM=="net", KERNEL=="net0" RUN+="/usr/sbin/ethtool -s net0 wol d"

Disabling for all interfaces:

ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*" RUN+="/usr/sbin/ethtool -s %k wol d"

PCI Runtime Power Management

ACTION=="add", SUBSYSTEM=="pci", ATTR{power/control}="auto"

Wireless power saving

Enabling for a specific interface:

Note: This should be combined with static naming of devices, the eth* names are not static.
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wifi0" RUN+="/usr/sbin/iw dev wifi0 set power_save on"

Enabling for all interfaces:

ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan*" RUN+="/usr/sbin/iw dev %k set power_save on"

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 commit=15 as a parameter in fstab or with the rootflags kernel parameter.

Laptop Mode

vm.laptop_mode = 5

SATA Active Link Powermanagement

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.
SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="min_power"

USB Autosuspend

To enable USB autosuspend after 2 seconds of inactivity:

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

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Should be done with a udev rule. (Discuss in Talk:Power saving#)
echo auto | tee /sys/bus/i2c/devices/*/power/control > /dev/null
echo auto | tee /sys/bus/spi/devices/*/power/control > /dev/null

View Power Setings

This function shows various power settings. Note you either must be root or you must have sudo.

function aa_power_settings ()
  sudo bash -c '
    for i in `find /sys/devices -name "bMaxPower"`;
        for ii in `find $i -type f`;
            bd=`dirname $ii`;
            busnum=`cat $bd/busnum`;
            devnum=`cat $bd/devnum`;
            title=`lsusb -s $busnum:$devnum`;
            echo -e "\n\n+++ $title\n  -$bd\n  -$ii";
            for ff in `find $bd/power -type f ! -empty 2>/dev/null`;
                v=`cat $ff 2>/dev/null|tr -d "\n"`;
                [[ ${#v} -gt 0 ]] && echo -e " `basename $ff`=$v";
            done | sort -g;
    echo -e "\n\n\n+++ Kernel Modules\n";
    for m in `command lspci -k|sed -n "/in use:/s,^.*: ,,p"|sort -u`;
        echo "+ $m";
        systool -v -m $m 2> /dev/null | sed -n "/Parameters:/,/^$/p";

See also