Le 09/03/2014 00:03, David C. Rankin a écrit :
Tim, All,
In working though testing, I used 'tdedebugdialog --fullmode' and set the '0 generic' output to file kdebug.dbg (the default name) for all 4 (information, warning, error, etc). That file was over 46 Megabytes and 431,000 lines repeating tdepowersave activity in a 12 hour period. tdepowersave is constantly churning away in the following loop (2 examples):
tdepowersave: unmonitored device changed: /sys/devices/ tdepowersave: unmonitored device changed: /sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input4/event3//dev/input/event3 tdepowersave: unmonitored device changed: /sys/devices/LNXSYSTM:00/LNXSLPBN:00/input/input5/event4//dev/input/event4 tdepowersave: unmonitored device changed: /sys/devices/pci0000:00/0000:00:03.0/net/enp0s3/enp0s3 tdepowersave: unmonitored device changed: /sys/devices/pci0000:00/0000:00:04.0/input/input3/event2//dev/input/event2 tdepowersave: unmonitored device changed: /sys/devices/pci0000:00/0000:00:06.0/usb2/2-1/2-1:1.0/input/input2/event1//dev/input/event1 tdepowersave: unmonitored device changed: /sys/devices/platform/i8042/serio0/input/input0/event0//dev/input/event0 tdepowersave: unmonitored device changed: /sys/devices/platform/i8042/serio1/input/input7/event6//dev/input/event6 tdepowersave: unmonitored device changed: /sys/devices/platform/pcspkr/input/input6/event5//dev/input/event5 tdepowersave: unmonitored device changed: /sys/devices/ tdepowersave: unmonitored device changed: /sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input4/event3//dev/input/event3 tdepowersave: unmonitored device changed: /sys/devices/LNXSYSTM:00/LNXSLPBN:00/input/input5/event4//dev/input/event4 tdepowersave: unmonitored device changed: /sys/devices/pci0000:00/0000:00:03.0/net/enp0s3/enp0s3 tdepowersave: unmonitored device changed: /sys/devices/pci0000:00/0000:00:04.0/input/input3/event2//dev/input/event2 tdepowersave: unmonitored device changed: /sys/devices/pci0000:00/0000:00:06.0/usb2/2-1/2-1:1.0/input/input2/event1//dev/input/event1 tdepowersave: unmonitored device changed: /sys/devices/platform/i8042/serio0/input/input0/event0//dev/input/event0 tdepowersave: unmonitored device changed: /sys/devices/platform/i8042/serio1/input/input7/event6//dev/input/event6 tdepowersave: unmonitored device changed: /sys/devices/platform/pcspkr/input/input6/event5//dev/input/event5
This is with the tde_dbus_hardwarecontrol happily set and not doing its repeating loop. Why is tdepowersave changing unmonitored devices multiple times per second? Is this just it spitting out what activity it read for various hardware devices (net, mouse, speaker)?? My mouse is usb, so I can see input there (not while I'm sleeping though), but why would any of the serial devices every change - they are not used. This looks like a true race condition, because none of my devices are changing, and they are certainly not changing multiple times every second while I'm asleep :)
Hello,
I've been instigating the CPU wasting issue in tdepowersave as well. I've found out that the CPU cycles are mostly eaten by the TDEHW library, not in tdepowersave itself.
See: tdelibs/tdecore/tdehw/tdehardwaredevice.cpp
At line 244 and 246, you can see that there are 2 timers that are initialized.
The 1st timer is used to poll for CPU-related changes every 500ms. It triggers a function line 409: void TDEHardwareDevices::processModifiedCPUs()
The 2nd timer ise used to poll other-devices changes every 1000ms. It triggers a function line 740: void TDEHardwareDevices::processStatelessDevices()
After tracing, it looks like the 2nd timer is the most CPU-eating. It basically rescans all hardware devices of the computer !
On the other side, as you have found, tdepowersave receives notification for every device in the system, and must filter the interesting one (cpu-related or battery-related).
I think there are 2 different solutions here: 1) find a way to remove the periodic polling and use notifications from kernel instead (but how ?) 2) optimize the polling code so that it eats less CPU
Francois