All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luiz Capitulino <lcapitulino@redhat.com>
To: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: Amit Shah <amit.shah@redhat.com>, qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [RFC] qemu-ga: Introduce guest-hibernate command
Date: Fri, 9 Dec 2011 10:22:25 -0200	[thread overview]
Message-ID: <20111209102225.18dd2d42@doriath> (raw)
In-Reply-To: <4EE17DE8.5080503@linux.vnet.ibm.com>

On Thu, 08 Dec 2011 21:18:00 -0600
Michael Roth <mdroth@linux.vnet.ibm.com> wrote:

> On 12/08/2011 12:52 PM, Luiz Capitulino wrote:
> > This is basically suspend to disk on a Linux guest.
> >
> > Signed-off-by: Luiz Capitulino<lcapitulino@redhat.com>
> > ---
> >
> > This is an RFC because I did it as simple as possible and I'm open to
> > suggestions...
> >
> > Now, while testing this or even "echo disk>  /sys/power/state" I get several
> > funny results. Some times qemu just dies after printing that message:
> >
> >   "Guest moved used index from 20151 to 1"
> >
> > Some times it doesn't die, but I'm unable to log into the guest: I type
> > username&  password but the terminal kind of locks (the shell doesn't run).
> >
> > Some times it works...
> >
> 
> Here's the tail-end of the trace...
> 
> virtio_queue_notify 237.880 vdev=0x7f11f4c8f5e0 n=0x0 vq=0x7f11f4cb4d40
> virtqueue_pop 3.701 vq=0x7f11f4cb4d40 elem=0x7f11f5966118 in_num=0x2 
> out_num=0x1
> virtio_blk_rw_complete 51.613 req=0x7f11f5966110 ret=0x0
> virtio_blk_req_complete 1.327 req=0x7f11f5966110 status=0x0
> virtqueue_fill 1.187 vq=0x7f11f4cb4d40 elem=0x7f11f5966118 len=0x1001 
> idx=0x0
> virtqueue_flush 1.746 vq=0x7f11f4cb4d40 count=0x1
> virtio_notify 1.537 vdev=0x7f11f4c8f5e0 vq=0x7f11f4cb4d40
> virtio_queue_notify 374.978 vdev=0x7f11f4c8f5e0 n=0x0 vq=0x7f11f4cb4d40
> virtqueue_pop 3.631 vq=0x7f11f4cb4d40 elem=0x7f11f5faec58 in_num=0x2 
> out_num=0x1
> virtio_blk_rw_complete 49.029 req=0x7f11f5faec50 ret=0x0
> virtio_blk_req_complete 1.327 req=0x7f11f5faec50 status=0x0
> virtqueue_fill 1.327 vq=0x7f11f4cb4d40 elem=0x7f11f5faec58 len=0x1001 
> idx=0x0
> virtqueue_flush 1.746 vq=0x7f11f4cb4d40 count=0x1
> virtio_notify 1.397 vdev=0x7f11f4c8f5e0 vq=0x7f11f4cb4d40
> virtio_queue_notify 245.073 vdev=0x7f11f4c8f5e0 n=0x0 vq=0x7f11f4cb4d40
> virtqueue_pop 3.631 vq=0x7f11f4cb4d40 elem=0x7f11f5966118 in_num=0x2 
> out_num=0x1
> virtio_blk_rw_complete 47.702 req=0x7f11f5966110 ret=0x0
> virtio_blk_req_complete 1.257 req=0x7f11f5966110 status=0x0
> virtqueue_fill 1.327 vq=0x7f11f4cb4d40 elem=0x7f11f5966118 len=0x1001 
> idx=0x0
> virtqueue_flush 1.816 vq=0x7f11f4cb4d40 count=0x1
> virtio_notify 1.327 vdev=0x7f11f4c8f5e0 vq=0x7f11f4cb4d40
> virtio_queue_notify 450.616 vdev=0x7f11f4c8f5e0 n=0x0 vq=0x7f11f4cb4d40
> virtqueue_pop 4.051 vq=0x7f11f4cb4d40 elem=0x7f11f5faec58 in_num=0x2 
> out_num=0x1
> virtio_blk_rw_complete 67.885 req=0x7f11f5faec50 ret=0x0
> virtio_blk_req_complete 1.327 req=0x7f11f5faec50 status=0x0
> virtqueue_fill 1.327 vq=0x7f11f4cb4d40 elem=0x7f11f5faec58 len=0x1001 
> idx=0x0
> 
> ...
> virtio_queue_notify 374.978 vdev=0x7f11f4c8f5e0 n=0x0 vq=0x7f11f4cb4d40
> virtqueue_pop 3.631 vq=0x7f11f4cb4d40 elem=0x7f11f5faec58 in_num=0x2 
> out_num=0x1
> virtio_blk_rw_complete 49.029 req=0x7f11f5faec50 ret=0x0
> virtio_blk_req_complete 1.327 req=0x7f11f5faec50 status=0x0
> virtqueue_fill 1.327 vq=0x7f11f4cb4d40 elem=0x7f11f5faec58 len=0x1001 
> idx=0x0
> virtqueue_flush 1.746 vq=0x7f11f4cb4d40 count=0x1
> virtio_notify 1.397 vdev=0x7f11f4c8f5e0 vq=0x7f11f4cb4d40
> virtio_queue_notify 245.073 vdev=0x7f11f4c8f5e0 n=0x0 vq=0x7f11f4cb4d40
> virtqueue_pop 3.631 vq=0x7f11f4cb4d40 elem=0x7f11f5966118 in_num=0x2 
> out_num=0x1
> virtio_blk_rw_complete 47.702 req=0x7f11f5966110 ret=0x0
> virtio_blk_req_complete 1.257 req=0x7f11f5966110 status=0x0
> virtqueue_fill 1.327 vq=0x7f11f4cb4d40 elem=0x7f11f5966118 len=0x1001 
> idx=0x0
> virtqueue_flush 1.816 vq=0x7f11f4cb4d40 count=0x1
> virtio_notify 1.327 vdev=0x7f11f4c8f5e0 vq=0x7f11f4cb4d40
> virtio_queue_notify 450.616 vdev=0x7f11f4c8f5e0 n=0x0 vq=0x7f11f4cb4d40
> virtqueue_pop 4.051 vq=0x7f11f4cb4d40 elem=0x7f11f5faec58 in_num=0x2 
> out_num=0x1
> virtio_blk_rw_complete 67.885 req=0x7f11f5faec50 ret=0x0
> virtio_blk_req_complete 1.327 req=0x7f11f5faec50 status=0x0
> virtqueue_fill 1.327 vq=0x7f11f4cb4d40 elem=0x7f11f5faec58 len=0x1001 
> idx=0x0
> virtqueue_flush 1.607 vq=0x7f11f4cb4d40 count=0x1
> virtio_notify 1.257 vdev=0x7f11f4c8f5e0 vq=0x7f11f4cb4d40
> virtio_queue_notify 196.813 vdev=0x7f11f4c8f5e0 n=0x0 vq=0x7f11f4cb4d40
> virtqueue_pop 3.562 vq=0x7f11f4cb4d40 elem=0x7f11f5966118 in_num=0x2 
> out_num=0x1
> virtio_blk_rw_complete 47.492 req=0x7f11f5966110 ret=0x0
> virtio_blk_req_complete 1.327 req=0x7f11f5966110 status=0x0
> virtqueue_fill 1.327 vq=0x7f11f4cb4d40 elem=0x7f11f5966118 len=0x1001 
> idx=0x0
> virtqueue_flush 1.676 vq=0x7f11f4cb4d40 count=0x1
> virtio_notify 1.397 vdev=0x7f11f4c8f5e0 vq=0x7f11f4cb4d40
> virtio_queue_notify 882289.570 vdev=0x7f11f4c8f5e0 n=0x0 vq=0x7f11f4cb4d40
> 
> It doesn't seem to tell us much...but there's a bunch of successful 
> reads before the final virtio_queue_notify, and that notify takes quite 
> a bit longer than the previous ones. I can only speculate at this point, 
> but I would guess this is when the guest has completed loading the saved 
> memory from disk and it attempting to restore the previous state..
> 
> In the kernel there's a virtio_pci_suspend() PM callback that seems to 
> get called around this time and restores the PCI config from 
> virtio_pci_resume(). Could that be switching us to an older vring and 
> throwing the QEMU side out of whack?

Not sure. But Amit has confirmed that it's a virtio bug and he's working
on it. Right Amit?

> 
> 
> >   qapi-schema-guest.json     |   11 +++++++++++
> >   qga/guest-agent-commands.c |   19 +++++++++++++++++++
> >   2 files changed, 30 insertions(+), 0 deletions(-)
> >
> > diff --git a/qapi-schema-guest.json b/qapi-schema-guest.json
> > index fde5971..2c5bbcf 100644
> > --- a/qapi-schema-guest.json
> > +++ b/qapi-schema-guest.json
> > @@ -215,3 +215,14 @@
> >   ##
> >   { 'command': 'guest-fsfreeze-thaw',
> >     'returns': 'int' }
> > +
> > +##
> > +# @guest-hibernate
> > +#
> > +# Save RAM contents to disk and powerdown the guest.
> > +#
> > +# Notes: This command doesn't return on success.
> > +#
> > +# Since: 1.1
> > +##
> > +{ 'command': 'guest-hibernate' }
> > diff --git a/qga/guest-agent-commands.c b/qga/guest-agent-commands.c
> > index 6da9904..9dd4060 100644
> > --- a/qga/guest-agent-commands.c
> > +++ b/qga/guest-agent-commands.c
> > @@ -550,6 +550,25 @@ int64_t qmp_guest_fsfreeze_thaw(Error **err)
> >   }
> >   #endif
> >
> > +#define LINUX_SYS_STATE_FILE "/sys/power/state"
> > +
> > +void qmp_guest_hibernate(Error **err)
> > +{
> > +    int fd;
> > +
> > +    fd = open(LINUX_SYS_STATE_FILE, O_WRONLY);
> > +    if (fd<  0) {
> > +        error_set(err, QERR_OPEN_FILE_FAILED, LINUX_SYS_STATE_FILE);
> > +        return;
> > +    }
> > +
> > +    if (write(fd, "disk", 4)<  0) {
> > +        error_set(err, QERR_UNDEFINED_ERROR);
> > +    }
> > +
> > +    close(fd);
> > +}
> > +
> >   /* register init/cleanup routines for stateful command groups */
> >   void ga_command_state_init(GAState *s, GACommandState *cs)
> >   {
> 

  reply	other threads:[~2011-12-09 12:22 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-08 18:52 [Qemu-devel] [RFC] qemu-ga: Introduce guest-hibernate command Luiz Capitulino
2011-12-08 19:07 ` Daniel P. Berrange
2011-12-08 19:16   ` Luiz Capitulino
2011-12-08 23:11 ` Andreas Färber
2011-12-09  1:14 ` Michael Roth
2011-12-09 12:23   ` Luiz Capitulino
2011-12-09  3:18 ` Michael Roth
2011-12-09 12:22   ` Luiz Capitulino [this message]
2011-12-09 12:35     ` Amit Shah
2011-12-09  5:01 ` Amit Shah
2011-12-11 10:00 ` Dor Laor
2011-12-12 12:39   ` Luiz Capitulino

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=20111209102225.18dd2d42@doriath \
    --to=lcapitulino@redhat.com \
    --cc=amit.shah@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /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.