Reduced disk and network IO
The netdevstat and diskdevstat are two systemtap tools that allow the user to collect detailed information about network and disk activity of all applications running on a system. These two tools were inspired by powertop, which shows number of wakeups for every application per second.
The basic idea is to collect statistic about the running applications in a form that allows a user to identify power greedy applications. That means f.e. instead of doing fewer and bigger IO operations they do more and smaller ones. Current monitoring tools show typically only the transfer speeds, which isn't very meaningful in that context.
Both utilities are part of tuned-utils package. They can be executed as
diskdevstat [Update interval] [Total duration] [Display histogram at the end]
netdevstat [Update interval] [Total duration] [Display histogram at the end]
Quick explanation of each column:
PID: Process ID of the application UID: User ID under which the applications is running DEV: Device on which the IO took place WRITE_CNT: Total number of write operations WRITE_MIN: Lowest time in seconds for 2 consecutive writes WRITE_MAX: Largest time in seconds for 2 consecutive writes WRITE_AVG: Average time in seconds for 2 consecutive writes READ_CNT: Total number of read operations READ_MIN: Lowest time in seconds for 2 consecutive reads READ_MAX: Largest time in seconds for 2 consecutive reads READ_AVG: Average time in seconds for 2 consecutive reads COMMAND: Name of the process
Example of measurement with chosen worst doing applications:
Those are the 3 applications that have a WRITE_CNT > 0, meaning they performed some form of write during the measurement. Of those, plasma was the worst offender by a large amount. For one in total number of writes and of course the average time between writes was also the lowest. This would be the best candidate to investigate if you're concerned about power inefficient applications.
[Tracker bug for over-eager apps that won't let disks spin down] were partially fixed.
It was created a review of all initscripts because if user's would switch off unused services, they can reduce power consumption and make their boot faster. During the review was removed service bluetooth which is now switching on/off on demand that means every time the hardware is available. The other services couldn't be rewritten or removed. (Link to work with services in Deployment Guide)
is a dynamic adaptive system tuning daemon that tunes system settings dynamically depending on usage. It does so by monitoring the usage of several system components periodically. Based on that information components will be put into lower or higher power saving modes to adapt to the current usage. Devices could be handled by plugins which are currently providing ethernet network, ATA harddisk devices and cpu tuning.
Tuned can be executed as a service:
- service tuned start
After installation it is added into services started after boot. Tuned can run as a daemon, which is the default setting.
- tuned -d
Tuned has optional path to configure file. The default is /etc/tuned.conf but user can change it by:
- tuned -c /mypath/myconfigfile.conf
Tuned daemon contains two main parts:
- scripts for observing state of hardware/resources which is processed by plugins
- ktune for setting up sysctl and other values provided by kernel
With the default setting are switched on all plugins namely:
- net - switch ethernet card to slower transmission rate
- cpu - set value of DMA latency
- disk - lower/higher spindown value of disk (only for ATA)
Tuned contains few profiles for different use-cases. They can be set or changed by tuned-adm utility.
is providing various profiles. At the moment (2009 October 21) exist these:
used as default after starting tuned service.
is proper profile for a desktop.
is obviously laptop on adapter. It extended the battery live especially, when user wouldn't use laptop at battery.
is obviously a laptop on battery in power-saving mode.
is proper profile for a server without any specifically defined functionality.
are special profiles for servers aimed to specific function.
doesn't use tuned but it used various sysctl values to maximalize time when the disk is idle.
and now pick one of them
tuned-adm profile picked-profile
Each profile is using ktune for setting various sysctl values which assure optimal time for writing on disk etc. Tuned is setting automatically disk, net and cpu settings. Details about possible values and enhancement could be found [here].
Scomes is a part of tuned-utils utilities which is based on SystemTap script for watching system resources.
SystemTap scripts need kernel-debuginfo matching to actual kernel. A current kernel version could be obtain by:
Debuginfo will be installed by:
A binary must have unique name or there are no other binaries with same name on the system. Execution of scomes:
scomes.stp -c "<binary> [<binary arg> ...]" <timer>
binary [binary args ...] - executable file, arguments are optional
timer - in seconds displays only final result when timer is 0. In other cases it displays actual output every N seconds.
The measurement can take a while. It is possible to use timer for actual result. SystemTap executes scripts under root or it is needed add current user into group systemtap. Since SystemTap v1.0 should be possible running scripts as a normal user.
Example output of the measurement:
# ./scomes.stp -c "/bin/sleep 4" 2 Collecting data... ----------------------------------- Monitored execname: sleep Number of syscalls: 59 Kernel/Userspace ticks: 3/1 (4) Read/Written bytes: 3620/0 (3620) Transmitted/Received bytes: 0/0 (0) Polling syscalls: 0 SCORE: 36205 ----------------------------------- Monitored execname: sleep Number of syscalls: 59 Kernel/Userspace ticks: 3/1 (4) Read/Written bytes: 3620/0 (3620) Transmitted/Received bytes: 0/0 (0) Polling syscalls: 0 SCORE: 36205 ----------------------------------- LAST RESULTS: ----------------------------------- Monitored execname: sleep Number of syscalls: 63 Kernel/Userspace ticks: 4/1 (5) Read/Written bytes: 3620/0 (3620) Transmitted/Received bytes: 0/0 (0) Polling syscalls: 1 SCORE: 36206 ----------------------------------- QUITTING -----------------------------------
- Monitored execname
- name of the executable file (passed as a command-line argument)
- Number of syscalls
- number of all syscalls performed by the binary
- Kernel/Userspace ticks
- count of processor ticks which binary uses in the kernel or in userspace respectively (kticks, uticks variables)
- Read/Written bytes
- sum of read and written bytes from the executed file (reads, writes variables)
- Transmitted/Received bytes
- sum of read and written bytes from the network (ifxmit, ifrecv variables)
- Polling syscalls
- polling syscalls used by executable file which usually consume most of resources (poll, select, epoll, itimer, futex, nanosleep, signal)
- the final score is estimated as SCORE = kticks + 2*uticks + 10*(reads+writes) + ifxmit + ifrecv
is a linux tool which can find programmes that consume resources even if the computer is idle. The most resource consuming had been kernel but since version 2.6.21 is kernel tickless. PowerTOP is using various information provided by system. It combines all information and produce list of programmes which are more power hungry.
Basic goals of PowerTOP are:
- offer tips for low power consumption
- test application and their behaviour
- locate problematic applications
Introduction to statistics
States of CPU
C-states are idle states, P-states are operational. C0 means busy state of CPU, the other C-states mean CPU is idle. The higher percentage in C3 or C4 means that CPU is really saving some energy but it also means longer time when it comes back to C0 and executing instructions.
P-state shows the operational state, or the frequency the CPU is running at most of the time. Therefore if laptop is using low power profile and operating on battery, then OS will lower the C0 frequency and voltage which means CPU will be in higher P-state. Lower frequency means lower power. Reducing the voltage decreases the leakage current from the CPU's transistors, making the processor more energy efficient resulting in further gains.
Wakeups per second
should be small as much as possible. The wakeup is matching with C-state results.
display information collected from ACPI in case laptop is on battery. It can measure how much time on battery is left.
Top causes for wakeups
In this part could be identified most power hungry application. Many application has been fixed to be more power friendly. As can be seen on the picture there are mostly hardware interrupts but also some user-space application. Example of dealing with problems:
- amarok - it can be used more power friendly player e.g. audacious is the best according power consumption
- npviewer.bin - flash application can be very power hungry
- firefox - it might be fixed in future releases
- USB-devices - on picture it's mice. The best solution is aware of using all USB devices while saving the battery.
Quite often it can be seen these which are displayed with solution:
- Disable 'hal' from polling your cdrom - cd/dvdrom won't be looking for new disc
- Enable USB autosuspend - not using USB devices or removing them can help
- Disable or remove 'pcscd' from your system - the same as USB
These things could help but they are often part of tuning profiles which can set a computer in lower power consumption state e.g. using tuned.
Battery Life Toolkit provides workloads which can simulate task and measure power performance of system running on battery.
BLTK has two parts:
- framework - responsible for launching the workload, statistics and completing results.
- workload - launch defined workload
- idle - doing nothing for comparison with other profiles
- office - editing files in oowriter
- player - using mplayer
- reader - reading document in Firefox
Workloads: Idle for 2 minutes:
- bltk -I -T 120
- bltk -R -n 4
- SAL_USE_VCLPLUGIN=gen bltk -O -n 1
- bltk -P
1. Switch off all applications even in tray e.g. players. 2. Open only a terminal. 3. Run the command and remove adapter from laptop. 4. Statistics are usually stored in ~/.bltk directory.
It generates a lot of output files with detail of measurement but the most important is called stat.log which shows the power consumption of battery and CPUs.
Another command from bltk suite generate readable output.
- bltk -o
Power Managment tools
KDE Power Management
Where: System Settings -> Advanced -> Power Management
or from tray (plasmoid): PowerDevil
Settings and Profiles
First of all it is needed Let PowerDevil manage screen powersaving on. Then can be enabled other things. Lock screen on resume is safety feature, it will asked for a password after display goes to power saving mode. When Enable warning notifications are enabled then a user is noticed about changes related to power management. For every issue can be set in Configure Notification action e.g. play sound, when suspend will be done. Here can be also set waiting before suspend action.
There are pre-set profiles for every action in regard to usage or state of battery. Performance profile is most suitable for laptop on Adaptor or for desktop computer, but that doesn't mean they can't use power saving options. The other profiles should be specified by users for their needs.
Advanced Battery Settings
Here can be redefined levels of battery capacity. For example if the battery is broken or old, it could be better to move low level at higher percentage.
For every profile exists set of settings. Disable desktop effects is suggested for all profiles except Performance profile. Dim display when idle for more than depends on hardware because some displays dim automatically when they are not on adaptor. Display is consuming most of the power, so it's recommended set this option for all power-saving profiles. When the system is idle option can be used for locking the session, turning off screen, suspend etc. Although here can be defined actions for laptop lid closed or pressing sleep/power button. This feature is more user-friendly than to save power.
From power management point of view is better to use automatically standby, suspend or power off than screen-saver. Especially when is screen-savers based on e.g. OpenGL, then it's power hungry application. Brightness of screen can be hardware dependent and some screens are changing brightness automatically.
CPU and System
This part is fully dependent on hardware possibilities of a current computer. In case there exist more than one CPU, then it is possible to switch it off. This usually doesn't apply for two core CPUs. CPU frequency scaling policy offers various modes executed by (kernel) governor. Available governors are stored for appropriate cpu here:
- cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
The default values is ondemand governor which keeps the system’s speed at maximum unless it is pretty sure that the system is idle. Therefore this will be the mode that will save power with the least performance impact. On demand governor is "predicting" future load of CPUs, so it is not recommended to change the governor mode unless special behaviour of system is needed.
When loading profile execute executes a script that will be executed after switching to a current profile.
Display system capabilities from directory /proc in human readable format.
GNOME Power Manager
Tips & tricks
- switch to lightweight desktop Xfce?
- switch off all unused e.g USB devices