Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 04 Dec 2010 01:47:30 +0200
From:      Andriy Gapon <avg@freebsd.org>
To:        Jung-uk Kim <jkim@freebsd.org>
Cc:        freebsd-current@freebsd.org
Subject:   Re: non-invariant tsc and cputicker
Message-ID:  <4CF98192.3050909@freebsd.org>
In-Reply-To: <201012031504.02532.jkim@FreeBSD.org>
References:  <4CF92852.20705@freebsd.org> <201012031305.53750.jkim@FreeBSD.org> <4CF93395.3060601@freebsd.org> <201012031504.02532.jkim@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
on 03/12/2010 22:03 Jung-uk Kim said the following:
> 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.

I fail to see how this corrects the calculations (cpu tick accumulation) in
!invariant_tsc case.

>> 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. :-(

I don't think that init_TSC() is called earlier than the code that probes CPU
features.  After all, presence of TSC is another CPU feature.


-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4CF98192.3050909>