Wednesday, 2 October 2013

Improve Power Usage / Battery Life In Linux With TLP

Overview

Use this to improve your battery performance and to maintain temperature. So here is how to install and configure TLP:
 sudo add-apt-repository ppa:linrunner/tlp
 sudo apt-get update
 sudo apt-get install tlp tlp-rdw smartmontools ethtool
ThinkPads
 sudo apt-get install tp-smapi-dkms acpi-call-tools tlp tlp-rdw smartmontools ethtool
tlp-rdw – Radio Device Wizard - Need to enable/disable & Power saving (Wifi / Bluetooth )
smartmontools - needed by tlp-stat to display disk drive S.M.A.R.T. data
ethtool - needed to disable wake on lan
tp-smapi-dkms ThinkPad only, tp-smapi is needed for battery charge thresholds and ThinkPad specific status output of tlp-stat
acpi-call-tools ThinkPad only, acpi-call is needed for battery charge thresholds on Sandy Bridge and newer models

Configuration

Removing default Ubuntu cpu frequency config
 sudo update-rc.d -f ondemand remove 
TLP Developer
( This is only needed if the user decides to change the default governor. If a user issues the command without changing the TLP setting too, he ends up with "perfomance", which is quite bad for battery life.), Apply to section 3.) Processor and Frequency Scaling
The main config file of TLP is at /etc/default/tlp
  sudo gedit /etc/default/tlp

Parameters

  1. Parameters ending on _AC are effective with the power supply connected
  2. Parameters ending on _BAT are effective when running on battery
  3. Parameters containing blanks must be enclosed in double quotes like this: ""
  4. Some parameters are inactive by default; remove the leading '#' to activate

0.) General
TLP_ENABLE=1
Set to 0 to disable TLP (Reboot needed), It should be enabled so leave the default value
1.) File System
     DISK_IDLE_SECS_ON_AC=0
     DISK_IDLE_SECS_ON_BAT=2 
DISK_IDLE_SECS_ON_BAT=2 = You can either leave the default value (2) or you can edit it as 5, By default Ubuntu uses 5, its up to you, read the gives below help
 cat /usr/lib/pm-utils/power.d/laptop-mode
This controls how agressive the system is at trying to avoid writing to disk. The longer the disk is idle, the more power you can save.
This is only active on battery power, and it restores these values to kernel defaults when on AC power.
Defaults 5, which enables laptop mode and forces the system to wait 5 seconds whenever something asks to write to disk to flush out as much data as we can.
2.) Dirty page values
 MAX_LOST_WORK_SECS_ON_AC=15
 MAX_LOST_WORK_SECS_ON_BAT=60 
Leave the default value
Defaults 60, which means that the kernel will not start forcing process to write out file information that has been changed but not saved until 60% of usable system memory is filled with dirty information.
3.) Processor and Frequency Scaling
 CPU_SCALING_GOVERNOR_ON_AC=ondemand
 CPU_SCALING_GOVERNOR_ON_BAT=powersave
Remove the hash and edit it as conservative.
Its up to you what you want, you can also use ON_BAT=powersave
Select a cpu frequency scaling governor: ondemand/powersave/performance/conservative
Governor ??
The governor decides what frequency should be used.
Module Description:
ondemand        Dynamically switch between CPU(s) available if at 95% cpu load

performance     Run the cpu at max frequency

conservative    Dynamically switch between CPU(s) available if at 75% load

powersave       Run the cpu at the minimum frequency
TLP Developer
To use "conservative" over "powersave – especially on AC – should not be a general recommendation but only an option for hardware that produces excessive heat or fan noise.
4.) Min/Max frequency
 #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 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".
Hint: Parameters are disabled by default, remove the leading # to enable them, otherwise kernel default values are used.
5.) Turbo Boost
 CPU_BOOST_ON_AC=1
 CPU_BOOST_ON_BAT=0
Set the cpu "turbo boost" feature: 0=disable / 1=allow ,Requires an Intel Core i processor and kernel 3.7 or later.
Important: This may conflict with your distribution's governor settings, A value of 1 does not activate boosting, it just allows it
6.) Cpu Cores/Hyper-Threads
 SCHED_POWERSAVE_ON_AC=0
 SCHED_POWERSAVE_ON_BAT=1
Minimize number of used cpu cores/hyper-threads under light load conditions
7.) Kernel
 NMI_WATCHDOG=0
Activate kernel NMI watchdog timer (0 = disabled/save power, 1=enabled). A value of 1 is relevant for kernel debugging only.
8.) Hard disk advanced power management level
 DISK_APM_LEVEL_ON_AC="254 254"
 DISK_APM_LEVEL_ON_BAT="128 128"
Set the "Advanced Power Management Level". Possible values range between 1 and 255:
1 – max power saving / minimum performance 
Important: this setting may lead to increased disk drive wear and tear because of excessive read-write head unloading (recognizable from the clicking noises)
128 – compromise between power saving and wear (TLP standard setting on battery)

192 – prevents excessive head unloading of some HDDs

254 – minimum power saving / max performance (TLP standard setting on ac)

255 – disable APM (not supported by some disk models)
Different values for multiple disks are separated with blanks.
9.) Disk I/O Scheduler
 #DISK_IOSCHED="cfq cfq"
Select io scheduler for the disk devices: noop/deadline/cfq (Default: cfq) Separate values for multiple devices with spaces.
noop is often the best choice for memory-backed block devices (e.g. ramdisks) and other non-rotational media (flash) where trying to reschedule I/O is a waste of resources
deadline is a lightweight scheduler which tries to put a hard limit on latency
cfq tries to maintain system-wide fairness of I/O bandwidth
10.) SATA aggressive link power management (ALPM):
min_power/medium_power/max_performance
 SATA_LINKPWR_ON_AC=max_performance
 SATA_LINKPWR_ON_BAT=min_power
