From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
kvm@vger.kernel.org, qemu-devel <qemu-devel@nongnu.org>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Juan Quintela <quintela@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
Roman Kagan <rkagan@virtuozzo.com>
Subject: Re: [QEMU PATCH] kvmclock: advance clock by time window between vm_stop and pre_save
Date: Fri, 4 Nov 2016 18:16:06 +0100 [thread overview]
Message-ID: <20161104171605.GE5388@potion> (raw)
In-Reply-To: <1217f6ce-8143-8d0e-97f6-470926438992@redhat.com>
2016-11-04 16:57+0100, Paolo Bonzini:
> On 04/11/2016 16:48, Radim Krčmář wrote:
>> 2016-11-04 16:33+0100, Paolo Bonzini:
>>> On 04/11/2016 16:25, Radim Krčmář wrote:
>>>>>>
>>>>>> + if (s->advance_clock && s->clock + s->advance_clock > s->clock) {
>>>>>> + s->clock += s->advance_clock;
>>>>>> + s->advance_clock = 0;
>>>>>> + }
>>>> Can't the advance_clock added to the migrated KVMClockState instead of
>>>> passing it as another parameter?
>>>>
>>>> (It is sad that we can't just query KVMClockState in kvmclock_pre_save
>>>> because of the Linux bug.)
>>>
>>> What Linux bug? The one that makes us use kvmclock_current_nsec?
>>
>> No, the one that forced Marcelo to add the 10 minute limit to the
>> advance_clock. We wouldn't need this advance_clock hack if we could
>> just call KVM_GET_CLOCK like we did before 00f4d64ee76e ("kvmclock:
>> clock should count only if vm is running").
>
> There are two cases:
>
> - migrating a paused guest
>
> - pausing at the end of migration
>
> In the first case, kvmclock_vm_state_change's !running branch will see
> state == RUN_STATE_FINISH_MIGRATE && s->clock_valid. In the second
> case, it will see state == RUN_STATE_FINISH_MIGRATE && !s->clock_valid.
I lift my case, marcelo's said that stopping the time is a feature ...
(*kittens die*)
> In the second case it should do nothing. Then kvmclock_pre_save will
> see !s->clock_valid and call KVM_GET_CLOCK. A bonus is that, if
> migration fails and migration_thread() calls vm_start(), then the guest
> will not see the clock drift backwards.
Yes, moving KVM_GET_CLOCK to kvmclock_pre_save() and doing nothing in
kvmclock_vm_state_change() to avoid the drift on failed migration would
be nicer. We'd then also get rid of the ns migration parameter.
>>> It should work with 4.9-rc (well, once Linus applies my pull request).
>>> 4.9-rc will not return ktime_get_ns for KVM_GET_CLOCK; it will return
>>> the raw value from the kernel timekeeper.
Oh, and this does introduce a minor bug to this patch -- the time
counted by KVM_GET_CLOCK is has different frequency CLOCK_MONOTONIC.
Not accounting for that is bearable.
>>> I'm thinking that we should add a KVM capability for this, and skip
>>> kvmclock_current_nsec if the capability is present. The first part is
>>> trivial, so we can do it even during Linux rc period.
>>
>> I agree, that sounds like a nice improvement.
>
> Ok, I'll send the KVM patch then. It can even be the value *returned*
> for KVM_CAP_ADJUST_CLOCK---right now it returns 1, we can return 3 (bit
> 0 for KVM_CAP_ADJUST_CLOCK_RESENT and bit 1 for returning the raw
> value). Any suggestion for the name?
KVM_CAP_GET_CLOCK_MASTERCLOCK?
to show that the time is counted differently when using master clock.
Another idea would be KVM_CAP_GET_CLOCK_ACTUAL, because we should now
read what the guest is seeing.
WARNING: multiple messages have this Message-ID (diff)
From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
kvm@vger.kernel.org, qemu-devel <qemu-devel@nongnu.org>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Juan Quintela <quintela@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
Roman Kagan <rkagan@virtuozzo.com>
Subject: Re: [Qemu-devel] [QEMU PATCH] kvmclock: advance clock by time window between vm_stop and pre_save
Date: Fri, 4 Nov 2016 18:16:06 +0100 [thread overview]
Message-ID: <20161104171605.GE5388@potion> (raw)
In-Reply-To: <1217f6ce-8143-8d0e-97f6-470926438992@redhat.com>
2016-11-04 16:57+0100, Paolo Bonzini:
> On 04/11/2016 16:48, Radim Krčmář wrote:
>> 2016-11-04 16:33+0100, Paolo Bonzini:
>>> On 04/11/2016 16:25, Radim Krčmář wrote:
>>>>>>
>>>>>> + if (s->advance_clock && s->clock + s->advance_clock > s->clock) {
>>>>>> + s->clock += s->advance_clock;
>>>>>> + s->advance_clock = 0;
>>>>>> + }
>>>> Can't the advance_clock added to the migrated KVMClockState instead of
>>>> passing it as another parameter?
>>>>
>>>> (It is sad that we can't just query KVMClockState in kvmclock_pre_save
>>>> because of the Linux bug.)
>>>
>>> What Linux bug? The one that makes us use kvmclock_current_nsec?
>>
>> No, the one that forced Marcelo to add the 10 minute limit to the
>> advance_clock. We wouldn't need this advance_clock hack if we could
>> just call KVM_GET_CLOCK like we did before 00f4d64ee76e ("kvmclock:
>> clock should count only if vm is running").
>
> There are two cases:
>
> - migrating a paused guest
>
> - pausing at the end of migration
>
> In the first case, kvmclock_vm_state_change's !running branch will see
> state == RUN_STATE_FINISH_MIGRATE && s->clock_valid. In the second
> case, it will see state == RUN_STATE_FINISH_MIGRATE && !s->clock_valid.
I lift my case, marcelo's said that stopping the time is a feature ...
(*kittens die*)
> In the second case it should do nothing. Then kvmclock_pre_save will
> see !s->clock_valid and call KVM_GET_CLOCK. A bonus is that, if
> migration fails and migration_thread() calls vm_start(), then the guest
> will not see the clock drift backwards.
Yes, moving KVM_GET_CLOCK to kvmclock_pre_save() and doing nothing in
kvmclock_vm_state_change() to avoid the drift on failed migration would
be nicer. We'd then also get rid of the ns migration parameter.
>>> It should work with 4.9-rc (well, once Linus applies my pull request).
>>> 4.9-rc will not return ktime_get_ns for KVM_GET_CLOCK; it will return
>>> the raw value from the kernel timekeeper.
Oh, and this does introduce a minor bug to this patch -- the time
counted by KVM_GET_CLOCK is has different frequency CLOCK_MONOTONIC.
Not accounting for that is bearable.
>>> I'm thinking that we should add a KVM capability for this, and skip
>>> kvmclock_current_nsec if the capability is present. The first part is
>>> trivial, so we can do it even during Linux rc period.
>>
>> I agree, that sounds like a nice improvement.
>
> Ok, I'll send the KVM patch then. It can even be the value *returned*
> for KVM_CAP_ADJUST_CLOCK---right now it returns 1, we can return 3 (bit
> 0 for KVM_CAP_ADJUST_CLOCK_RESENT and bit 1 for returning the raw
> value). Any suggestion for the name?
KVM_CAP_GET_CLOCK_MASTERCLOCK?
to show that the time is counted differently when using master clock.
Another idea would be KVM_CAP_GET_CLOCK_ACTUAL, because we should now
read what the guest is seeing.
next prev parent reply other threads:[~2016-11-04 17:16 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-04 9:43 [QEMU PATCH] kvmclock: advance clock by time window between vm_stop and pre_save Marcelo Tosatti
2016-11-04 9:43 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 12:28 ` Juan Quintela
2016-11-04 12:28 ` [Qemu-devel] " Juan Quintela
2016-11-04 12:35 ` Marcelo Tosatti
2016-11-04 12:35 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 14:00 ` Marcelo Tosatti
2016-11-04 14:00 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 15:25 ` Radim Krčmář
2016-11-04 15:25 ` [Qemu-devel] " Radim Krčmář
2016-11-04 15:33 ` Paolo Bonzini
2016-11-04 15:33 ` [Qemu-devel] " Paolo Bonzini
2016-11-04 15:48 ` Radim Krčmář
2016-11-04 15:48 ` [Qemu-devel] " Radim Krčmář
2016-11-04 15:57 ` Paolo Bonzini
2016-11-04 15:57 ` [Qemu-devel] " Paolo Bonzini
2016-11-04 17:16 ` Radim Krčmář [this message]
2016-11-04 17:16 ` Radim Krčmář
2016-11-04 21:29 ` Paolo Bonzini
2016-11-04 21:29 ` [Qemu-devel] " Paolo Bonzini
2016-11-04 21:47 ` Marcelo Tosatti
2016-11-04 21:47 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 22:35 ` Paolo Bonzini
2016-11-04 22:35 ` [Qemu-devel] " Paolo Bonzini
2016-11-07 14:31 ` Roman Kagan
2016-11-07 14:31 ` [Qemu-devel] " Roman Kagan
2016-11-07 19:31 ` Marcelo Tosatti
2016-11-07 19:31 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 16:24 ` Marcelo Tosatti
2016-11-04 16:24 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 17:34 ` Radim Krčmář
2016-11-04 17:34 ` [Qemu-devel] " Radim Krčmář
2016-11-04 18:29 ` Marcelo Tosatti
2016-11-04 18:29 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 20:07 ` Radim Krčmář
2016-11-04 20:07 ` [Qemu-devel] " Radim Krčmář
2016-11-04 16:04 ` Marcelo Tosatti
2016-11-04 16:04 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 17:07 ` Marcelo Tosatti
2016-11-04 17:07 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 17:39 ` Radim Krčmář
2016-11-04 17:39 ` [Qemu-devel] " Radim Krčmář
2016-11-04 18:31 ` Marcelo Tosatti
2016-11-04 18:31 ` [Qemu-devel] " Marcelo Tosatti
2016-11-07 13:08 ` Dr. David Alan Gilbert
2016-11-07 13:08 ` [Qemu-devel] " Dr. David Alan Gilbert
2016-11-04 16:59 ` [QEMU PATCH v2] " Marcelo Tosatti
2016-11-04 16:59 ` [Qemu-devel] " Marcelo Tosatti
2016-11-04 18:57 ` Juan Quintela
2016-11-04 18:57 ` [Qemu-devel] " Juan Quintela
2016-11-07 15:46 ` Dr. David Alan Gilbert
2016-11-07 15:46 ` [Qemu-devel] " Dr. David Alan Gilbert
2016-11-07 19:41 ` Marcelo Tosatti
2016-11-07 19:41 ` [Qemu-devel] " Marcelo Tosatti
2016-11-07 20:03 ` Dr. David Alan Gilbert
2016-11-07 20:03 ` [Qemu-devel] " Dr. David Alan Gilbert
2016-11-08 0:06 ` Marcelo Tosatti
2016-11-08 0:06 ` [Qemu-devel] " Marcelo Tosatti
2016-11-08 10:22 ` Dr. David Alan Gilbert
2016-11-08 10:22 ` [Qemu-devel] " Dr. David Alan Gilbert
2016-11-08 13:32 ` Marcelo Tosatti
2016-11-08 13:32 ` [Qemu-devel] " Marcelo Tosatti
2016-11-09 19:32 ` Marcelo Tosatti
2016-11-09 19:32 ` [Qemu-devel] " Marcelo Tosatti
2016-11-09 16:23 ` Paolo Bonzini
2016-11-09 16:23 ` [Qemu-devel] " Paolo Bonzini
2016-11-09 16:28 ` Dr. David Alan Gilbert
2016-11-09 16:28 ` [Qemu-devel] " Dr. David Alan Gilbert
2016-11-09 16:33 ` Paolo Bonzini
2016-11-09 16:33 ` [Qemu-devel] " Paolo Bonzini
2016-11-10 11:48 ` Marcelo Tosatti
2016-11-10 11:48 ` [Qemu-devel] " Marcelo Tosatti
2016-11-10 17:57 ` Paolo Bonzini
2016-11-10 17:57 ` [Qemu-devel] " Paolo Bonzini
2016-11-11 14:23 ` Marcelo Tosatti
2016-11-11 14:23 ` [Qemu-devel] " Marcelo Tosatti
2017-02-07 10:02 ` Wanpeng Li
2017-02-07 10:02 ` [Qemu-devel] " Wanpeng Li
2017-02-07 12:18 ` Marcelo Tosatti
2017-02-07 12:18 ` [Qemu-devel] " 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=20161104171605.GE5388@potion \
--to=rkrcmar@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=rkagan@virtuozzo.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.