From: Marcelo Tosatti <mtosatti@redhat.com>
To: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: kvm@vger.kernel.org, qemu-devel <qemu-devel@nongnu.org>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Juan Quintela <quintela@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [QEMU PATCH] kvmclock: advance clock by time window between vm_stop and pre_save
Date: Fri, 4 Nov 2016 14:04:37 -0200 [thread overview]
Message-ID: <20161104160437.GB22546@amt.cnet> (raw)
In-Reply-To: <20161104152522.GC5388@potion>
On Fri, Nov 04, 2016 at 04:25:23PM +0100, Radim Krčmář wrote:
> 2016-11-04 07:43-0200, Marcelo Tosatti:
> > This patch, relative to pre-copy migration codepath,
> > measures the time between vm_stop() and pre_save(),
> > which includes copying the remaining RAM to destination,
> > and advances the clock by that amount.
> >
> > In a VM with 5 seconds downtime, this reduces the guest
> > clock difference on destination from 5s to 0.2s.
> >
> > Please do not apply this yet as some codepaths still need
> > checking, submitting early for comments.
>
> The time computation looks ok.
>
> We could make it slightly more precise by returning the CLOCK_MONOTONIC
> at which KVM_GET_CLOCK is read with the IOCTL, but we don't account the
> migration time anyway, so that precision would be wasted.
Yes, can be enhanced later... That should be about 1us? (return to
userspace).
> > Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
> >
> > diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c
> > @@ -100,6 +106,11 @@ static void kvmclock_vm_state_change(void *opaque, int running,
> > s->clock = time_at_migration;
> > }
> >
> > + 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?
Don't want to be fragile to ->ns being overwritten by pre_save executing
on the destination and overwriting the value passed in from
migration...
> (It is sad that we can't just query KVMClockState in kvmclock_pre_save
> because of the Linux bug.)
>
> > @@ -135,6 +146,18 @@ static void kvmclock_vm_state_change(void *opaque, int running,
> > abort();
> > }
> > s->clock = data.clock;
> > + /*
> > + * Transition from VM-running to VM-stopped via migration?
> > + * Record when the VM was stopped.
> > + */
> > +
> > + if (state == RUN_STATE_FINISH_MIGRATE &&
> > + !migration_in_postcopy(migrate_get_current())) {
> > + clock_gettime(CLOCK_MONOTONIC, &s->t_aftervmstop);
>
> How big (more like small) was the clock delta between here and
> kvmclock_pre_save with postcopy?
Haven't checked, but the clock delta is now 0.2s.
So i assume postcopy (stopping the VM, saving the device states)
should be about 0.2s.
I'll run and let you know.
WARNING: multiple messages have this Message-ID (diff)
From: Marcelo Tosatti <mtosatti@redhat.com>
To: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: kvm@vger.kernel.org, qemu-devel <qemu-devel@nongnu.org>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Juan Quintela <quintela@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [Qemu-devel] [QEMU PATCH] kvmclock: advance clock by time window between vm_stop and pre_save
Date: Fri, 4 Nov 2016 14:04:37 -0200 [thread overview]
Message-ID: <20161104160437.GB22546@amt.cnet> (raw)
In-Reply-To: <20161104152522.GC5388@potion>
On Fri, Nov 04, 2016 at 04:25:23PM +0100, Radim Krčmář wrote:
> 2016-11-04 07:43-0200, Marcelo Tosatti:
> > This patch, relative to pre-copy migration codepath,
> > measures the time between vm_stop() and pre_save(),
> > which includes copying the remaining RAM to destination,
> > and advances the clock by that amount.
> >
> > In a VM with 5 seconds downtime, this reduces the guest
> > clock difference on destination from 5s to 0.2s.
> >
> > Please do not apply this yet as some codepaths still need
> > checking, submitting early for comments.
>
> The time computation looks ok.
>
> We could make it slightly more precise by returning the CLOCK_MONOTONIC
> at which KVM_GET_CLOCK is read with the IOCTL, but we don't account the
> migration time anyway, so that precision would be wasted.
Yes, can be enhanced later... That should be about 1us? (return to
userspace).
> > Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
> >
> > diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c
> > @@ -100,6 +106,11 @@ static void kvmclock_vm_state_change(void *opaque, int running,
> > s->clock = time_at_migration;
> > }
> >
> > + 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?
Don't want to be fragile to ->ns being overwritten by pre_save executing
on the destination and overwriting the value passed in from
migration...
> (It is sad that we can't just query KVMClockState in kvmclock_pre_save
> because of the Linux bug.)
>
> > @@ -135,6 +146,18 @@ static void kvmclock_vm_state_change(void *opaque, int running,
> > abort();
> > }
> > s->clock = data.clock;
> > + /*
> > + * Transition from VM-running to VM-stopped via migration?
> > + * Record when the VM was stopped.
> > + */
> > +
> > + if (state == RUN_STATE_FINISH_MIGRATE &&
> > + !migration_in_postcopy(migrate_get_current())) {
> > + clock_gettime(CLOCK_MONOTONIC, &s->t_aftervmstop);
>
> How big (more like small) was the clock delta between here and
> kvmclock_pre_save with postcopy?
Haven't checked, but the clock delta is now 0.2s.
So i assume postcopy (stopping the VM, saving the device states)
should be about 0.2s.
I'll run and let you know.
next prev parent reply other threads:[~2016-11-04 16:25 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ář
2016-11-04 17:16 ` [Qemu-devel] " 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 [this message]
2016-11-04 16:04 ` 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=20161104160437.GB22546@amt.cnet \
--to=mtosatti@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=rkrcmar@redhat.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.