ALPM Aggressive Link Power Management (ALPM) is a mechanism where a SATA AHCI controller can put the SATA link that connects to the disk into a very low power mode during periods of zero I/O activity and into an active power state when work needs to be done. Tests show that this can save around 0.5-1.5 Watts of power on a typical system. ( For more check " Sources and additional help " )
11.) PCI Express Active State Power Management (PCIe ASPM):
( default/performance/powersave )
Hint: needs kernel boot option pcie_aspm=force on some machines
 PCIE_ASPM_ON_AC=performance
 PCIE_ASPM_ON_BAT=powersave
12.) 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, not with fglrx driver!)
 #RADEON_POWER_PROFILE_ON_AC=high
 #RADEON_POWER_PROFILE_ON_BAT=low
13.) WiFi power saving mode
1=disable/5=enable
(Linux 2.6.32 and later, some adapters only!)
 WIFI_PWR_ON_AC=1
 WIFI_PWR_ON_BAT=5
14.) Disable wake on lan
Y = Yes , N = No
 WOL_DISABLE=Y
15.) Audio power saving for Intel HDA
Enable audio power saving for Intel HDA, AC97 devices (timeout in secs). A value of 0 disables / >=1 enables power save.
 SOUND_POWER_SAVE=1
Disable controller too (HDA only): Y/N
 SOUND_POWER_SAVE_CONTROLLER=Y
16.) Power off optical drive in UltraBay >> (ThinkPads only)
Set to 1 to power off optical drive in UltraBay (ThinkPads only), 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 hard disk is never powered off.
  BAY_POWEROFF_ON_BAT=1
Optical drive device to power off (default sr0)
 BAY_DEVICE="sr0"
17.) Runtime Power Management for pci(e) bus devices
  RUNTIME_PM_ON_AC=on
  RUNTIME_PM_ON_BAT=auto
Runtime PM for all pci(e) bus devices
 RUNTIME_PM_ALL=1
Runtime PM for all pci(e) bus devices: 0=disable / 1=enable, Warning: experimental option, could cause system instabilities
Some times my usb mouse dongle didn't work when i plug it in usb 3 port, work fine when i plug it in usb 2 port, and all my usb 3 devices are working properly no issue.
18.) Usb autosuspend
Set to 0 to disable/1 to enable usb autosuspend feature
 USB_AUTOSUSPEND=1
19.) System Start and Shutdown
 RESTORE_DEVICE_STATE_ON_STARTUP=0
Restores radio device state (builtin bluetooth, wifi, wwan) from previous shutdown on system startup:
0 – disable, 1 – enable
 DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan" 
Disables builtin radio devices upon system start:
bluetooth
wifi – Wireless LAN
wwan – Wireless Wide Area Network (UMTS)
Multiple devices are separated with blanks.
I have an error that my Blue tooth device is not Disabled on start up, so if you face this problem just do the following config
 sudo nano /etc/rc.local 
And add the following line before exit 0
 rfkill block bluetooth
Save & Exit & Reboot

Working with TLP

After installation TLP will be automatically activated upon system start.
To start it immediately without reboot or to apply changed settings use:
  sudo tlp start
Use the tlp-stat terminal command to check if TLP is working properly
 sudo tlp-stat
Check You system temperature
 sudo tlp-stat -t
Show battery information only:
 sudo tlp-stat -b
 sudo tlp-stat --battery 
Show configuration only:
tlp-stat -c
tlp-stat --config
Show radio devices switch state only:
tlp-stat -r
tlp-stat --rfkill
Show temperatures and fan speed only:
tlp-stat -t 
Apply Battery Settings (ignoring the actual power source):
sudo tlp bat
Apply AC Settings (ignoring the actual power source):
sudo tlp ac
You can check Which I/O you are using.
 sudo tlp-stat  # Check the section +++ Storage Devices

Trace Mode
To examine suspected problems in TLP more closely, activate trace mode in /etc/default/tlp:
 TLP_DEBUG="lock nm path pm rf run sysfs udev usb" 
Add above mentioned line in the end /etc/default/tlp , The accumulated trace data may be read at any time with
 tlp-stat -T 
Or
 grep "tlp" /var/log/debug 
In case the trace output is missing, you have to modify your rsyslogd configuration. Create the file/etc/rsyslog.d/90-debug.conf containing
 *.=debug;\
 auth,authpriv.none;\
 news.none;mail.none -/var/log/debug
And restart the daemon
 sudo /etc/init.d/rsyslog restart 

Sources and additional help


Optional tweaks


Tweak your CPU frequency with indicator-cpufreq

Installation
indicator-cpufreq will help you change your CPU frequency on the go:
 sudo apt-get install indicator-cpufreq 
Go to Dash > search for Startup > edit indicator-cpufreq add -f or copy paste the following command:
 indicator-cpufreq -f 
enter image description here
With the indicator you will be able to monitor your current CPU frequency & can change CPU frequency
Changing CPU frequency
Click on indicator
enter image description here

PowerSavingTweaks for Intel Graphics

Configuration
 sudo nano /etc/default/grub
change:
 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 
to:
 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.lvds_downclock=1 drm.vblankoffdelay=1"
and run:
 sudo update-grub
Then Reboot to apply the changes. You won't need other tweaks as they are already added by defaults.

No comments:

Post a Comment