[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#439024: apt-get: annoying 1000Hz polling (--> powertop)



Package: apt
Version: 0.7.6

Hello all,

after the apt-get line
Reading package lists... Done
it starts a 1000Hz(!) polling which is quite annoying since it is
clearly audible on my notebook (dynticks, HZ=300, 2.6.23-rc3) and
obviously causes many unneeded CPU wakeups, too (otherwise the system
wouldn't switch between idle/non-idle CPU load of the switching PSU so fast,
causing the audible zZzZzZzZZZttt).
This most likely is causing a performance drain, too, due to superfluous
scheduling.
It may be that this polling has been added recently since I don't
remember hearing it earlier (however OTOH HZ or dynticks changes may have
caused it to become recognizable on my setup).

strace -p shows:

nanosleep({0, 1000000}, NULL)           = 0
waitpid(3781, 0xbf9642dc, WNOHANG)      = 0
read(4, 0xbf96436d, 1)                  = -1 EAGAIN (Resource temporarily unavailable)
nanosleep({0, 1000000}, NULL)           = 0
waitpid(3781, 0xbf9642dc, WNOHANG)      = 0
read(4, 0xbf96436d, 1)                  = -1 EAGAIN (Resource temporarily unavailable)
nanosleep({0, 1000000}, NULL)           = 0
waitpid(3781, 0xbf9642dc, WNOHANG)      = 0
read(4, 0xbf96436d, 1)                  = -1 EAGAIN (Resource temporarily unavailable)
nanosleep({0, 1000000}, NULL)           = 0
waitpid(3781, 0xbf9642dc, WNOHANG)      = 0
read(4, 0xbf96436d, 1)                  = -1 EAGAIN (Resource temporarily unavailable)
nanosleep({0, 1000000}, NULL)           = 0
waitpid(3781, 0xbf9642dc, WNOHANG)      = 0
read(4, 0xbf96436d, 1)                  = -1 EAGAIN (Resource temporarily unavailable)
nanosleep({0, 1000000}, NULL)           = 0
waitpid(3781, 0xbf9642dc, WNOHANG)      = 0


lsof -p shows:
apt-get 3608 root    4r  FIFO    0,5           12961 pipe

so it seems as if apt-get does some weird polling on a pipe handle
instead of asynchronous event notification (e.g. via inotify or similar,
if possible) or blocking wait (select(), ...).
I'd hazard a guess that this is a mechanism to "wait" for the spawned
worker application to finish.

Would be nice to see this software bloat fixed.

Thanks,

Andreas Mohr



Reply to: