Difference between revisions of "Power saving"
Thestinger (talk | contribs) (→Audio: latency) |
m (→Disabling Wake-on-LAN) |
||
(46 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
+ | [[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]]. | ||
+ | |||
==Audio== | ==Audio== | ||
Line 12: | Line 15: | ||
{{hc|/etc/modprobe.d/audio_power_save.conf|2=options snd_ac97_codec power_save=1}} | {{hc|/etc/modprobe.d/audio_power_save.conf|2=options snd_ac97_codec power_save=1}} | ||
+ | |||
+ | ==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/broken on your hardware, or has to be forced on with {{ic|1=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.}} | ||
+ | {{Warning|In some cases forcing on ASPM can even increase power consumption.}} | ||
+ | |||
+ | == 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 | ||
+ | |||
+ | == Web-Camera == | ||
+ | If you won't use integrated web camera then [[Kernel_modules#Blacklisting|blacklist]] the {{ic|uvcvideo}} module. | ||
+ | |||
+ | ==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}} as a [[kernel parameter]] to disable it completely from early boot. | ||
+ | |||
+ | ==Disabling Wake-on-LAN== | ||
+ | |||
+ | [[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/disable_wol.rules|2=ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*" RUN+="/usr/sbin/ethtool -s %k wol d"}} | ||
+ | |||
+ | You can use multiple names in the matches; for example, {{ic|1=KERNEL=="lan0|eth*"}} | ||
+ | |||
+ | {{Note|This should be combined with [[udev#Network device|static naming]] of devices, the {{ic|eth*}} names are not static.}} | ||
+ | |||
+ | == PCI Runtime Power Management == | ||
+ | |||
+ | {{hc|/etc/udev/rules.d/pci_pm.rules|2=ACTION=="add", SUBSYSTEM=="pci", ATTR{power/control}="auto"}} | ||
+ | |||
+ | ==Wireless power saving== | ||
+ | |||
+ | Enabling for a specific interface: | ||
+ | |||
+ | {{Note|This should be combined with [[udev#Network device|static naming]] of devices, the eth* names are not static.}} | ||
+ | |||
+ | {{hc|/etc/udev/rules.d/wlan0_power_save.rules|2=ACTION=="add", SUBSYSTEM=="net", KERNEL=="wifi0" RUN+="/usr/sbin/iw dev wifi0 set power_save on"}} | ||
+ | |||
+ | Enabling for all interfaces: | ||
+ | |||
+ | {{hc|/etc/udev/rules.d/wifi_power_save.rules|2=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: | ||
+ | |||
+ | {{hc|/etc/sysctl.d/dirty_writeback.conf|2=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 == | ||
+ | |||
+ | {{hc|/etc/sysctl.d/laptop_mode.conf|2=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.}} | ||
+ | {{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 | ||
+ | |||
+ | == View Power Setings == | ||
+ | This function shows various power settings. Note you either must be root or you must have sudo. | ||
+ | |||
+ | {{bc|<nowiki>function aa_power_settings () | ||
+ | { | ||
+ | sudo bash -c ' | ||
+ | for i in `find /sys/devices -name "bMaxPower"`; | ||
+ | do | ||
+ | for ii in `find $i -type f`; | ||
+ | do | ||
+ | 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`; | ||
+ | do | ||
+ | v=`cat $ff 2>/dev/null|tr -d "\n"`; | ||
+ | [[ ${#v} -gt 0 ]] && echo -e " `basename $ff`=$v"; | ||
+ | v=; | ||
+ | done | sort -g; | ||
+ | done; | ||
+ | done; | ||
+ | echo -e "\n\n\n+++ Kernel Modules\n"; | ||
+ | for m in `command lspci -k|sed -n "/in use:/s,^.*: ,,p"|sort -u`; | ||
+ | do | ||
+ | echo "+ $m"; | ||
+ | systool -v -m $m 2> /dev/null | sed -n "/Parameters:/,/^$/p"; | ||
+ | done | ||
+ | '; | ||
+ | }</nowiki>}} | ||
+ | |||
+ | == See also == | ||
+ | |||
+ | * [[CPU Frequency Scaling]] |
Revision as of 15:11, 25 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.
Contents
- 1 Audio
- 2 Active State Power Management
- 3 Bluetooth
- 4 Web-Camera
- 5 Disabling NMI watchdog
- 6 Disabling Wake-on-LAN
- 7 PCI Runtime Power Management
- 8 Wireless power saving
- 9 Writeback Time
- 10 Laptop Mode
- 11 SATA Active Link Powermanagement
- 12 USB Autosuspend
- 13 Device Power Management
- 14 View Power Setings
- 15 See also
Audio
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.
- Intel
/etc/modprobe.d/audio_power_save.conf
options snd_hda_intel power_save=1
- ac97
/etc/modprobe.d/audio_power_save.conf
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.
Bluetooth
Blacklist thehci_usb
module if the driver is loaded automatically.
Alternatively, blacklist the btusb
and bluetooth
modules.
Another variant is to rfkill it:
# rfkill block bluetooth
Web-Camera
If you won't use integrated web camera then blacklist the uvcvideo
module.
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.
/etc/sysctl.d/disable_watchdog.conf
kernel.nmi_watchdog = 0
or add nmi_watchdog=0
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 all Ethernet interfaces:
/etc/udev/rules.d/disable_wol.rules
ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*" RUN+="/usr/sbin/ethtool -s %k wol d"
You can use multiple names in the matches; for example, KERNEL=="lan0|eth*"
eth*
names are not static.PCI Runtime Power Management
/etc/udev/rules.d/pci_pm.rules
ACTION=="add", SUBSYSTEM=="pci", ATTR{power/control}="auto"
Wireless power saving
Enabling for a specific interface:
/etc/udev/rules.d/wlan0_power_save.rules
ACTION=="add", SUBSYSTEM=="net", KERNEL=="wifi0" RUN+="/usr/sbin/iw dev wifi0 set power_save on"
Enabling for all interfaces:
/etc/udev/rules.d/wifi_power_save.rules
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:
/etc/sysctl.d/dirty_writeback.conf
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
/etc/sysctl.d/laptop_mode.conf
vm.laptop_mode = 5
SATA Active Link Powermanagement
/etc/udev/rules.d/hd_power_save.rules
SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="min_power"
USB Autosuspend
To enable USB autosuspend after 2 seconds of inactivity:
/etc/udev/rules.d/usb_power_save.rules
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
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"`; do for ii in `find $i -type f`; do 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`; do v=`cat $ff 2>/dev/null|tr -d "\n"`; [[ ${#v} -gt 0 ]] && echo -e " `basename $ff`=$v"; v=; done | sort -g; done; done; echo -e "\n\n\n+++ Kernel Modules\n"; for m in `command lspci -k|sed -n "/in use:/s,^.*: ,,p"|sort -u`; do echo "+ $m"; systool -v -m $m 2> /dev/null | sed -n "/Parameters:/,/^$/p"; done '; }