Re: [RFC PATCH v3 0/7] Add virtio_rtc module and related changes
From: Peter Hilber <hidden>
Date: 2024-03-14 10:13:42
Also in:
linux-arm-kernel, linux-rtc, lkml, virtualization
Now CC'ing the previous commenters to the virtio-rtc spec draft, since this discussion is mostly about the spec, and the Virtio mailing lists still seem to be in a migration hiatus... On 13.03.24 19:18, David Woodhouse wrote:
On 13 March 2024 17:50:48 GMT, Peter Hilber [off-list ref] wrote:quoted
On 13.03.24 13:45, David Woodhouse wrote:quoted
Surely the whole point of this effort is to provide guests with precise and *unambiguous* knowledge of what the time is?I would say, a fundamental point of this effort is to enable such implementations, and to detect if a device is promising to support this. Where we might differ is as to whether the Virtio clock *for every implementation* has to be *continuously* accurate w.r.t. a time standard, or whether *for some implementations* it could be enough that all guests in the local system have the same, precise local notion of time, which might be off from the actual time standard.That makes sense, but remember I don't just want {X, Y, Z} but *also* the error bounds of ±deltaY and ±deltaZ too. So your example just boils down to "I'm calling it UTC, and it's really precise, but we make no promises about its *accuracy*". And that's fine.quoted
Also, cf. ptp_kvm, which AFAIU doesn't address leap seconds at all...KVM is not an exemplar of good time practices. Not in *any* respect :)quoted
With your described use case the UTC_SMEARED clock should of course not be used. The UTC_SMEARED clock would get a distinct name through udev, like /dev/ptp_virtio_utc_smeared, so the incompatibility could at least be detected.As long as it's clear to all concerned that this is fundamentally not usable as an accurate time source, and is only for the local-sync case you described, sure.quoted
quoted
Using UTC is bad enough, because for a UTC timestamp in the middle of a leap second the guest can't know know *which* occurrence of that leap second it is, so it might be wrong by a second. To resolve that ambiguity needs a leap indicator and/or tai_offset field.I agree that virtio-rtc should communicate this. The question is, what exactly, and for which clock read request?Are we now conflating software architecture (and Linux in particular) with "hardware" design? To a certain extent, as long as the virtio-rtc device is designed to expose time precisely and unambiguously, it's less important if the Linux kernel *today* can use that. Although of course we should strive for that. Let's be...well, *unambiguous*, I suppose... that we've changed topics to discuss that though.
As Virtio is extensible (unlike hardware), my approach is to mostly specify only what also has a PoC user and a use case.
quoted
As for PTP clocks: - It doesn't fit into the ioctl PTP_SYS_OFFSET_PRECISE2. - The clock_adjtime(2) tai_offset and return value could be set (if upstream will accept this). Would this help? As discussed, user space would need to interpret this (and currently no dynamic POSIX clock sets this).Hm, maybe?quoted
quoted
quoted
I think I can add a SHOULD requirement which vaguely refers to vCPU 0, or boot vCPU. But the Virtio device is not necessarily hosted by a hypervisor, so the device might not even know which vCPUs there are. E.g. there is even interest to make virtio-rtc work as part of the virtio-net device (which might be implemented in hardware).Sure, but those implementations aren't going to offer the TSC pairing at all, are they?They could offer an Intel ART pairing (some physical PTP NICs are already doing this, look for the convert_art_to_tsc() users).Right, but isn't that software's problem? The time pairing is defined against the ART in that case.
My point was that such a device would then not necessarily have an idea what vCPU 0 is. But let's just say that this will be phrased as a SHOULD best-effort requirement anyway. Thanks for the comments, Peter