New time code miscalculates cpu usage
Sergei Shtylyov
sshtylyov at ru.mvista.com
Thu Oct 25 22:46:25 EST 2007
Hello.
Benjamin Herrenschmidt wrote:
>>>Not sure when this started happening, but I wanted to report it. I'll
>>>start bisecting in a day or two if noone else has gotten around to
>>>looking at it:
>>>$ echo "int main(void) { while(1); }" > test.c ; gcc test.c
>>>$ time ./a.out & sleep 2 ; killall a.out
>>>real 0m2.008s
>>>user 0m4.014s
>>>sys 0m0.002s
>>>Seen on POWER5 and PA6T, haven't tried anything else yet.
>> I'm not surprised -- the kernel accounts twice for each tick.
> Your input would be much more valuable if you actually pointed out where
> that happens and why since you seem to know it.
I've already pointed out the reason, yet it won't hurt to repeat indeed.
timer_interrupt() calls both account_process_time() and the hrtimers event
handler which leads to:
- if determenistic accounting is off, account_process_time() is the same as
update_process_times() which gets also calleed by hrtimers via the event
handler, so we get each tick accounted for twice;
- if determenistic accounting is on, then timer_interrupt() calls
account_process_time() and update_process_times() is still called by
hrtimers, so each tick's gets accounted for userspace twice...
> Ben.
WBR, Sergei
More information about the Linuxppc-dev
mailing list