From: Thomas Gleixner <tglx@linutronix.de>
To: Andreas Hindborg <a.hindborg@kernel.org>,
Miguel Ojeda <ojeda@kernel.org>,
Anna-Maria Behnsen <anna-maria@linutronix.de>,
Frederic Weisbecker <frederic@kernel.org>,
Danilo Krummrich <dakr@kernel.org>
Cc: "Alex Gaynor" <alex.gaynor@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Lyude Paul" <lyude@redhat.com>,
"Guangbo Cui" <2407018371@qq.com>,
"Dirk Behme" <dirk.behme@gmail.com>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Tamir Duberstein" <tamird@gmail.com>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
"Andreas Hindborg" <a.hindborg@kernel.org>
Subject: Re: [PATCH v9 12/13] rust: hrtimer: add clocksource selection through `ClockSource`
Date: Thu, 27 Feb 2025 10:11:08 +0100 [thread overview]
Message-ID: <87jz9beor7.ffs@tglx> (raw)
In-Reply-To: <20250224-hrtimer-v3-v6-12-rc2-v9-12-5bd3bf0ce6cc@kernel.org>
On Mon, Feb 24 2025 at 13:03, Andreas Hindborg wrote:
>
> +/// The clock source to use for a [`HrTimer`].
> +pub enum ClockSource {
ClockSource is a confusing name as 'clocksource' is used in the kernel
already for devices providing counters, which can be used for
timekeeping.
Also these clocks are not really hrtimer specific. These CLOCK ids are
system wide valid and are used for other purposes obviously internally
in timekeeping. hrtimers are built on top of timekeeping, which provides
the underlying time.
> + /// A settable system-wide clock that measures real (i.e., wall-clock) time.
> + ///
> + /// Setting this clock requires appropriate privileges. This clock is
> + /// affected by discontinuous jumps in the system time (e.g., if the system
> + /// administrator manually changes the clock), and by frequency adjustments
> + /// performed by NTP and similar applications via adjtime(3), adjtimex(2),
> + /// clock_adjtime(2), and ntp_adjtime(3). This clock normally counts the
> + /// number of seconds since 1970-01-01 00:00:00 Coordinated Universal Time
> + /// (UTC) except that it ignores leap seconds; near a leap second it is
> + /// typically adjusted by NTP to stay roughly in sync with UTC.
That's not correct. It depends on the implementation/configuration of
NTP. The default is that the leap second is actually applied at the
requested time, by setting the clock one second forth or back.
Though there are NTP configurations/implementations out there which use
leap second "smearing" to avoid the jump. They adjust the conversion
factors around the leap second event by slowing down or speeding up for
a while. That avoids a few common issues, e.g. in data bases.
But it brings all clocks out of sync with the actual progress of time, which
is patently bad for systems which require strict synchronization.
The problem is that the kernel uses the NTP/PTP frequency adjustment to
steer the conversion of all clocks, except CLOCK_MONOTONIC_RAW. The
kernel internal base clock is CLOCK_MONOTONIC. The other clocks are
derived from that:
CLOCK_[X] = CLOCK_MONOTONIC + offset[X]
> + RealTime,
> + /// A monotonically increasing clock.
> + ///
> + /// A nonsettable system-wide clock that represents monotonic time since—as
> + /// described by POSIX—"some unspecified point in the past". On Linux, that
> + /// point corresponds to the number of seconds that the system has been
> + /// running since it was booted.
> + ///
> + /// The CLOCK_MONOTONIC clock is not affected by discontinuous jumps in the
> + /// system time (e.g., if the system administrator manually changes the
s/system time/CLOCK_REALTIME/
> + /// clock), but is affected by frequency adjustments. This clock does not
> + /// count time that the system is suspended.
> + Monotonic,
> + /// A monotonic that ticks while system is suspended.
> + ///
> + /// A nonsettable system-wide clock that is identical to CLOCK_MONOTONIC,
> + /// except that it also includes any time that the system is suspended. This
> + /// allows applications to get a suspend-aware monotonic clock without
> + /// having to deal with the complications of CLOCK_REALTIME, which may have
> + /// discontinuities if the time is changed using settimeofday(2) or similar.
> + BootTime,
> + /// International Atomic Time.
> + ///
> + /// A nonsettable system-wide clock derived from wall-clock time but
> + /// counting leap seconds. This clock does not experience discontinuities or
> + /// frequency adjustments caused by inserting leap seconds as CLOCK_REALTIME
> + /// does.
Only partially correct.
CLOCK_TAI can be set as CLOCK_TAI is obviously coupled to CLOCK_REALTIME
and vice versa.
Also if the NTP implementation does leap seconds smearing then the
adjustment affects CLOCK_TAI as well. See above. That's compensated for
by adjusting the TAI offset to be in sync with reality, but during the
smear phase the readout is not precise.
Thanks,
tglx
next prev parent reply other threads:[~2025-02-27 9:11 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-24 12:03 [PATCH v9 00/13] hrtimer Rust API Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 01/13] rust: hrtimer: introduce hrtimer support Andreas Hindborg
2025-02-24 13:19 ` Andreas Hindborg
2025-02-24 15:46 ` Boqun Feng
2025-02-24 16:23 ` Miguel Ojeda
2025-02-24 16:31 ` Boqun Feng
2025-02-24 16:45 ` Miguel Ojeda
2025-02-24 17:01 ` Boqun Feng
2025-02-24 18:58 ` Andreas Hindborg
2025-02-24 19:18 ` Boqun Feng
2025-02-24 19:52 ` Andreas Hindborg
2025-02-24 20:22 ` Boqun Feng
2025-02-25 5:50 ` Andreas Hindborg
2025-02-26 16:31 ` Frederic Weisbecker
2025-02-26 19:41 ` Andreas Hindborg
2025-02-24 20:04 ` Tamir Duberstein
2025-02-25 8:52 ` Andreas Hindborg
2025-02-25 15:37 ` Tamir Duberstein
2025-02-25 19:12 ` Andreas Hindborg
2025-02-25 20:13 ` Tamir Duberstein
2025-02-26 11:48 ` Andreas Hindborg
2025-02-26 15:29 ` Tamir Duberstein
2025-03-07 9:09 ` Andreas Hindborg
2025-02-25 11:36 ` Markus Elfring
2025-02-25 12:13 ` Andreas Hindborg
2025-02-27 8:31 ` Thomas Gleixner
2025-02-27 10:44 ` Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 02/13] rust: sync: add `Arc::as_ptr` Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 03/13] rust: hrtimer: implement `HrTimerPointer` for `Arc` Andreas Hindborg
2025-02-24 23:13 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 04/13] rust: hrtimer: allow timer restart from timer handler Andreas Hindborg
2025-02-24 23:23 ` Lyude Paul
2025-02-25 8:58 ` Andreas Hindborg
2025-02-25 21:46 ` Lyude Paul
2025-02-26 13:43 ` Andreas Hindborg
2025-02-26 19:26 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 05/13] rust: hrtimer: add `UnsafeHrTimerPointer` Andreas Hindborg
2025-02-24 23:24 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 06/13] rust: hrtimer: add `hrtimer::ScopedHrTimerPointer` Andreas Hindborg
2025-02-24 23:25 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 07/13] rust: hrtimer: implement `UnsafeHrTimerPointer` for `Pin<&T>` Andreas Hindborg
2025-02-24 23:32 ` Lyude Paul
2025-02-25 9:01 ` Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 08/13] rust: hrtimer: implement `UnsafeHrTimerPointer` for `Pin<&mut T>` Andreas Hindborg
2025-02-24 23:33 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 09/13] rust: alloc: add `Box::into_pin` Andreas Hindborg
2025-02-24 23:34 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 10/13] rust: hrtimer: implement `HrTimerPointer` for `Pin<Box<T>>` Andreas Hindborg
2025-02-24 23:37 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 11/13] rust: hrtimer: add `HrTimerMode` Andreas Hindborg
2025-02-24 23:40 ` Lyude Paul
2025-02-25 9:04 ` Andreas Hindborg
2025-02-25 21:49 ` Lyude Paul
2025-02-24 12:03 ` [PATCH v9 12/13] rust: hrtimer: add clocksource selection through `ClockSource` Andreas Hindborg
2025-02-24 23:42 ` Lyude Paul
2025-02-27 9:11 ` Thomas Gleixner [this message]
2025-02-27 9:24 ` Thomas Gleixner
2025-02-27 11:18 ` Andreas Hindborg
2025-02-27 14:22 ` Thomas Gleixner
2025-02-27 16:03 ` Andreas Hindborg
2025-02-24 12:03 ` [PATCH v9 13/13] rust: hrtimer: add maintainer entry Andreas Hindborg
2025-02-24 15:44 ` Boqun Feng
2025-02-26 16:17 ` Frederic Weisbecker
2025-02-26 19:42 ` Andreas Hindborg
2025-02-26 19:49 ` Lyude Paul
2025-02-26 21:08 ` Andreas Hindborg
2025-02-27 9:12 ` Thomas Gleixner
2025-02-27 10:45 ` Andreas Hindborg
2025-02-24 23:43 ` Lyude Paul
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=87jz9beor7.ffs@tglx \
--to=tglx@linutronix.de \
--cc=2407018371@qq.com \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=anna-maria@linutronix.de \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dirk.behme@gmail.com \
--cc=frederic@kernel.org \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lyude@redhat.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tamird@gmail.com \
--cc=tmgross@umich.edu \
/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;
as well as URLs for NNTP newsgroup(s).