Use a recent distribution

Linux is a fast moving project, with very fast evolving components. If you're using an older distribution, older than 4 to 6 months (and anything with "Enterprise" in the name is by definition old), please consider going to a newer distribution. Reporting issues on older distributions is going to be frustrating to a lot of people, since the issue is likely to have been fixed more than 6 months ago... Please be considerate of the developers of projects and use a recent codebase and avoid bugging them about issues they solved long ago.

Known issues, tips and tricks

Xorg | i915@pci | kernel | GAIM | Firefox | Evolution | dhcdbd | ntp | S06cpuspeed | ipw2100 | acpi (ibm_acpi) | mixer_applet2 | appletouch | ipw3945 | knotify | hdaps | gvim | gksu | timidity | mpd | xterm | tpb | forcedeth | sealert

Xorg shows up high on the hall-of-shame list

Xorg generally does work on behalf of other programs, so if Xorg shows up high on the list, there are other programs that make it do work on your system. In our experiments with an "ultra idle" Linux graphical desktop, Xorg is indeed not showing any activity.

Known candidates for things that keep Xorg having activity are gnome-power-manager and gaim, but sometimes it's as simple as having a blinking cursor in a terminal or an animation on a website that keeps Xorg busy.

A good thing to try is

killall gnome-power-manager
to see if it is indeed gnome-power-manager that is constantly having Xorg do work.

<interrupt> i915@pci

The Intel graphics driver used to have a bug where it set up the hardware to generate an interrupt (called VBLANK) each time the screen finished refreshing (typically at 60Hz or 72Hz). In normal 2D mode, this interrupt isn't actually used. PowerTOP unveiled this bug and the current Intel graphics driver no longer has this behavior.

If you're in 3D mode (for example because you are using a 3D desktop), this interrupt is currently still needed for OpenGL compatibility. We're investigating ways to mitigate this, but this is going to be a fairly invasive fix. We'll update this webpage with more information once we have this solved.

If you do not need 3D at all, you can disable DRI altogether, which will kill 3D, but also most i915-related interrupts. Simply add

  
    Option "NoDRI"

to the "Device" section in /etc/X11/xorg.conf.

The Linux Kernel

The Linux kernel has several known issues with too-frequent timers. We are maintaining a patch against the 2.6 kernel to fix or work around several of these issues.

You can download the patch for the 2.6.21 kernel here; Josh Triplett has contributed a port of this patch to 2.6.22-rc1.

A patch to force-enable HPETs can be downloaded here.

A patch from Venki (ported to 2.6.22-rc6 by George Wu) to enable C3 on some laptops where Linux doesn't use C3 can be downloaded here.

Firefox

While there are many things that can keep the Firefox browser active, such as animations in websites you are looking at, Firefox also had a few things that would keep Firefox active even when looking at a blank page. We've fixed two of the most visible bugs in this space, and are collecting more fixes over time.

Mike Hommey has filed a cleaner fix for these in the Firefox bugzilla as bug 380558.

You can download Mike's Firefox 2.0 patchkit here.

GAIM / Pidgin

The Pidgin (GAIM) instant messaging client checks every 5 seconds if you have been idle more than 10 minutes, to mark you away in the IM networks you're connected to. In addition to this, it will also ask the X server every 5 seconds if the X server supports the X screensaver extension.... the X server either supports or doesn't support this, this isn't changing after starting the application.

We've created a patch to GAIM to fix these 2 issues, and Georgy Berdyshev has ported this to the latest Pidgin release. You can download this patch here.

The Pidgin developers have also worked with us and integrated this functionality in the now released version 2.0.1, if you're using this version you don't need a patch anymore.. way to go!

Evolution

The Evolution email client has a 10Hz timer to process one of it's internal event queues. Most of the time, there is nothing to do, the event queue is empty. We've created a patch for Evolution to only use the timer when there are actual events to be processed.

You can download the patch for evolution 2.10 here.

dhcdbd

dhcdbd is a program that connects the DHCP client of the OS to the DBUS gnome program. dhcdbd implements it's own defered event mechanism and uses high frequency polling to handle these events, rather than sleeping until the first planned event happens.

Keith Packard has developed a patch to fix this issue; you can download this patch here.

ntp

By default, the ntp time synchronization daemon will wake up once per second, and will make the kernel do work on it's behalf even more. Red Hat has created a patch to ntp to fix this issue and ships it in their rawhide and FC7 ntp packages. You can download this patch from the Fedora cvs server.

S06cpuspeed

