[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [rtl] Time Stamped Counter (TSC) jitter
Shel -- take a look at the paper by Fred Proctor. He address some
of this. Look at:
http://www.realtimelinuxfoundation.org/events/rtlws-2001/keynotes.html
This was a keynote at the recent Real-Time Linux Workshop.
Regards,
Chris
--------------------------------------------------------------------
Christopher D. Carothers
Assistant Professor
Department of Computer Science
Rensselaer Polytechnic Institute
110 8th Street
Troy, New York 12180-3590
e-mail: chrisc@cs.rpi.edu
web page: www.cs.rpi.edu/~chrisc
phone: (518) 276-2930
fax: (518) 276-4033
--------------------------------------------------------------------
On Tue, 11 Dec 2001, Sheldon Hoffman wrote:
> <To RTLinux rtl@rtlinux.org>
>
> Hello all,
>
> I would like to use the pentium processor's Time Stamped Counter (TSC)
> to measure elapsed time with an accuracy of <= 1 uSec. The TSC ticks
> at the frequency of the processor speed. So on a 333 Mhz computer,
> the TSC ticks at (approximately) 333,000,000 hz.
>
> In order to use the TSC as an elapsed clock, I need to determine the
> frequency (eg in Hz) of the TSC (ie many ticks the TSC makes per
> second).
>
> I tried using the pentium's 8254 counter, which ticks at 1,193,180
> Hz to determine the frequency of the TSC but I have encountered a
> problem: I am seeing a large variance in the TSC over multiple tests
> and I don't understand why it is occurring or what I can do to
> eliminate it.
>
> I was hoping someone might have some insights on how I can
> accurately determine the frequency of the TSC.
>
> As another note, I'm doing this testing under DOS (16-bit virtual
> 8086 mode) with interrupts disabled. I believe the same method
> should apply to RT Linux.
>
> I am seeing a TSC count of 331,113,713 +/- 35,000 TSC ticks per second
> on a 333 Mhz pentium II processor.
>
> This variance seems excessively large. Here are some other facts.
>
> 1. As recommended by Intel's IA-32 Intel Architecture Software
> Developer's Manual, I execute the CPUID instruction before executing
> RDTSC to serialize the TSC.
>
> 2. I use simple inp/outp instructions to retrieve counter 0 the 8254
> (port 0x40). This retrieves a 15 bit countdown value which ticks at
> a frequency of 1,193,180 Hz.
>
> Here's the algorithm I use to "calibrate" (determine the frequency of)
> the TSC:
>
> 1. synchronize the CPU with with the 8254 by reading it until it
> wraps (from x7FFF to 0).
>
> 2. execute CPUID and RDTSC. This is the starting TSC count.
>
> 3. Loop 36 times (36 =appx 1,193,180/32,768 = appx 1 seconds worth of
> 8254 ticks):
>
> A. wait for 8254 to wrap
> B. execute CPUID and RDTSC (and store in the final TSC count)
>
> 4. tscHz = (final TSC count - starting TSC count) * (36.0 * 32768.0 / 1193180.0);
>
> I know I'm pretty close to the right answer because when I run the
> program on various pentiums, I see approximately the correct TSC
> based on the Mhz of the processor. It is the magnitude of the
> variance (jitter?) that I don't understand.
>
> Any insights would be much appreciated! I'm happy to share code with anyone
> interested in this.
> -------------------------
> Shel Hoffman
>
> -------------------------
>
> -- [rtl] ---
> To unsubscribe:
> echo "unsubscribe rtl" | mail majordomo@rtlinux.org OR
> echo "unsubscribe rtl <Your_email>" | mail majordomo@rtlinux.org
> --
> For more information on Real-Time Linux see:
> http://www.rtlinux.org/
>
>