Re: non-invariant tsc and cputicker

From: Andriy Gapon <avg_at_freebsd.org>
Date: Fri, 03 Dec 2010 20:14:45 +0200
on 03/12/2010 20:05 Jung-uk Kim said the following:
> On Friday 03 December 2010 12:26 pm, Andriy Gapon wrote:
>> FreeBSD uses cpu_ticks [function pointer] in a few places for a few
>> things like process CPU time accounting.  On x86 cpu_ticks always
>> points to rdtsc. If TSC is not invariant that leads to incorrect
>> accounting of "CPU ticks". The code pretends to try to handle
>> changing cpufreq levels, but does that incorrectly.
> 
> Arg...  Probably it is my fault. :-(
> 
>> I think that we could use a selected timecounter instead of "raw"
>> TSC if the latter is not invariant.  In this case cpu_ticks calls
>> would be slightly costlier, but always correct.
>>
>> The change is quite trivial:
>> http://people.freebsd.org/~avg/tsc-cputicker.diff
>>
>> What do you think?
> 
> Why don't we just fix it properly?

Patch? :-)
It seems that it is not too trivial to do and is prone to error accumulation given
how the ticks are added up.
Besides, why using a timecounter would not be a proper fix?

>> P.S. it's probably a good idea to merge i386 and amd64 tsc.c files
>> into a common x86 version, which would be the same as i386 version,
>> which seems to be generic enough.
> 
> Agreed.

Cool!

-- 
Andriy Gapon
Received on Fri Dec 03 2010 - 17:14:49 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:09 UTC