1

I have an ASUS laptop, model K45VM. 3rd generation core i7 processor, 8gb of RAM, intel HD 4000 integrated graphics card and a Nvidia GT630M as the discrete graphics card. Dual-booting Linux Mint 18 'Sarah' and Win10. One thing that always bothered me to no end running Linux on laptops was the elevated temperatures and pretty big hit on battery life, under Win10 the notebook runs cooler and the battery lasts about one hour longer (4,5h under Win10, 3h on Linux), this makes Linux feel Inefficient, wasteful. I tried various solutions for reducing power consumption (like TLP), and things have improved, but I'm still quite a ways from having the same low power consumption and temperatures I get under Win10. Can someone help me spot if anything is amiss or configured wrong that could cause this?

Here is some relevant information about my system during idle/light load:

enter image description here

10.8W seems a little high for me, I suspect one of the reasons for the high power consumption is that my wireless card (wlp3s0 - ath9k module) comes with power-management disabled by default, and for good reason, enabling it causes the card to lose connection after a while, only rebooting the machine allows it to work again, so power management needs to stay off if the card is to work correctly...

enter image description here

If I remember correctly, the C7 powerstate is as low as this CPU will go, thus it seems to me that there is nothing wrong going on here, CPU looks to be spending most of its time on low power states.. But I could be completely wrong..

I tried posting a pic of my Powertop Tunables tab but Stack Exchange would't let me, I should've generated the HTML report and posted a link to that instead, maybe later.. All of the tunables are set to 'Good' except my wireless mouse, which hangs if it is enabled on its USB port, and the 'VM writeback timeout' option which is set to 'Bad' by default with --auto-tune and TLP, no idea what it does though, changing it to 'Good' doesn't seem to have any effect.

My TLP configuration:

# ------------------------------------------------------------------------------
# tlp - Parameters for power save
# See full explanation: http://linrunner.de/en/tlp/docs/tlp-configuration.html

# Hint: some features are disabled by default, remove the leading # to enable
# them.

# Set to 0 to disable, 1 to enable TLP.
TLP_ENABLE=1

# Operation mode when no power supply can be detected: AC, BAT
# Concerns some desktop and embedded hardware only.
TLP_DEFAULT_MODE=BAT

# Seconds laptop mode has to wait after the disk goes idle before doing a sync.
# Non-zero value enables, zero disables laptop mode.
#DISK_IDLE_SECS_ON_AC=0
#DISK_IDLE_SECS_ON_BAT=120

# Dirty page values (timeouts in secs).
#MAX_LOST_WORK_SECS_ON_AC=15
#MAX_LOST_WORK_SECS_ON_BAT=120

# Hint: CPU parameters below are disabled by default, remove the leading #
# to enable them, otherwise kernel default values are used.

# Select a CPU frequency scaling governor:
#   ondemand, powersave, performance, conservative
# Intel Core i processor with intel_pstate driver:
#   powersave, performance
# Important:
#   You *must* disable your distribution's governor settings or conflicts will
#   occur. ondemand is sufficient for *almost all* workloads, you should know
#   what you're doing!
CPU_SCALING_GOVERNOR_ON_AC=performance
CPU_SCALING_GOVERNOR_ON_BAT=powersave

# Set the min/max frequency available for the scaling governor.
# Possible values strongly depend on your CPU. For available frequencies see
# tlp-stat output, Section "+++ Processor".
#CPU_SCALING_MIN_FREQ_ON_AC=0
#CPU_SCALING_MAX_FREQ_ON_AC=0
#CPU_SCALING_MIN_FREQ_ON_BAT=0
#CPU_SCALING_MAX_FREQ_ON_BAT=0

# Set Intel P-state performance: 0..100 (%)
# Limit the max/min P-state to control the power dissipation of the CPU.
# Values are stated as a percentage of the available performance.
# Requires an Intel Core i processor with intel_pstate driver.
CPU_MIN_PERF_ON_AC=0
CPU_MAX_PERF_ON_AC=100
CPU_MIN_PERF_ON_BAT=0
CPU_MAX_PERF_ON_BAT=20

# Set the CPU "turbo boost" feature: 0=disable, 1=allow
# Requires an Intel Core i processor.
# Important:
# - This may conflict with your distribution's governor settings
# - A value of 1 does *not* activate boosting, it just allows it
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0

# Minimize number of used CPU cores/hyper-threads under light load conditions
SCHED_POWERSAVE_ON_AC=1
SCHED_POWERSAVE_ON_BAT=1

