mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: David Woodhouse <dwmw2@infradead.org>
To: Thomas Gleixner <tglx@kernel.org>,
	Harshitha Ramamurthy <hramamurthy@google.com>,
	netdev@vger.kernel.org, Arthur Kiyanovski <akiyano@amazon.com>
Cc: joshwash@google.com, andrew+netdev@lunn.ch, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	richardcochran@gmail.com, jstultz@google.com, sboyd@kernel.org,
	willemb@google.com, nktgrg@google.com, jfraker@google.com,
	ziweixiao@google.com, maolson@google.com, jordanrhee@google.com,
	thostet@google.com, alok.a.tiwari@oracle.com,
	pkaligineedi@google.com, horms@kernel.org,
	jacob.e.keller@intel.com, yyd@google.com, jefrogers@google.com,
	linux-kernel@vger.kernel.org,
	"Naman Gulati" <namangulati@google.com>,
	"Thomas Weißschuh" <thomas.weissschuh@linutronix.de>
Subject: Re: [PATCH net-next v8 3/3] gve: implement PTP gettimex64
Date: Fri, 22 May 2026 11:34:55 +0100	[thread overview]
Message-ID: <aee6f77138e5f173d36f3f4ce65cc2acc4e4ae69.camel@infradead.org> (raw)
In-Reply-To: <87bje8v0xl.ffs@tglx>

[-- Attachment #1: Type: text/plain, Size: 4313 bytes --]

On Fri, 2026-05-22 at 00:43 +0200, Thomas Gleixner wrote:
> 
> Fine, but you can only do that accurately if you have the relevant
> parameters:
> 

I had elided this discussion about KVM migration as a digression, but
I'm coming back to it because I think it could use the
clock_get_reference_time() thing we were talking about.

>      1) Guest TSC value at freeze
>      2) Guest nominal TSC frequency
>      3) Old host REALTIME at freeze - Ideally you use TAI
>      4) New host TSC frequency
>      5) New host TSC/REALTIME/TAI snapshot
> 
>   #1 is a KVM problem, but see #3
>   
>   #2 ideally communicated from the guest to the host after early
>      initialization at boot.
> 
>      You really want this information because the guest won't change the
>      mult/shift pair for it ever.

If *tell* the guest the frequency in CPUID, then it shouldn't be trying
to manually calibrate it against an emulated PIT while suffering steal
time, and its mult/shift should have a little bit less entropy.

Even a system which *has* to do that crappy calibration still does it
with a lot more *precision* than accuracy, so I suspect we ought to be
rounding the result to the nearest 1MHz as long as that's within 10PPM
or something like that. But that really *is* a digression :)

>      That is more accurate than using the scaling factor on the old host
>      plus the old host frequency. Especially if you are migrating the VM
>      several times because every migration results obviously in rounding
>      errors, while if you use the nominal guest frequency you keep this
>      back and forth conversions and the resulting errors out of the way.
> 
>   #3 That's obviously related to #1
> 
>      The old host knows the guest TSC scaling and the guest offset, so
>      it can take a coherent snapshot on the host side of REALTIME/TAI
>      and the host TSC value, which is convertible to the guest TSC
>      value.
> 
>   #4, 5
> 
>      are obviously required to set up the new host scaling/offset for
>      the guest TSC, but if based on the nominal assumed TSC frequency of
>      the guest it becomes actually accurate and usable across several
>      migrations.
> 
> Anything else is just crystal ball magic, which is what KVM has today....

The model I'm enabling and documenting for KVM migration is basically
within the noise of what you describe above, yes.

But if we want to give the illusion of the TSC just ticking away while
the guest happens to experience a little steal time, when in fact it's
been completely migrated to a new host, we actually want to work with
the *true* running frequency of the TSC at the moment of migration.

