Bug 313381 - wpa_supplicant wakes up the cpu
wpa_supplicant wakes up the cpu
Product: Fedora
Classification: Fedora
Component: wpa_supplicant (Show other bugs)
All Linux
low Severity low
: ---
: ---
Assigned To: Dan Williams
Fedora Extras Quality Assurance
Depends On:
Blocks: wakeup
  Show dependency treegraph
Reported: 2007-09-30 20:01 EDT by William Lovaton
Modified: 2008-03-26 10:05 EDT (History)
2 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2008-03-26 10:05:11 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)
Lightly tested fix against 0.5.7 (4.35 KB, patch)
2007-10-09 14:38 EDT, Alan Jenkins
no flags Details | Diff
Slightly more tested fix (2.77 KB, patch)
2007-10-09 17:17 EDT, Alan Jenkins
no flags Details | Diff

  None (edit)
Description William Lovaton 2007-09-30 20:01:29 EDT
According to powertop wpa_supplicant is waking up the cpu 1.5 times per second:

Wakeups-from-idle per second : 15,9     interval: 15,0s
Top causes for wakeups:
  27,3% (  2,0)     <kernel core> : clocksource_register (clocksource_watchdog) 
  20,0% (  1,5)    wpa_supplicant : schedule_timeout (process_timeout) 
   7,3% (  0,5)    gnome-terminal : schedule_timeout (process_timeout) 
   3,6% (  0,3)   <kernel module> : neigh_table_init_no_netlink
   3,6% (  0,3)     <kernel core> : neigh_table_init_no_netlink
   3,6% (  0,3)          nautilus : schedule_timeout (process_timeout) 
   3,6% (  0,3)      avahi-daemon : schedule_timeout (process_timeout) 
   2,7% (  0,2)                 X : do_setitimer (it_real_fn) 
   2,7% (  0,2)             gedit : schedule_timeout (process_timeout) 
   2,7% (  0,2)    mapping-daemon : schedule_timeout (process_timeout) 
   2,7% (  0,2)    NetworkManager : __netdev_watchdog_up (dev_watchdog) 
   2,7% (  0,2)              init : schedule_timeout (process_timeout) 
   2,7% (  0,2)          sendmail : schedule_timeout (process_timeout) 
   2,7% (  0,2)       gnome-panel : schedule_timeout (process_timeout) 
   1,8% (  0,1)   gnome-power-man : schedule_timeout (process_timeout) 

As shown above, besides the kernel, wpa_supplicant is the only one waking up the
cpu more than one time per second running my Gnome desktop on an updated Rawhide
system as of today.

Packages versions are:

Is there something that can be done to solve this?
Comment 1 Alan Jenkins 2007-10-09 14:38:57 EDT
Created attachment 221641 [details]
Lightly tested fix against 0.5.7

I also see it, though at 1.0 wakeups/sec.  I tried to fix it but the source is 

hard to understand :-(.  It probably wouldn't be too hard to find where it 
says "1 second", change it to "5 seconds" and see if it still works.

There's no fundamentally good reason for it to wake up - if you strace the 
daemon you'll see the only system call it makes is the select() call that it 
sleeps on.  I'm sure it's not polling information from the kernel, just doing 
some internal book-keeping.

Patch Works For Me (tm).  Might eat children, who knows, but should at least 
point out the problem.

Warning: After testing this patch my machine went up to 320 wakeups/s with no
reason shown on powertop.  I've not experienced this before and it could be
connected to my patch.
Comment 2 Dan Williams 2007-10-09 16:19:54 EDT
Alan; any chance you could push the patch to the hostap lists?  http://w1.fi is
the site; if you don't want to I could probably try to push it up.
Comment 3 Alan Jenkins 2007-10-09 17:17:24 EDT
Created attachment 221841 [details]
Slightly more tested fix

The previous one only stopped wpa_supplicant showing up on powertop because it
turned it into a busy loop :-).

This one is slightly less radical in it's aim.	It still uses a regular timer
tick, but it shuts it down once no timers are active.  On my setup, this means
wpa_supplicant stops showing up about 15 seconds after it's started.

The obstacle to removing the regular timer tick and only waking up when an
individual timer expires is that timers can be adjusted.  If a timer is enabled

while a different timer has yet to expire, you have to work out how long is
left on the existing timer, in order to find which timer will expire first.  If

you rely on the system clock, "date -s" will cause problems.  The only widely
available *monotonic* clock appears to be times(2).
Comment 4 Alan Jenkins 2007-10-09 17:21:42 EDT
Dan: I'm on it.  I added a bug there in parallel with posting on this one.  
I've still got to rebase it off their current version, then I won't mind 
squawking on the ML if they don't pick up the bug.
Comment 5 Alan Jenkins 2008-01-12 15:24:27 EST
OK, they've implemented this now (my patch wasn't perfect and they re-wrote 
it).  Unfortunately their Bugzilla is down right now, but if you pull the 
latest from their GIT repo and use that, the wakeups should be gone.


commit: 0ac3d3876ced310e45cc68e02d9a9bebe283dfbd

Comment 6 Christopher Aillon 2008-03-26 03:21:50 EDT
This should be fixed in rawhide since we're using a dev release with your
changes, right?
Comment 7 Dan Williams 2008-03-26 10:05:11 EDT
yup, we're using 0.6.3 from early march

Note You need to log in before you can comment on or make changes to this bug.