From: Gabriel Paubert <paubert@iram.es>
To: Stephen Hemminger <shemminger@osdl.org>
Cc: john stultz <johnstul@us.ibm.com>, Joe Korty <joe.korty@ccur.com>,
Linus Torvalds <torvalds@osdl.org>,
lkml <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@osdl.org>
Subject: Re: gettimeofday resolution seriously degraded in test9
Date: Wed, 29 Oct 2003 11:07:45 +0100 [thread overview]
Message-ID: <20031029100745.GA6674@iram.es> (raw)
In-Reply-To: <20031028102120.01987aa4.shemminger@osdl.org>
On Tue, Oct 28, 2003 at 10:21:20AM -0800, Stephen Hemminger wrote:
> On Tue, 28 Oct 2003 12:55:58 +0100
> Gabriel Paubert <paubert@iram.es> wrote:
>
> > On Mon, Oct 27, 2003 at 05:17:38PM -0800, Stephen Hemminger wrote:
> > > Arghh... the patch was being way more agressive than necessary.
> > > tickadj which limits NTP is always 1 (for HZ=1000) so NTP will change
> > > at most 1 us per clock tick. This meant we only had to stop time
> > > for the last us of the interval.
> >
> > Hmm, I still don't like it. What does it do to timestamping in
> > interrupts in the kernel, especially when there is a burst of
> > interrupts?
> >
> > If I read it correctly, the time will be frozen between the time
> > the timer interrupt should have arrived and the time it is processed.
> > So the last micosecond of the interval could extend well into the next
> > interval, or do I miss something (I also suspect that it could
> > make PPSKit behave strangely for this reason)?
>
> The original problem all this is solving is that when NTP is slowing the clock
> there existed real cases where time appeared to go backwards. Assuming NTP was
> slowing the clock, then it would update the xtime by 999us at the next timer interrupt.
> If a program read time three times:
>
> A: xtime = t0
> B: A+1000 xtime = t0 + 1000
> C: B+1 xtime = t0 + 999
>
> To behave correctly C > B > A; but we were returning C < B
Well, it happens almost everyday when I come back to work
and wake my laptop up from sleep and starts receiving ntp packets
(broadcastclient mode). After a few minutes, I have a time adjustment
step of of typically a few hundred milliseconds either way. It's a
once per day event, but it happens.
But anyway, I understand your point. But by doing this you potentially
cause another problem of fairly large steps in time for interrupt handlers
that do timestamping.
Consider the following:
- t-2: interrupt A arrives and starts being serviced
- t-1: interrupt B arrives but delayed in the APIC
- t: timer interrupt arrives (it is delayed too)
- t+x1: return from interrupt A
- t+x2: interrupt B serviced
- gettimeofday for time stamping, the returned value will actually
be frozen at t-1 for HZ=1000 or t-5 for HZ=100, while the actual
time is t+something with something maybe up to a few tens of
microseconds, instead of t+x2-1 or t+x2-5 which would be
clearly better.
- t+x3: timer interrupt, time steps suddenly now (or in
the following BH, can't remember) from t-1 to the correct
value, creating a fairly large discontinuity.
So what I'm asking you is to change the code so that the discontinuities
are minimized. That's quite important for some applications; actually
in my case the out-of-order gettimeofday don't matter as long as the
steps are small because I don't sample fast enough to be affected
by them, but getting the timestamp wrong by tens of microseconds is bad
for evaluating the derivatives of the value read from a position encoder,
as needed for servo loops for example.
>
> The code does have bug if we are losing clock interrupts. The test for
> lost interrupts needs to be after the interval clamp.
If we are really losing clock interrupts, we have more serious problems
anyway (on x86 with classical 8253 timer, I don't know about other x86
systems, only that PPC recovers from them rather well). This misnamed
lost_jiffies variable is not the number of lost interrupts, but actually
the number of jiffies for which the bottom half has not (yet) been
performed.
> This should work better. Patch against 2.6.0-test9
Still unhappy...
Gabriel
next prev parent reply other threads:[~2003-10-29 10:10 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-27 23:44 gettimeofday resolution seriously degraded in test9 Joe Korty
2003-10-28 0:15 ` Stephen Hemminger
2003-10-28 0:29 ` john stultz
2003-10-28 1:17 ` Stephen Hemminger
2003-10-28 11:55 ` Gabriel Paubert
2003-10-28 18:21 ` Stephen Hemminger
2003-10-29 10:07 ` Gabriel Paubert [this message]
2003-10-29 19:38 ` Stephen Hemminger
2003-10-29 22:50 ` Peter Chubb
2003-10-30 21:33 ` George Anzinger
2003-10-30 21:52 ` Richard B. Johnson
2003-10-30 22:50 ` Chris Friesen
2003-10-30 23:15 ` Peter Chubb
2003-10-30 23:47 ` George Anzinger
2003-11-25 16:42 ` [RFC] possible erronous use of tick_usec in do_gettimeofday Joe Korty
2003-11-25 17:13 ` Stephen Hemminger
2003-11-25 19:57 ` George Anzinger
2003-11-25 21:12 ` Joe Korty
2003-11-25 23:26 ` George Anzinger
2003-10-30 23:27 ` gettimeofday resolution seriously degraded in test9 George Anzinger
2003-10-30 10:39 ` Gabriel Paubert
[not found] <LphK.2Dl.15@gated-at.bofh.it>
[not found] ` <Lq47.3Go.11@gated-at.bofh.it>
[not found] ` <LqGL.4zF.11@gated-at.bofh.it>
[not found] ` <LAPN.1dU.11@gated-at.bofh.it>
[not found] ` <LGLz.1h2.5@gated-at.bofh.it>
2003-10-28 19:19 ` David Mosberger-Tang
2003-10-28 19:59 ` Stephen Hemminger
2003-10-29 0:19 ` David Mosberger
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=20031029100745.GA6674@iram.es \
--to=paubert@iram.es \
--cc=akpm@osdl.org \
--cc=joe.korty@ccur.com \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=shemminger@osdl.org \
--cc=torvalds@osdl.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