I recently worked on activating power management functions,
reduce energy consumption and noise of my little
HP N54L "toy". During this process I tried to avoid the usage of
/etc/rc.local and set things by
udev,
hdparm and friends. Below are my results. Actual resultsWith the following steps my system (N54L + 3xWD20EFRX HDD +1xWD5003AZEX HDD + LCD-mod + case fan mod + Debian Wheezy) uses
27W in idle mode. The
USB W-LAN card uses another
10W. In active mode, e.g.
compiling source code, the system runs (and boots) with around
57W. The highest power consumption observed is during startup phase with
88W. First things firstFor the following steps it might be necessary to have some packages installed, that maybe do not occur in this post. If I missed something, I appreciate a hint. Further the following steps might produce even better results with a
custom kernel. I'm using the stock
linux-image-3.2.0-4-amd64 kernel image as the time of writing and I have these packages installed:
amd64-microcode, firmware-linux, firmware-linux-free, firmware-linux-nonfree and firmware-atheros (the latter for my
WLAN card).
ASPM and
ACPIFirst I enabled PCIE
ASPM in my (non-modded) BIOS and forced it together with
ACPI via
grub by changing
GRUB_CMDLINE_LINUX_DEFAULT in
/etc/default/grub so it looks like this:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=force pcie_aspm=force nmi_watchdog=0"
ASPM has now been enabled as
lspci prooves:
00:04.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 0) (prog-if 00 [Normal decode])
[..]
LnkCap: Port #1, Speed 5GT/s, Width x1, ASPM L0s L1, Latency L0 <64ns, L1 <1us
ClockPM- Surprise- LLActRep+ BwNot+
LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
[..]
00:06.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780 PCI to PCI bridge (PCIE port 2) (prog-if 00 [Normal decode])
[..]
LnkCap: Port #3, Speed 5GT/s, Width x1, ASPM L0s L1, Latency L0 <64ns, L1 <1us
ClockPM- Surprise- LLActRep+ BwNot+
LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
02:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03) (prog-if 30 [XHCI])
[..]
LnkCap: Port #0, Speed 5GT/s, Width x1, ASPM L0s L1, Latency L0 <4us, L1 unlimited
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
[..]
03:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5723 Gigabit Ethernet PCIe (rev 10)
[..]
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <1us, L1 <64us
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
[..]
Even so
/sys/module/pcie_aspm/parameters/policy will still show as below:
[default] performance powersave
I'll show how to set the
powersave value in
/sys/module/pcie_aspm/parameters/policy in the next section.JFTR: These are my
ACPI related packages installed:
acpi, acpid, acpi-support and acpi-support-base. Enable powersaving via UDEVThe following rules file
/etc/udev/rules.d/90-local-n54l.rules has been inspired by a
blog post. It enables powersaving modes for all
PCI,
SCSI and
USB devices and
ASPM. Further the internal RADEON cards power profile is set to the
low value. There is no monitor connected usually. The file contains these rules:
SUBSYSTEM=="module", KERNEL=="pcie_aspm", ACTION=="add", TEST=="parameters/policy", ATTR parameters/policy ="powersave"
SUBSYSTEM=="i2c", ACTION=="add", TEST=="power/control", ATTR power/control ="auto"
SUBSYSTEM=="pci", ACTION=="add", TEST=="power/control", ATTR power/control ="auto"
SUBSYSTEM=="usb", ACTION=="add", TEST=="power/control", ATTR power/control ="auto"
SUBSYSTEM=="usb", ACTION=="add", TEST=="power/autosuspend", ATTR power/autosuspend ="2"
SUBSYSTEM=="scsi", ACTION=="add", TEST=="power/control", ATTR power/control ="auto"
SUBSYSTEM=="spi", ACTION=="add", TEST=="power/control", ATTR power/control ="auto"
SUBSYSTEM=="drm", KERNEL=="card*", ACTION=="add", DRIVERS=="radeon", TEST=="power/control", TEST=="device/power_method", ATTR device/power_method ="profile", ATTR device/power_profile ="low"
SUBSYSTEM=="scsi_host", KERNEL=="host*", ACTION=="add", TEST=="link_power_management_policy", ATTR link_power_management_policy ="min_power"
Set harddrives spindown timeoutI decided to sent my system drive to standby after 20 minutes and the RAID drives after 15 minutes. This is usually ok, because the RAID isn't always used.
hdparm is the right tool to realize this. Many people use the
/dev/disk/by-uuid/... syntax here, to avoid having to touch the configuration file if some system configuration changes. Because I'm running a
RAID, I couldn't use this syntax, although it might be possible to use
/dev/disk/by-id/... instead. Well for the moment I stay with the configuration below. The relevant part of
/etc/hdparm.conf is:
[..]
# system harddrive
/dev/sda
spindown_time = 240
# below are the WD20EFRX drives
/dev/sdb
spindown_time = 180
/dev/sdc
spindown_time = 180
/dev/sdd
spindown_time = 180
Idle modeWhen there is nothing to do for the system, all I hear is the (still a bit noisy) fan of the power supply, which I might replace in the future too. Either by testing a different fan or by replacing the whole power supply unit by the
fanless FORTRON FSP150-50TNF or (
even better) a
picoPSU.The system currently shows a power consumption of around
37W in idle mode whereas the
USB W-LAN card itself needs around
10W. There is a possibility to enable power savings mode for this card too. I could add this entry to
/etc/udev/rules.d/90-local-n54l.rules:
SUBSYSTEM=="net", ACTION=="add", KERNEL=="wlan*" RUN+="/usr/bin/iw dev %k set power_save on"
But it turned out that the connection became a bit unstable after it. So I don't use this rule. More on the roadThere are a lot more options one can easily find via
$search_engine. The N54L system could be brought to sleep and woken up by LAN via Wake-on-LAN (
WOL). This is a feature I don't use. I've also read rumors about enabling different sleep/suspend states of the system, which seems to require to install a modded BIOS. Well, I'll post news and changes if they happen to come;)