Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 03 Dec 2010 19:26:42 +0200
From:      Andriy Gapon <avg@freebsd.org>
To:        freebsd-current@freebsd.org
Subject:   non-invariant tsc and cputicker
Message-ID:  <4CF92852.20705@freebsd.org>

next in thread | raw e-mail | index | archive | help

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.

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?

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.

-- 
Andriy Gapon



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