trinity-devel@lists.pearsoncomputing.net

Message: previous - next
Month: March 2014

Re: [trinity-devel] tdepowersave - found new race condition (that explains the constant 3-5%)

From: Slávek Banko <slavek.banko@...>
Date: Sun, 9 Mar 2014 02:05:25 +0100
On Sunday 09 of March 2014 00:31:20 François Andriot wrote:
> 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

Yes, that's exactly what I mentioned in other thread - mail 
http://trinity-devel.pearsoncomputing.net/?0::13193

For input event devices such periodic rescan now represent dbus call to check 
the status of switches. Find ways to solution listed as 1) would be good.

-- 
Slavek