From: Marcelo Tosatti <mtosatti@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: mst@redhat.com, qemu-devel@nongnu.org,
"Maxiwell S. Garcia" <maxiwell@linux.ibm.com>,
pbonzini@redhat.com, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH] migration: Do not re-read the clock on pre_save in case of paused guest
Date: Mon, 2 Sep 2019 13:53:58 -0300 [thread overview]
Message-ID: <20190902165354.GA27729@amt.cnet> (raw)
In-Reply-To: <20190829211842.GC3694@habkost.net>
Looks good.
Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com>
On Thu, Aug 29, 2019 at 06:18:42PM -0300, Eduardo Habkost wrote:
> CCing Marcelo, who wrote kvm_update_clock() and
> kvmclock_pre_save().
>
> On Thu, Aug 29, 2019 at 06:07:11PM -0300, Maxiwell S. Garcia wrote:
> > The clock move makes the guest knows about the paused time between the
> > 'stop' and 'migrate' commands. This is an issue in an already-paused
> > VM because some side effects, like process stalls, could happen
> > after migration.
> >
> > So, this patch checks the runstate of guest in the pre_save handler and
> > do not re-reads the clock in case of paused state (cold migration).
> >
> > Signed-off-by: Maxiwell S. Garcia <maxiwell@linux.ibm.com>
> > ---
> > hw/i386/kvm/clock.c | 15 +++++++++++----
> > 1 file changed, 11 insertions(+), 4 deletions(-)
> >
> > diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c
> > index 80c133a724..2c59b6894b 100644
> > --- a/hw/i386/kvm/clock.c
> > +++ b/hw/i386/kvm/clock.c
> > @@ -41,6 +41,9 @@ typedef struct KVMClockState {
> > uint64_t clock;
> > bool clock_valid;
> >
> > + /* whether the 'clock' value was obtained in the 'paused' state */
> > + bool runstate_paused;
> > +
> > /* whether machine type supports reliable KVM_GET_CLOCK */
> > bool mach_use_reliable_get_clock;
> >
> > @@ -202,6 +205,8 @@ static void kvmclock_vm_state_change(void *opaque, int running,
> > return;
> > }
> >
> > + s->runstate_paused = runstate_check(RUN_STATE_PAUSED);
> > +
> > kvm_synchronize_all_tsc();
> >
> > kvm_update_clock(s);
> > @@ -260,9 +265,9 @@ static int kvmclock_pre_load(void *opaque)
> > }
> >
> > /*
> > - * When migrating, read the clock just before migration,
> > - * so that the guest clock counts during the events
> > - * between:
> > + * When migrating a running guest, read the clock just
> > + * before migration, so that the guest clock counts
> > + * during the events between:
> > *
> > * * vm_stop()
> > * *
> > @@ -277,7 +282,9 @@ static int kvmclock_pre_save(void *opaque)
> > {
> > KVMClockState *s = opaque;
> >
> > - kvm_update_clock(s);
> > + if (!s->runstate_paused) {
> > + kvm_update_clock(s);
> > + }
> >
> > return 0;
> > }
> > --
> > 2.20.1
> >
>
> --
> Eduardo
prev parent reply other threads:[~2019-09-02 16:55 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-29 21:07 [Qemu-devel] [PATCH] migration: Do not re-read the clock on pre_save in case of paused guest Maxiwell S. Garcia
2019-08-29 21:18 ` Eduardo Habkost
2019-09-02 16:53 ` Marcelo Tosatti [this message]
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=20190902165354.GA27729@amt.cnet \
--to=mtosatti@redhat.com \
--cc=ehabkost@redhat.com \
--cc=maxiwell@linux.ibm.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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.