The kernels ondemand CPU frequency management function currently has a high-frequency timer that samples to see if the CPU is idle. Intel fixed this and the patches to the kernel to effectively remove this timer are included in Linus' tree as of 2.6.22-rc1.

However, if you don't want to rebase to that kernel, you can also reduce the frequency of this timer from a command prompt with the following command:

cd /sys/devices/system/cpu/cpu0/cpufreq
cat ondemand/sampling_rate_max > ondemand/sampling_rate

ipw2100

Matthew Garrett has provided a patch to power down the ipw2100 wireless driver when the hardware isn't in use.

ibm_acpi

The ibm_acpi kernel module seems to create a really high number/frequency of ACPI interrupts, which will shorten your battery life a lot. We've not diagnosed this a lot yet, but at this point it's worth trying to unload this kernel module from your kernel.

mixer_applet2

The gnome mixer applet (the volume settings icon on the top menu bar) used to poll at a very high frequency to see if the volume has changed (so that it would update it's icon). The good news is that ALSA has a nice notification API to notify applications on volume changes.

Patches to implement this are in the following 2 gnome bugzillas:
http://bugzilla.gnome.org/show_bug.cgi?id=152864
http://bugzilla.gnome.org/show_bug.cgi?id=370937

appletouch

Matthew Garrett has provided a patch to the apple macbook touchpad driver to stop it from doing hundreds of wakeups per second.

ipw3945 and ipw2200 power save mode

(this tip is contributed by Steinar H. Gunderson)
There is currently no userspace support for enabling the power saving functionality of ipw3945. The driver doesn't support the standard "iwconfig ethX power" interface, but you can turn down the power usage with:

iwpriv eth2 set_power 1
which seems to save almost 100 mA in idle state over the default setting. The value has the following meaning
Power save level: 5 (Timeout 25ms, Period 1000ms)
Power save level: 1 (Timeout 350ms, Period 400ms)
A setting of 5 will save you more power (at the expense of performance).

In many networks, you'll see about 10 wakeups per second due to the wireless router's Beacon Internal of 100ms. Many AP's allow customization of that interval to 1000ms; this will bring the number of ipw interrupts down to 1/s.

A beacon is a packet broadcast by the Router to synchronize the wireless network. We did not observe any performance degradation because of this change.

knotify

The KDE knotify application also shows high levels of wakeups; Matthias Kretz has posted a detailed analysis on his blog.

You can get a patch for this from there, or you can download a mirrored copy here.

hdaps

Matthew Garrett also provides a patch to the kernel hdaps driver to not fire interrupts unless you're actively using the functionality.

gvim

(Suggestion contributed by Adrian Yee)
The gvim program has a blinking cursor which wakes up things regularly. You can fix this by putting

let &guicursor = &guicursor . ",a:blinkon0"
into your .gvimrc file.

gksu

Frank Ursel has reported that the gksu program causes almost 1000 wakeups/second for him, which is costing him approximately half an hour of battery life. No fix is known yet.

Initial investigation shows that gksu has a 100 microsecond polling loop in it's main program, and even though the kernel rounds this up to a 1 millisecond loop most of the time, this is obviously preventing the CPU from reaching power saving modes..

timidity

Matheus Izvekov reports that the timidity MIDI sound player shows 100 wakeups per second when idle. We're investigating why this is now.

mpd

Matheus Izvekov reports that the mpd media player wakes up 100 times per second once the first song is played, even when no song is playing.

Alexander Trueman has contacted us to mention that the he analyzed and fixed this behavior in the SVN version of mpd. He mentions that his fix will go into the next release.

xterm

xterms are waking up once per second when totally idle. It seems the periodic idle wakeups are due to xterm checking for session management events. Adding the +sm option, or setting the resource sessionMgt to false, stops the periodic tick.

tpb

tpb (Thinkpad laptop utility) is currently polling nvram for changes every 200 microseconds. The polling rate is configurable by setting POLLTIME in the /etc/tpbrc file but increasing it does lead to some events not getting caught anymore.
Several Thinkpad models will also generate events for these keys so polling wouldn't be needed on these models.

forcedeth

There is an issue with the forcedeth driver in the kernel; there is an interrupt generated 100 times per second to work around a bug on certain hardware that forcedeth handles. Detailed description in a comment in drivers/net/forcedeth.c.

sealert

The sealert daemon in Fedora 7 wakes up 10 times per second due to a bug in how the python code daemonizes itself. This issue is filed in the Red Hat bugzilla as bug 239893.


 About | ISN | Intel is a trademark of Intel Corporation in the U.S. and other countries. | * Other names / brands may be claimed as the property of others