# Kernel NMI Watchdog:
#   0=disable (default, saves power), 1=enable (for kernel debugging only)
NMI_WATCHDOG=0

# Change CPU voltages aka "undervolting" - Kernel with PHC patch required
# Frequency voltage pairs are written to:
#   /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
# CAUTION: only use this, if you thoroughly understand what you are doing!
#PHC_CONTROLS="F:V F:V F:V F:V"

# Set CPU performance versus energy savings policy:
#   performance, normal, powersave
# Requires kernel module msr and x86_energy_perf_policy from linux-tools
ENERGY_PERF_POLICY_ON_AC=performance
ENERGY_PERF_POLICY_ON_BAT=powersave

# Hard disk devices; separate multiple devices with spaces (default: sda).
# Devices can be specified by disk ID also (lookup with: tlp diskid).
DISK_DEVICES="sda sdb"

# Hard disk advanced power management level: 1..254, 255 (max saving, min, off)
# Levels 1..127 may spin down the disk; 255 allowable on most drives.
# Separate values for multiple devices with spaces.
DISK_APM_LEVEL_ON_AC="254 254"
DISK_APM_LEVEL_ON_BAT="254 254"

# Hard disk spin down timeout:
#   0:        spin down disabled
#   1..240:   timeouts from 5s to 20min (in units of 5s)
#   241..251: timeouts from 30min to 5.5 hours (in units of 30min)
# See 'man hdparm' for details.
DISK_SPINDOWN_TIMEOUT_ON_AC="242 242"
DISK_SPINDOWN_TIMEOUT_ON_BAT="242 242"

# Select IO scheduler for the disk devices: noop, deadline, cfq (Default: cfq);
# Separate values for multiple devices with spaces.
DISK_IOSCHED="cfq cfq"

# SATA aggressive link power management (ALPM):
#   min_power, medium_power, max_performance
SATA_LINKPWR_ON_AC=max_performance
SATA_LINKPWR_ON_BAT=min_power

# PCI Express Active State Power Management (PCIe ASPM):
#   default, performance, powersave
PCIE_ASPM_ON_AC=performance
PCIE_ASPM_ON_BAT=powersave

# Radeon graphics clock speed (profile method): low, mid, high, auto, default;
# auto = mid on BAT, high on AC; default = use hardware defaults.
# (Kernel >= 2.6.35 only, open-source radeon driver explicitly)
#RADEON_POWER_PROFILE_ON_AC=high
#RADEON_POWER_PROFILE_ON_BAT=low

# Radeon dynamic power management method (DPM): battery, performance
# (Kernel >= 3.11 only, requires boot option radeon.dpm=1)
#RADEON_DPM_STATE_ON_AC=performance
#RADEON_DPM_STATE_ON_BAT=battery

# Radeon DPM performance level: auto, low, high; auto is recommended.
#RADEON_DPM_PERF_LEVEL_ON_AC=auto
#RADEON_DPM_PERF_LEVEL_ON_BAT=auto

# WiFi power saving mode: 1=disable, 5=enable; not supported by all adapters.
WIFI_PWR_ON_AC=1
WIFI_PWR_ON_BAT=5

# Disable wake on LAN: Y/N
WOL_DISABLE=Y

# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs).
# A value of 0 disables, >=1 enables power save.
SOUND_POWER_SAVE_ON_AC=0
SOUND_POWER_SAVE_ON_BAT=1

# Disable controller too (HDA only): Y/N
SOUND_POWER_SAVE_CONTROLLER=Y

# Set to 1 to power off optical drive in UltraBay/MediaBay when running on
# battery. A value of 0 disables this feature (Default).
# Drive can be powered on again by releasing (and reinserting) the eject lever
# or by pressing the disc eject button on newer models.
# Note: an UltraBay/MediaBay hard disk is never powered off.
BAY_POWEROFF_ON_BAT=1
# Optical drive device to power off (default sr0).
BAY_DEVICE="sr0"

# Runtime Power Management for PCI(e) bus devices: on=disable, auto=enable
RUNTIME_PM_ON_AC=on
RUNTIME_PM_ON_BAT=auto

# Runtime PM for *all* PCI(e) bus devices, except blacklisted ones:
#   0=disable, 1=enable
RUNTIME_PM_ALL=1

# Exclude PCI(e) device adresses the following list from Runtime PM
# (separate with spaces). Use lspci to get the adresses (1st column).
#RUNTIME_PM_BLACKLIST="bb:dd.f 11:22.3 44:55.6"

