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

_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to