public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Tosatti <mtosatti@redhat.com>
To: Owen Hofmann <osh@google.com>
Cc: KVM General <kvm@vger.kernel.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Andy Lutomirski <luto@amacapital.net>,
	Peter Hornyack <peterhornyack@google.com>
Subject: Re: What time is it kvm-clock?
Date: Wed, 24 Feb 2016 00:57:54 -0300	[thread overview]
Message-ID: <20160224035753.GA6681@amt.cnet> (raw)
In-Reply-To: <CANqFzA5VCQYZ6dYBjz=hbBotwe0S_4cKgxGiK9YU8Ei9G7DYng@mail.gmail.com>

On Tue, Feb 23, 2016 at 06:31:59PM -0800, Owen Hofmann wrote:
> Specifically, what underlying source of time should be exposed through
> kvm-clock and other paravirtual ABIs like the HyperV reference tsc
> page?  Recently a couple of threads on kvm-list, along with attempts
> to produce reliable behavior from kvm-clock on our systems have
> highlighted a tension between the current implementation of kvm-clock
> and potentially diverging goals for paravirt time. Here are a few:
> 
> 1) kvmclock doesn't work, help?: http://www.spinics.net/lists/kvm/msg125039.html
> 2) kvmclock: improve accuracy: http://www.spinics.net/lists/kvm/msg127215.html
> 3) KVM-clock: http://www.spinics.net/lists/kvm/msg127774.html
> 
> This question is mostly in regards to kvm-clock in masterclock mode
> (with PVCLOCK_TSC_STABLE set). In this mode, is kvm-clock intended to
> expose a source of time that is more 'true' than the underlying TSC?
> For example, by passing through NTP correction from the host. For the
> current implementation, the answer seems to be... why not both? Once
> programmed, kvm-clock or the HyperV TSC page will advance with the TSC
> multiplied by the frequency specified by kvm. On the other hand,
> KVM_GET_CLOCK, KVM_SET_CLOCK, and the Windows reference counter MSR
> are measured against corrected time from the host. A guest reading its
> pvclock gets a very different result from a host KVM_GET_CLOCK if the
> guest has run long enough to for TSC to diverge from NTP time. A VMM
> using these ioctls to save and restore clock state can produce wild
> time jumps from the guest's perspective.
> 
> The patches in (2) address this mismatch by plumbing updates to clock
> frequency through kvm-clock to the guest. This seems like an important
> design choice for kvm-clock, and IMO deserves at least a clear
> statement of the goals for this interface, if not some more
> discussion. 

Design goals of what interface? KVM_GET_CLOCK / KVM_SET_CLOCK? 

The interfaces have been introduced to fix a bug.

> The (later) thread in (3) claims that synchronizing with
> host time is *not* a goal of kvm-clock.

It is not.

> To me, kvm-clock and the HyperV TSC page are extremely effective as
> simply a more enlightened path to the host TSC. Maintaining a
> high-performance path to the TSC in the face of updates is tricky -
> see the extended comment in pvclock_update_vm_gtod_copy, or the
> discussion on the patchset in (2). Is the cost of auditing that the
> path from host gettimeofday update -> kvm -> guest pvclock -> guest
> gettimeofday both tracks host time correctly and does not produce any
> backwards warps worth the added value, if it exists? As an
> alternative, implementing KVM_GET_CLOCK or the reference time MSR as a
> function of the last update to kvm-clock or the reference TSC page,
> respectively, sounds very straightforward.
>
> (Outside of masterclock mode, the requirement that the client
> synchronizes across cpus for montonicity smoothes over a lot of
> complexity - periodically updating kvm-clock to the current time is
> simple and works.)
> 
> Regardless of my opinion, I think that a clear statement of the design
> goals for kvm-clock (and kvm's implementation of the reference TSC
> page) would be valuable.

Documentation/virtual/kvm/timekeeping.txt


  reply	other threads:[~2016-02-24  3:58 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-24  2:31 What time is it kvm-clock? Owen Hofmann
2016-02-24  3:57 ` Marcelo Tosatti [this message]
2016-02-24 17:35   ` Peter Hornyack
2016-02-24 20:17     ` Radim Krčmář
2016-02-24 20:24       ` Andy Lutomirski
2016-02-24 20:53         ` Radim Krčmář
2016-02-25 11:13           ` Radim Krčmář
2016-02-25 11:22           ` Marcelo Tosatti
2016-02-24 23:35     ` Marcelo Tosatti
2016-02-24 23:36       ` Marcelo Tosatti
2016-02-25  1:19       ` Andy Lutomirski
2016-02-25  3:50         ` Owen Hofmann
2016-02-25 12:20           ` Radim Krčmář
2016-02-26 17:02             ` Andy Lutomirski
2016-02-26 19:30               ` Marcelo Tosatti
2016-02-27  0:00                 ` Andy Lutomirski
2016-02-25 11:36         ` Radim Krčmář
2016-02-25 12:12         ` Marcelo Tosatti
2016-02-24  3:59 ` Marcelo Tosatti
2016-02-24 14:14 ` Paolo Bonzini
2016-02-24 16:44   ` Andy Lutomirski
2016-02-24 17:38     ` Marcelo Tosatti
2016-02-24 19:38       ` Andy Lutomirski
2016-02-24 19:44         ` Paolo Bonzini
2016-02-24 19:52           ` Andy Lutomirski
2016-02-24 19:55         ` Owen Hofmann
2016-02-25 12:22           ` Joao Martins
2016-02-26 15:04 ` Marcelo Tosatti

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=20160224035753.GA6681@amt.cnet \
    --to=mtosatti@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=osh@google.com \
    --cc=pbonzini@redhat.com \
    --cc=peterhornyack@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