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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.