So... 

 1) Use clock_get_time_reference() to get a { host tsc, time, rate }
    from the source host at 'freeze' time. 

 2) Use clock_get_time_reference() to get a { host tsc, time, rate }
    from the destination host, when resuming.

 3) (Optionally) scale the guest's TSC frequency, not by the *nominal* 
    rates, but by the *actual* ratio of the rates from (1) and (2)
    above (plus any original nominal scaling of the guest's TSC from
    the original host).

 4) Calculate the guest TSC *offset* in order to convey the effect
    that the guest's TSC continued to tick at the rate from (1),
    during the time period between (1) and (2).

 5) (Optionally) Once the guest is running, slowly undo the scaling
    in (1) in order to get the guest back to a nice simple unscaled
    TSC (or scaled only by nominal frequencies as it was when launched)


Obviously, a dedicated environment which disciplines its TSC directly
can do all of that right now already because it *has* all the
information it would get from clock_get_time_reference().

But as you know perfectly well, Thomas, I'm never happy to keep the
blinkers on and focus only on my specific use case at hand; I want this
to work for the *general* case, including people running QEMU in a
fairly standard environment. And I think clock_get_time_reference()
might be a reasonable way of doing that, and a fairly clean counterpart
to the clock_set_time_reference() you suggested?








[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5069 bytes --]

  parent reply	other threads:[~2026-05-22 10:35 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-14 22:58 [PATCH net-next v8 0/3] gve: add support for " Harshitha Ramamurthy
2026-05-14 22:58 ` [PATCH net-next v8 1/3] gve: skip error logging for retryable AdminQ commands Harshitha Ramamurthy
2026-05-14 22:58 ` [PATCH net-next v8 2/3] gve: make nic clock reads thread safe Harshitha Ramamurthy
2026-05-14 22:58 ` [PATCH net-next v8 3/3] gve: implement PTP gettimex64 Harshitha Ramamurthy
2026-05-20 21:08   ` Thomas Gleixner
2026-05-20 22:16     ` Jakub Kicinski
2026-05-21  4:35     ` Jordan Rhee
2026-05-27 18:46       ` Jordan Rhee
2026-05-27 20:03         ` David Woodhouse
2026-05-28 16:22           ` Jordan Rhee
2026-05-28 17:33             ` David Woodhouse
2026-05-21 10:08     ` David Laight
2026-05-28 17:22     ` David Woodhouse
2026-05-21 11:43   ` David Woodhouse
2026-05-21 18:06     ` Thomas Gleixner
2026-05-21 19:59       ` David Woodhouse
2026-05-21 22:43         ` Thomas Gleixner
2026-05-22  0:12           ` David Woodhouse
2026-05-22  7:49             ` Thomas Gleixner
2026-05-22  8:56               ` David Woodhouse
2026-05-22 14:41                 ` Thomas Gleixner
2026-05-22 10:34           ` David Woodhouse [this message]
2026-05-22 14:46             ` Thomas Gleixner
2026-05-20  1:30 ` [PATCH net-next v8 0/3] gve: add support for " patchwork-bot+netdevbpf

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=aee6f77138e5f173d36f3f4ce65cc2acc4e4ae69.camel@infradead.org \
    --to=dwmw2@infradead.org \
    --cc=akiyano@amazon.com \
    --cc=alok.a.tiwari@oracle.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=hramamurthy@google.com \
    --cc=jacob.e.keller@intel.com \
    --cc=jefrogers@google.com \
    --cc=jfraker@google.com \
    --cc=jordanrhee@google.com \
    --cc=joshwash@google.com \
    --cc=jstultz@google.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maolson@google.com \
    --cc=namangulati@google.com \
    --cc=netdev@vger.kernel.org \
    --cc=nktgrg@google.com \
    --cc=pabeni@redhat.com \
    --cc=pkaligineedi@google.com \
    --cc=richardcochran@gmail.com \
    --cc=sboyd@kernel.org \
    --cc=tglx@kernel.org \
    --cc=thomas.weissschuh@linutronix.de \
    --cc=thostet@google.com \
    --cc=willemb@google.com \
    --cc=yyd@google.com \
    --cc=ziweixiao@google.com \
    /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®