Description
Per the discussion happening on rust-lang/rust#88714, there's a meaningful difference between CLOCK_BOOTTIME
and CLOCK_MONOTONIC
when it comes to time across system suspends on Linux. According to the issue, the problem they're trying to solve is that CLOCK_MONOTONIC
stops ticking during suspend, while CLOCK_BOOTTIME
does not. This raises two problems for quanta
:
Monotonic mode
When invariant TSC support is not detected, we fall back to the "monotonic" mode where we query the time directly. This is all fine and good, but we're also querying with CLOCK_MONOTONIC
, and similar variants on other platforms. This leaves us open to the exact same problem described in the above issue.
Counter (TSC) mode
While I have not fully traced whether or not this matters, there's a potential reality where CLOCK_MONOTONIC
stops ticking during lower CPU power states, such that as we're going through the calibration loop, our reference drifts with every loop we perform. While invariant TSC should be guaranteed to tick at a constant rate -- recent Intel manuals specifically use the language of The invariant TSC will run at a constant rate in all ACPI P-, C-. and T-states.
-- this is moot if our initial reference/source calibration is off, as we need that in order to go from TSC cycles to real time units.
At any rate, switching shouldn't do anything but make things more accurate, but to reference the issue again, there are also some concerns about when the support for it was introduced, and on which platforms it matters. With that in mind, we likely need to wait for that PR to shake out to make sure we have a good example of where we'll need to make our changes.