# Exclude PCI(e) devices assigned to the listed drivers from Runtime PM
# (should prevent accidential power on of hybrid graphics' discrete part).
# Default is "radeon nouveau"; use "" to disable the feature completely.
# Separate multiple drivers with spaces.
RUNTIME_PM_DRIVER_BLACKLIST="radeon nouveau"

# Set to 0 to disable, 1 to enable USB autosuspend feature.
USB_AUTOSUSPEND=1

# Exclude listed devices from USB autosuspend (separate with spaces).
# Use lsusb to get the ids.
# Note: input devices (usbhid) are excluded automatically (see below)
#USB_BLACKLIST="1111:2222 3333:4444"

# WWAN devices are excluded from USB autosuspend:
# 0=do not exclude / 1=exclude
USB_BLACKLIST_WWAN=1

# Include listed devices into USB autosuspend even if already excluded
# by the driver or WWAN blacklists above (separate with spaces).
# Use lsusb to get the ids.
#USB_WHITELIST="1111:2222 3333:4444"

# Set to 1 to disable autosuspend before shutdown, 0 to do nothing
# (workaround for USB devices that cause shutdown problems).
#USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN=1

# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
# on system startup: 0=disable, 1=enable.
# Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
#   are ignored when this is enabled!
RESTORE_DEVICE_STATE_ON_STARTUP=0

# Radio devices to disable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan"

# Radio devices to enable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#DEVICES_TO_ENABLE_ON_STARTUP="wifi"

# Radio devices to disable on shutdown: bluetooth, wifi, wwan
# (workaround for devices that are blocking shutdown).
#DEVICES_TO_DISABLE_ON_SHUTDOWN="bluetooth wifi wwan"

# Radio devices to enable on shutdown: bluetooth, wifi, wwan
# (to prevent other operating systems from missing radios).
#DEVICES_TO_ENABLE_ON_SHUTDOWN="wwan"

# Radio devices to enable on AC: bluetooth, wifi, wwan
#DEVICES_TO_ENABLE_ON_AC="bluetooth wifi wwan"

# Radio devices to disable on battery: bluetooth, wifi, wwan
#DEVICES_TO_DISABLE_ON_BAT="bluetooth wifi wwan"

# Radio devices to disable on battery when not in use (not connected):
# bluetooth, wifi, wwan
#DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth wifi wwan"

# Battery charge thresholds (ThinkPad only, tp-smapi or acpi-call kernel module
# required). Charging starts when the remaining capacity falls below the
# START_CHARGE_TRESH value and stops when exceeding the STOP_CHARGE_TRESH value.
# Main / Internal battery (values in %)
#START_CHARGE_THRESH_BAT0=75
#STOP_CHARGE_THRESH_BAT0=80
# Ultrabay / Slice / Replaceable battery (values in %)
#START_CHARGE_THRESH_BAT1=75
#STOP_CHARGE_THRESH_BAT1=80

# ------------------------------------------------------------------------------
# tlp-rdw - Parameters for the radio device wizard
# Possible devices: bluetooth, wifi, wwan

# Hints:
# - Parameters are disabled by default, remove the leading # to enable them.
# - Separate multiple radio devices with spaces.

# Radio devices to disable on connect.
#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"

# Radio devices to enable on disconnect.
#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""

# Radio devices to enable/disable when docked.
#DEVICES_TO_ENABLE_ON_DOCK=""
#DEVICES_TO_DISABLE_ON_DOCK=""

# Radio devices to enable/disable when undocked.
#DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
#DEVICES_TO_DISABLE_ON_UNDOCK=""

Some of my changes:

# Hard disk advanced power management level: 1..254, 255 (max saving, min, off)
# Levels 1..127 may spin down the disk; 255 allowable on most drives.
# Separate values for multiple devices with spaces.
DISK_APM_LEVEL_ON_AC="254 254"
DISK_APM_LEVEL_ON_BAT="254 254"

# Hard disk spin down timeout:
#   0:        spin down disabled
#   1..240:   timeouts from 5s to 20min (in units of 5s)
#   241..251: timeouts from 30min to 5.5 hours (in units of 30min)
# See 'man hdparm' for details.
DISK_SPINDOWN_TIMEOUT_ON_AC="242 242"
DISK_SPINDOWN_TIMEOUT_ON_BAT="242 242"

'DISK_APM_LEVEL_ON_BAT' set to 128 saves me about 1W but causes my HDD to keep unloading the head every 3 to 5 seconds (makes clicking noises) and slows down the drive for one or two seconds only to spin it back up again immediately, throwing my HDD life expectancy out the window. smartcl -a /dev/sda Load_Cycle_Count goes up like crazy... I've experimented with it and any value lower than 254 does the same...

