From: Stephen Hemminger <shemminger@osdl.org>
To: Gabriel Paubert <paubert@iram.es>
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: Tue, 28 Oct 2003 10:21:20 -0800 [thread overview]
Message-ID: <20031028102120.01987aa4.shemminger@osdl.org> (raw)
In-Reply-To: <20031028115558.GA20482@iram.es>
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
The code does have bug if we are losing clock interrupts. The test for
lost interrupts needs to be after the interval clamp.
This should work better. Patch against 2.6.0-test9
diff -Nru a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c
--- a/arch/i386/kernel/time.c Tue Oct 28 10:08:52 2003
+++ b/arch/i386/kernel/time.c Tue Oct 28 10:08:52 2003
@@ -94,6 +94,7 @@
{
unsigned long seq;
unsigned long usec, sec;
+ unsigned long max_ntp_tick = tick_usec - tickadj;
do {
unsigned long lost;
@@ -102,16 +103,20 @@
usec = cur_timer->get_offset();
lost = jiffies - wall_jiffies;
- if (lost)
- usec += lost * (1000000 / HZ);
/*
* If time_adjust is negative then NTP is slowing the clock
* so make sure not to go into next possible interval.
* Better to lose some accuracy than have time go backwards..
*/
- if (unlikely(time_adjust < 0) && usec > tickadj)
- usec = tickadj;
+ if (unlikely(time_adjust < 0)) {
+ usec = min(usec, max_ntp_tick);
+
+ if (lost)
+ usec += lost * max_ntp_tick;
+ }
+ else if (unlikely(lost))
+ usec += lost * tick_usec;
sec = xtime.tv_sec;
usec += (xtime.tv_nsec / 1000);
next prev parent reply other threads:[~2003-10-28 18:22 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-27 23:44 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 [this message]
2003-10-29 10:07 ` Gabriel Paubert
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=20031028102120.01987aa4.shemminger@osdl.org \
--to=shemminger@osdl.org \
--cc=akpm@osdl.org \
--cc=joe.korty@ccur.com \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paubert@iram.es \
--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
all inboxes | Powered by JetHome®