Re: non-invariant tsc and cputicker

From: David Xu <davidxu_at_freebsd.org>
Date: Sat, 04 Dec 2010 09:41:53 +0800
Jung-uk Kim wrote:
> On Friday 03 December 2010 01:14 pm, Andriy Gapon wrote:
>   
>> 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? :-)
>>     
>
> Attached.
>
>   
>> 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? 
>>     
>
> Well, it is not that simple, unfortunately.  Because init_TSC() is 
> called very early, your patch will select dummy timecounter as a CPU 
> ticker if my memory serves.  It is very hard to implement right on 
> x86 arch. :-(
>
>   
So many years, they can not make a simple counter work correctly,
I have seen so many failed technologies in the tech world, and will
still happen frequently.  :-)
Received on Sat Dec 04 2010 - 00:42:17 UTC

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