# Set Intel P-state performance: 0..100 (%)
# Limit the max/min P-state to control the power dissipation of the CPU.
# Values are stated as a percentage of the available performance.
# Requires an Intel Core i processor with intel_pstate driver.
CPU_MIN_PERF_ON_AC=0
CPU_MAX_PERF_ON_AC=100
CPU_MIN_PERF_ON_BAT=0
CPU_MAX_PERF_ON_BAT=20

'CPU_MAX_PERF_ON_BAT=20' helps a little bit, fans seem to take longer before needing to spin up under light loads, or don't spin at all, but as soon as I do something more 'heavy' like opening a new tab on Chromium or opening a folder full of files, the fans start right up. Under Win10 it pretty much stays silent during those tasks. With Win10 also, the fans on this notebook seem to be able to spin slower and kick in at lower temperatures, Linux seems to wait before the machine gets a little hotter before kicking in the fans at a slightly higher speed and pushing the heat out all at once. This means the fans shut down sooner under Linux, but it also means it makes more noise and lets the machine heat up more.. Maybe it is something to do with drivers? This is for idle and light loads only, under heavy loads the fans spin and perform the same under both OSs, power consumption is about the same as well.

# Select a CPU frequency scaling governor:
    #   ondemand, powersave, performance, conservative
    # Intel Core i processor with intel_pstate driver:
    #   powersave, performance
    # Important:
    #   You *must* disable your distribution's governor settings or conflicts will
    #   occur. ondemand is sufficient for *almost all* workloads, you should know
    #   what you're doing!
    CPU_SCALING_GOVERNOR_ON_AC=performance
    CPU_SCALING_GOVERNOR_ON_BAT=powersave

    # Set the min/max frequency available for the scaling governor.
    # Possible values strongly depend on your CPU. For available frequencies see
    # tlp-stat output, Section "+++ Processor".
    #CPU_SCALING_MIN_FREQ_ON_AC=0
    #CPU_SCALING_MAX_FREQ_ON_AC=0
    #CPU_SCALING_MIN_FREQ_ON_BAT=0
    #CPU_SCALING_MAX_FREQ_ON_BAT=0

My CPU uses intel_pstate tech, so only performance and powersave are available to me, all 'CPU_SCALING' are commented out because as far as I understand it, they are made for older processors that did not managed their frequency automatically on their own, like mine does.

# Seconds laptop mode has to wait after the disk goes idle before doing a sync.
# Non-zero value enables, zero disables laptop mode.
#DISK_IDLE_SECS_ON_AC=0
#DISK_IDLE_SECS_ON_BAT=120

# Dirty page values (timeouts in secs).
#MAX_LOST_WORK_SECS_ON_AC=15
#MAX_LOST_WORK_SECS_ON_BAT=120

I meddled with this for a while trying to solve the 'HDD head constantly unloading' problem, to try and keep the 'DISK_APM' settings at 128, but alas, I failed. And since the disk is now permanently at its lowest power management setting, always spinning and rarely going into idle, I figured it didn't make much of a difference, and, as I didn't remembered the default values, I just commented it out... And I'm probably horribly wrong...

These are my grub options:

GRUB_CMDLINE_LINUX_DEFAULT="pcie_aspm=force quiet splash i915.enable_fbc=1 i915.enable_rc6=7 i915.enable_psr=1"

With power management on both the wireless (ps_enable=1) and disk (DISK_APM_LEVEL_ON_BAT="128 128") turned on, the power consumption goes down to about 8.9W on complete idle, with any task (like browsing the web or opening and editing a text file) ramping it back up to the low 10's, watching a 720p video on YouTube sending it to the low 20's. Screen brightness is generally kept up to 40% maximum. Battery life is about 3,5h maximum, under very light loads, despite what powertop says.. Watching YouTube gives it about 2 / 2,5h tops...

Is this normal? Is this the best it gets with this machine or there is something I missed? Any help or insights are appreciated.

PS: Tried the i3 window manager for a while on this machine also, nothing really changed power consumption wise.

1 Answer 1

2

I use TLP on a rather energy demanding laptop (Acer VN7-591G-77FS) and I'm having improved battery compared to windows. I diffed your TLP configuration with mine and here is the diff

--- stackexchange   2016-12-09 19:56:17.894674340 -0800
+++ mine    2016-07-17 16:51:00.000000000 -0700
@@ -10,16 +10,16 @@

 # Operation mode when no power supply can be detected: AC, BAT
 # Concerns some desktop and embedded hardware only.
