From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Marcelo Tosatti <mtosatti@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 16:25:23 +0100 [thread overview]
Message-ID: <20161104152522.GC5388@potion> (raw)
In-Reply-To: <20161104094322.GA16930@amt.cnet>
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.
> 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?
(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?
Thanks.
WARNING: multiple messages have this Message-ID (diff)
From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Marcelo Tosatti <mtosatti@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 16:25:23 +0100 [thread overview]
Message-ID: <20161104152522.GC5388@potion> (raw)
In-Reply-To: <20161104094322.GA16930@amt.cnet>
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.
> 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?
(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?
Thanks.
next prev parent reply other threads:[~2016-11-04 15: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ář [this message]
2016-11-04 15:25 ` 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
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=20161104152522.GC5388@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 \
/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.