From: john stultz <johnstul@us.ibm.com>
To: george@mvista.com
Cc: Roman Zippel <zippel@linux-m68k.org>,
Ulrich Windl <ulrich.windl@rz.uni-regensburg.de>,
Nishanth Aravamudan <nacc@us.ibm.com>,
benh@kernel.crashing.org, Anton Blanchard <anton@samba.org>,
frank@tuxrocks.com, lkml <linux-kernel@vger.kernel.org>
Subject: Re: [RFC - 0/9] Generic timekeeping subsystem (v. B5)
Date: Wed, 24 Aug 2005 13:36:06 -0700 [thread overview]
Message-ID: <1124915766.20820.67.camel@cog.beaverton.ibm.com> (raw)
In-Reply-To: <430BBF82.2010209@mvista.com>
On Tue, 2005-08-23 at 17:29 -0700, George Anzinger wrote:
> Roman Zippel wrote:
> > Hi,
> >
> > On Tue, 23 Aug 2005, john stultz wrote:
> >
> >
> >>I'm assuming gettimeofday()/clock_gettime() looks something like:
> >> xtime + (get_cycles()-last_update)*(mult+ntp_adj)>>shift
> >
> >
> > Where did you get the ntp_adj from? It's not in my example.
> > gettimeofday() was in the previous mail: "xtime + (cycle_offset * mult +
> > error) >> shift". The difference between system time and reference
> > time is really important. gettimeofday() returns the system time, NTP
> > controls the reference time and these two are synchronized regularly.
> > I didn't see that anywhere in your example.
> >
> If I read your example right, the problem is when the NTP adjustment
> changes while the two clocks are out of sync (because of a late tick).
Not quite. The issue that I'm trying to describe is that if, we
inconsistently calculate time intervals in gettimeofday and the timer
interrupt, we have the possibility for time inconsistencies.
The trivial example using the current code would be something like:
Again with my 2 cyc per tick clock, HZ=1000.
gettimeofday():
xtime + offset_ns
timer_interrupt:
xtime += tick_length + ntp_adj
offset_ns = 0
0: gettimeofday: 0 + 0 = 0 ns
1: gettimeofday: 0 + 500k ns = 500k ns
2: gettimeofday: 0 + 1M ns = 1M ns
2: timer_interrupt:
2: gettimeofday: 1M ns + 0 ns = 1M ns
3: gettimeofday: 1M ns + 500k ns = 1.5M ns
4: gettimeofday: 1M ns + 1M ns = 2 ns
4: timer_interrupt (using -500ppm adjustment)
4: gettimeofday: 1,999,500 ns + 0 ns = 1,999,500 ns
> It would appear that gettimeofday would need to know that the NTP
> adjustment is changing (and to what). It would also appear that this
> is known by the ntp code and could be made available to gettimeofday.
> If it is changing due to an NTP call, that system call, itself,
> should/must force synchronization. So the only case gettimeofday needs
> to worry/know about is that an adjustment is to change at time X to
> value Y. Also, me thinks there is only one such change that can be
> present at any given time.
Well, in many arches gettimeofday() works around the above issue by
capping the offset_ns value as such:
gettimeofday:
xtime + min(offset_ns, tick_len + ntp_adj)
The problem with this is that when we have lost or late ticks, or if we
are using dynamic ticks you have granularity problems.
thanks
-john
next prev parent reply other threads:[~2005-08-24 20:36 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-08-11 1:21 [RFC - 0/13] NTP cleanup work " john stultz
2005-08-11 1:23 ` [RFC][PATCH - 1/13] NTP cleanup: Move NTP code into ntp.c john stultz
2005-08-11 1:25 ` [RFC][PATCH - 2/13] NTP cleanup: Move arches to new ntp interfaces john stultz
2005-08-11 1:26 ` [RFC][PATCH - 3/13] NTP cleanup: Remove unused NTP PPS code john stultz
2005-08-11 1:27 ` [RFC][PATCH - 4/13] NTP cleanup: Breakup ntp_adjtimex() john stultz
2005-08-11 1:28 ` [RFC][PATCH - 5/13] NTP cleanup: Break out leapsecond processing john stultz
2005-08-11 1:28 ` [RFC][PATCH - 6/13] NTP cleanup: Clean up ntp_adjtimex() arguement checking john stultz
2005-08-11 1:31 ` [RFC][PATCH - 7/13] NTP cleanup: Cleanup signed shifting logic john stultz
2005-08-11 1:31 ` [RFC][PATCH - 8/13] NTP cleanup: Integrate second_overflow() logic john stultz
2005-08-11 1:33 ` [RFC][PATCH - 9/13] NTP cleanup: Improve NTP variable names john stultz
2005-08-11 1:33 ` [RFC][PATCH - 10/13] NTP cleanup: Use ntp_lock instead of xtime_lock john stultz
2005-08-11 1:35 ` [RFC][PATCH - 11/13] NTP cleanup: Introduce PPM adjustment variables john stultz
2005-08-11 1:36 ` [RFC][PATCH - 12/13] NTP cleanup: cleanup ntp_advance() adjtime code john stultz
2005-08-11 1:38 ` [RFC][PATCH - 13/13] NTP cleanup: drop time_phase and time_adj add copyright john stultz
2005-08-16 2:08 ` [RFC][PATCH - 4/13] NTP cleanup: Breakup ntp_adjtimex() john stultz
2005-08-11 2:13 ` [RFC - 0/9] Generic timekeeping subsystem (v. B5) john stultz
2005-08-11 2:14 ` [PATCH 1/9] Timesource management code john stultz
2005-08-11 2:16 ` [PATCH 2/9] Generic timekeeping core subsystem john stultz
2005-08-11 2:18 ` [PATCH 3/9] Generic timekeeping i386 arch specific changes, part 1 john stultz
2005-08-11 2:19 ` [PATCH 4/9] generic timekeeping i386 arch specific changes, part 2 john stultz
2005-08-11 2:20 ` [PATCH 5/9] generic timekeeping i386 arch specific changes, part 3 john stultz
2005-08-11 2:21 ` [PATCH 6/9] generic timekeeping i386 arch specific changes, part 4 john stultz
2005-08-11 2:23 ` [PATCH 7/9] generic timekeeping i386 arch specific changes, part 5 john stultz
2005-08-11 2:24 ` [PATCH 8/9] generic timekeeping i386 arch specific changes, part 6 john stultz
2005-08-11 2:25 ` [PATCH 9/9] generic timekeeping i386 specific timesources john stultz
2005-08-11 2:32 ` [RFC - 0/9] Generic timekeeping subsystem (v. B5) Lee Revell
2005-08-11 2:39 ` john stultz
2005-08-11 2:44 ` Lee Revell
2005-08-11 6:17 ` Ulrich Windl
2005-08-11 2:37 ` [RFC] Cumulative NTP cleanujp and generic timekeeping patch (v B5) john stultz
2005-08-15 22:14 ` [RFC - 0/9] Generic timekeeping subsystem (v. B5) Roman Zippel
2005-08-16 0:10 ` john stultz
2005-08-16 18:25 ` Christoph Lameter
2005-08-16 23:48 ` john stultz
2005-08-17 0:14 ` Christoph Lameter
2005-08-17 0:17 ` john stultz
2005-08-17 0:21 ` Christoph Lameter
2005-08-17 6:08 ` Ulrich Windl
2005-08-17 14:07 ` Christoph Lameter
2005-08-17 0:28 ` Roman Zippel
2005-08-17 1:17 ` john stultz
2005-08-17 7:40 ` Ulrich Windl
2005-08-19 0:27 ` Roman Zippel
2005-08-20 2:32 ` john stultz
2005-08-21 23:19 ` Roman Zippel
2005-08-22 18:57 ` john stultz
2005-08-23 11:30 ` Roman Zippel
2005-08-23 18:52 ` john stultz
2005-08-23 20:51 ` john stultz
2005-08-23 21:34 ` Roman Zippel
2005-08-23 23:14 ` john stultz
2005-08-23 23:54 ` Roman Zippel
2005-08-24 0:29 ` George Anzinger
2005-08-24 20:36 ` john stultz [this message]
2005-08-24 23:46 ` George Anzinger
2005-08-25 0:42 ` john stultz
2005-08-25 1:44 ` George Anzinger
2005-08-25 2:13 ` john stultz
2005-08-24 6:34 ` Ulrich Windl
2005-08-24 9:47 ` Roman Zippel
2005-08-24 18:00 ` john stultz
2005-08-24 18:48 ` Roman Zippel
2005-08-24 19:15 ` john stultz
2005-08-24 19:49 ` Roman Zippel
2005-08-24 22:40 ` john stultz
2005-08-25 0:45 ` Roman Zippel
2005-08-25 18:08 ` john stultz
2005-08-17 19:03 ` George Anzinger
2005-08-15 22:12 ` [RFC - 0/13] NTP cleanup work " Roman Zippel
2005-08-15 22:46 ` john stultz
2005-08-17 0:10 ` Roman Zippel
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=1124915766.20820.67.camel@cog.beaverton.ibm.com \
--to=johnstul@us.ibm.com \
--cc=anton@samba.org \
--cc=benh@kernel.crashing.org \
--cc=frank@tuxrocks.com \
--cc=george@mvista.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nacc@us.ibm.com \
--cc=ulrich.windl@rz.uni-regensburg.de \
--cc=zippel@linux-m68k.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®