-TLP_DEFAULT_MODE=BAT
+TLP_DEFAULT_MODE=AC

 # Seconds laptop mode has to wait after the disk goes idle before doing a sync.
 # Non-zero value enables, zero disables laptop mode.
-#DISK_IDLE_SECS_ON_AC=0
-#DISK_IDLE_SECS_ON_BAT=120
+DISK_IDLE_SECS_ON_AC=0
+DISK_IDLE_SECS_ON_BAT=2

 # Dirty page values (timeouts in secs).
-#MAX_LOST_WORK_SECS_ON_AC=15
-#MAX_LOST_WORK_SECS_ON_BAT=120
+MAX_LOST_WORK_SECS_ON_AC=15
+MAX_LOST_WORK_SECS_ON_BAT=60

 # Hint: CPU parameters below are disabled by default, remove the leading #
 # to enable them, otherwise kernel default values are used.
@@ -50,7 +50,7 @@
 CPU_MIN_PERF_ON_AC=0
 CPU_MAX_PERF_ON_AC=100
 CPU_MIN_PERF_ON_BAT=0
-CPU_MAX_PERF_ON_BAT=20
+CPU_MAX_PERF_ON_BAT=100

 # Set the CPU "turbo boost" feature: 0=disable, 1=allow
 # Requires an Intel Core i processor.
@@ -61,7 +61,7 @@
 CPU_BOOST_ON_BAT=0

 # Minimize number of used CPU cores/hyper-threads under light load conditions
-SCHED_POWERSAVE_ON_AC=1
+SCHED_POWERSAVE_ON_AC=0
 SCHED_POWERSAVE_ON_BAT=1

 # Kernel NMI Watchdog:
@@ -88,19 +88,19 @@
 # Levels 1..127 may spin down the disk; 255 allowable on most drives.
 # Separate values for multiple devices with spaces.
 DISK_APM_LEVEL_ON_AC="254 254"
-DISK_APM_LEVEL_ON_BAT="254 254"
+DISK_APM_LEVEL_ON_BAT="128 128"

 # Hard disk spin down timeout:
 #   0:        spin down disabled
 #   1..240:   timeouts from 5s to 20min (in units of 5s)
 #   241..251: timeouts from 30min to 5.5 hours (in units of 30min)
 # See 'man hdparm' for details.
-DISK_SPINDOWN_TIMEOUT_ON_AC="242 242"
-DISK_SPINDOWN_TIMEOUT_ON_BAT="242 242"
+#DISK_SPINDOWN_TIMEOUT_ON_AC="0 0"
+#DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0"

 # Select IO scheduler for the disk devices: noop, deadline, cfq (Default: cfq);
 # Separate values for multiple devices with spaces.
-DISK_IOSCHED="cfq cfq"
+#DISK_IOSCHED="cfq cfq"

 # SATA aggressive link power management (ALPM):
 #   min_power, medium_power, max_performance
@@ -241,14 +241,14 @@
 # - Separate multiple radio devices with spaces.

 # Radio devices to disable on connect.
-#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
-#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
-#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"
+DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
+DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
+DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"

 # Radio devices to enable on disconnect.
-#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
-#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
-#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""
+DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
+DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT="wwan"
+DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT="wifi"

 # Radio devices to enable/disable when docked.
 #DEVICES_TO_ENABLE_ON_DOCK=""

Can you test if the above changes improve your battery?

Also I should note that I'm always using the integrated intel GPU and not NVIDIA.

3
  • Tested the changes for about half and hour, power consumption at idle went down to about 9W, but the HDD started parking its head too frequently again, doing it every 4 seconds or so, going idle and immediately spinning back up again. Reverting only the 'DISK_APM_LEVEL_ON_BAT' option back to 254 and leaving all the rest like yours, stopped the HDD unloading, and the power at idle went back to about 10W.
    – Bryn
    Commented Dec 10, 2016 at 5:10
  • Can you put the DISK_APM_LEVEL_ON_BAT to 128 and play with the DISK_SPINDOWN_TIMEOUT_ON_BAT option? I cannot hear the disk in mine so I cannot tell any spin downs/ups but in any case my laptop is equiped with an SSD which is configured as a cache for the HDD :\
    – jsalatas
    Commented Dec 10, 2016 at 5:21
  • I fiddled with it for the last hour and a half, to no effect, but I think I found help over here: dominicm.com/… I'll try and see if it helps with the head parking.
    – Bryn
    Commented Dec 10, 2016 at 6:57

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .