Re: test time-warps [was: Re: 2.6.14-rt13]

From: john stultz
Date: Mon Nov 21 2005 - 18:41:19 EST


On Mon, 2005-11-21 at 23:19 +0100, Ingo Molnar wrote:
> * Fernando Lopez-Lezcano <nando@xxxxxxxxxxxxxxxxxx> wrote:
>
> > On Tue, 2005-11-15 at 10:08 +0100, Ingo Molnar wrote:
> > > i have released the 2.6.14-rt13 tree, which can be downloaded from the
> > > usual place:
> > >
> > > http://redhat.com/~mingo/realtime-preempt/
> > >
> > > lots of fixes in this release affecting all supported architectures, all
> > > across the board. Big MIPS update from John Cooper.
> >
> > Can someone tell me if 2.6.14-rt13 is supposed to be fixed re: the
> > problems I was having with random screensaver triggering and keyboard
> > repeats?
> >
> > It is apparently not fixed.
> >
> > I just had a short burst of key repeats and saw one random screen
> > blank. Right now everything seems normal but I was not allucinating
> > :-)
>
> is this on the dual-core X2 box, running 32-bit code? Did it happen with
> idle=poll? Without idle=poll the TSCs run apart and a number of
> artifacts may happen. With idle=poll specified the TSC _should_ be fully
> synchronized.
>
> To make sure could you run the attached time-warp-test utility i wrote
> today? Compile it with:
>
> gcc -Wall -O2 -o time-warp-test time-warp-test.c
>
> it detects and reports time-warps (and does a maximum search for them
> over time, that way you can see systematic drifts too). (It auto-detects
> the # of CPUs and runs the appropriate number of tasks.)
>
> running this tool on a X2 with idle=poll and an -rt kernel should give a
> silent test-output.
>
> running a vanilla kernel should give TSC level time warps:
>
> #CPUs: 2
> running 2 tasks to check for time-warps.
> warp .. -1 cycles, ... 00000277ed9520c6 -> 00000277ed9520c5 ?
> warp .. -18 cycles, ... 00000277ed97ac77 -> 00000277ed97ac65 ?
> warp .. -19 cycles, ... 00000277edaedd54 -> 00000277edaedd41 ?
> warp .. -84 cycles, ... 00000277ede0558a -> 00000277ede05536 ?
> warp .. -97 cycles, ... 00000278035328a5 -> 0000027803532844 ?
> warp .. -224 cycles, ... 000002781ed2db04 -> 000002781ed2da24 ?
>
> (because the vanilla kernel doesnt do TSC synchronization accurately)
>
> running it without idle=poll should give some really big time warps:
>
> neptune:~> ./time-warp-test
> #CPUs: 2
> running 2 tasks to check for time-warps.
> warp .. -435934 cycles, ... 00000101a2db4a8f -> 00000101a2d4a3b1 ?
> WARP .. -123 usecs, .... 0003e96c2f3bb579 -> 0003e96c2f3bb4fe ?
> WARP .. -198 usecs, .... 0003e96c2f3bb625 -> 0003e96c2f3bb55f ?
> WARP .. -199 usecs, .... 0003e96c2f3bb659 -> 0003e96c2f3bb592 ?
> warp .. -436117 cycles, ... 00000101a2e5aaf0 -> 00000101a2df035b ?
> warp .. -437143 cycles, ... 00000101a2e84590 -> 00000101a2e199f9 ?
> warp .. -437314 cycles, ... 00000101a2ead1b1 -> 00000101a2e4256f ?
> warp .. -437363 cycles, ... 00000101a2ed9b19 -> 00000101a2e6eea6 ?
> WARP .. -1951680 usecs, .... 0003e96c2f597f70 -> 0003e96c2f3bb7b0 ?
> WARP .. -1951879 usecs, .... 0003e96c2f598016 -> 0003e96c2f3bb78f ?
> WARP .. -1951681 usecs, .... 0003e96c2f598014 -> 0003e96c2f3bb853 ?
> warp .. -437365 cycles, ... 00000101a4c5be7b -> 00000101a4bf1206 ?
> warp .. -437366 cycles, ... 00000101a8f4af76 -> 00000101a8ee0300 ?
> warp .. -437367 cycles, ... 00000101a968a34a -> 00000101a961f6d3 ?
>
> these time warps will get worse over time - as the two cores drift
> apart. (note that they wont drift during the test itself, because the
> test makes all cores artificially busy and the X2 TSC drifting depends
> on the core being idle)

I believe this is the same dual-core TSC drift that has been seen w/
x86-64. I have just added some similar logic to the TSC clocksource that
mimics what x86-64 does so an alternative clocksource will be selected
automatically.

I should be sending out another release later tonight with these
updates.

thanks
-john


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/