From: Ingo Molnar <mingo@elte.hu>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
Jesper Krogh <jesper@krogh.cc>, john stultz <johnstul@us.ibm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Len Brown <len.brown@intel.com>
Subject: Re: Linux 2.6.29-rc6
Date: Tue, 17 Mar 2009 17:13:22 +0100 [thread overview]
Message-ID: <20090317161322.GA25904@elte.hu> (raw)
In-Reply-To: <alpine.LFD.2.00.0903170831020.3082@localhost.localdomain>
* Linus Torvalds <torvalds@linux-foundation.org> wrote:
> On Tue, 17 Mar 2009, Ingo Molnar wrote:
> >
> > Cool. Will you apply it yourself (in the merge window) or should
> > we pick it up?
>
> I'll commit it. I already split it into two commits - one for the
> trivial startup problem that John had, one for the "estimate error
> and exit when smaller than 500ppm" part.
ok.
> > Incidentally, yesterday i wrote a PIT auto-calibration routine
> > (see WIP patch below).
> >
> > The core idea is to use _all_ thousands of measurement points
> > (not just two) to calculate the frequency ratio, with a built-in
> > noise detector which drops out of the loop if the observed noise
> > goes below ~10 ppm.
>
> I suspect that reaching 10 ppm is going to take too long in
> general. Considering that I found a machine where reaching 500ppm
> took 16ms, getting to 10ppm would take almost a second. That's a
> long time at bootup, considering that people want the whole boot
> to take about that time ;)
>
> I also do think it's a bit unnecessarily complicated. We really
> only care about the end points - obviously we can end up being
> unlucky and get a very noisy end-point due to something like SMI
> or virtualization, but if that happens, we're really just better
> off failing quickly instead, and we'll go on to the slower
> calibration routines.
That's the idea of my patch: to use not two endpoints but thousands
of measurement points. That way we dont have to worry about the
precision of the endpoints - any 'bad' measurement will be
counter-acted by thousands of 'good' measurements.
That's the theory at least - practice got in my way ;-)
By measuring more we can get a more precise result, and we also do
not assume anything about how much time passes between two
measurement points. A single measurement is:
+ /*
+ * We use the PIO accesses as natural TSC serialization barriers:
+ */
+ pit_lsb = inb(0x42);
+ tsc = get_cycles();
+ pit_msb = inb(0x42);
Just like we can prove that there's an exoplanet around a star, just
by doing a _ton_ of measurements of a very noisy data source. As
long as there's an underlying physical value to be measured (and we
are not measuring pure noise) that value is recoverable, with enough
measurements.
> On real hardware without SMI or virtualization overhead, the
> delays _should_ be very stable. On my main machine, for example,
> the PIT read really seems very stable at about 2.5us (which
> matches the expectation that one 'inb' should take roughly one
> microsecond pretty closely). So that should be the default case,
> and the case that the fast calibration is designed for.
>
> For the other cases, we really can just exit and do something
> else.
>
> > It's WIP because it's not working yet (or at all?): i couldnt
> > get the statistical model right - it's too noisy at 1000-2000
> > ppm and the frequency result is off by 5000 ppm.
>
> I suspect your measurement overhead is getting noticeable. You do
> all those divides, but even more so, you do all those traces.
> Also, it looks like you do purely local pairwise analysis at
> subsequent PIT modelling points, which can't work - you need to
> average over a long time to stabilize it.
Actually, it's key to my trick that what happens _between_ the
measurement points does not matter _at all_.
My 'delta' algorithm does not assume anything about how much time
passes between two measurement points - it calculates the slope and
keeps a rolling average of that slope.
That's why i could put the delta analysis there. We are capturing
thousands of measurement points, and what matters is the precision
of the 'pair' of (PIT,TSC) timestamp measurements.
I got roughly the same end result noise and the same anomalies with
tracing enabled and disabled. (and the number of data points was cut
in half with tracing enabled)
Ingo
next prev parent reply other threads:[~2009-03-17 16:13 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-23 4:31 Linux 2.6.29-rc6 Linus Torvalds
2009-02-23 14:07 ` Linux 2.6.29-rc6 - Fix oops in i915_gem_retire_requests Karsten Wiese
2009-02-26 11:15 ` Linux 2.6.29-rc6 Jesper Krogh
2009-02-26 17:17 ` MTD_CK804XROM warning (Was: Linux 2.6.29-rc6) Marcin Slusarz
2009-02-26 17:53 ` Linux 2.6.29-rc6 Linus Torvalds
2009-02-26 19:22 ` David Woodhouse
2009-02-26 19:31 ` Jesper Krogh
2009-02-26 19:36 ` David Woodhouse
2009-02-26 19:46 ` Jesper Krogh
2009-02-26 19:49 ` David Woodhouse
2009-02-26 20:53 ` Carl-Daniel Hailfinger
2009-02-26 20:32 ` Linus Torvalds
2009-02-26 19:55 ` Jesper Krogh
2009-02-26 20:33 ` Linus Torvalds
2009-02-26 20:43 ` Jesper Krogh
2009-02-26 21:19 ` john stultz
2009-02-26 21:35 ` Jesper Krogh
2009-02-26 21:46 ` john stultz
2009-02-26 21:54 ` Thomas Gleixner
2009-02-26 22:04 ` Jesper Krogh
2009-02-27 6:30 ` Jesper Krogh
2009-03-01 13:51 ` Jesper Krogh
2009-02-26 21:49 ` Linus Torvalds
2009-03-01 15:04 ` Jesper Krogh
2009-02-26 21:54 ` john stultz
2009-02-26 22:06 ` Thomas Gleixner
2009-02-26 22:24 ` Linus Torvalds
2009-02-26 22:31 ` Linus Torvalds
2009-02-26 22:31 ` john stultz
2009-02-26 22:40 ` Linus Torvalds
2009-02-26 22:59 ` john stultz
2009-02-27 7:33 ` Ingo Molnar
2009-02-27 20:50 ` john stultz
2009-02-27 6:47 ` Jesper Krogh
2009-02-27 20:35 ` john stultz
2009-03-01 20:13 ` Jesper Krogh
2009-03-02 9:53 ` Jesper Krogh
2009-03-02 21:27 ` john stultz
2009-03-03 6:04 ` Jesper Krogh
2009-03-03 19:53 ` john stultz
2009-03-03 20:19 ` Jesper Krogh
2009-03-03 22:22 ` john stultz
2009-03-04 15:30 ` Jesper Krogh
2009-03-04 18:36 ` Jesper Krogh
2009-03-04 18:57 ` John Stultz
2009-03-05 2:39 ` john stultz
2009-03-05 2:52 ` john stultz
2009-03-05 8:43 ` Ingo Molnar
2009-03-06 3:13 ` john stultz
2009-03-06 3:54 ` john stultz
2009-03-06 11:34 ` Ingo Molnar
2009-03-09 20:42 ` Jesper Krogh
2009-03-10 4:26 ` Linus Torvalds
2009-03-10 11:29 ` Thomas Gleixner
2009-03-10 19:42 ` Jesper Krogh
2009-03-10 22:22 ` Thomas Gleixner
2009-03-15 19:53 ` Jesper Krogh
2009-03-16 18:40 ` Jesper Krogh
2009-03-15 1:19 ` Linus Torvalds
2009-03-15 15:44 ` Jesper Krogh
2009-03-15 18:09 ` Linus Torvalds
2009-03-15 18:38 ` Jesper Krogh
2009-03-15 19:02 ` Linus Torvalds
2009-03-15 19:52 ` Jesper Krogh
2009-03-16 18:59 ` Jesper Krogh
2009-03-16 19:32 ` Linus Torvalds
2009-03-17 1:43 ` john stultz
2009-03-17 8:14 ` Ingo Molnar
2009-03-17 15:48 ` Linus Torvalds
2009-03-17 16:13 ` Ingo Molnar [this message]
2009-03-17 16:28 ` Linus Torvalds
2009-03-17 16:40 ` Ingo Molnar
2009-03-17 17:28 ` Olivier Galibert
2009-03-21 9:11 ` Jesper Krogh
2009-03-21 10:06 ` Ingo Molnar
2009-03-15 20:32 ` Linus Torvalds
2009-03-03 20:39 ` Jesper Krogh
2009-03-03 22:16 ` john stultz
2009-03-04 5:36 ` Jesper Krogh
2009-03-01 15:09 ` Jesper Krogh
2009-03-01 15:44 ` Linux 2.6.29-rc6 (clocksource) Sitsofe Wheeler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090317161322.GA25904@elte.hu \
--to=mingo@elte.hu \
--cc=a.p.zijlstra@chello.nl \
--cc=jesper@krogh.cc \
--cc=johnstul@us.ibm.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox