qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: Wen Congyang <wency@cn.fujitsu.com>
Cc: Jan Kiszka <jan.kiszka@siemens.com>,
	qemu-devel <qemu-devel@nongnu.org>,
	Luiz Capitulino <lcapitulino@redhat.com>,
	HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>,
	Dave Anderson <anderson@redhat.com>,
	Jun Koi <junkoi2004@gmail.com>
Subject: Re: [Qemu-devel] [RFC][PATCH 00/15 v5] introducing a new, dedicated memory dump mechanism
Date: Mon, 30 Jan 2012 10:38:51 -0700	[thread overview]
Message-ID: <4F26D5AB.9040801@redhat.com> (raw)
In-Reply-To: <4F262D44.9040109@cn.fujitsu.com>

[-- Attachment #1: Type: text/plain, Size: 3013 bytes --]

On 01/29/2012 10:40 PM, Wen Congyang wrote:
>>> Yes, it may tak a lot of time. But we dump a guest memory when the guest
>>> panics, and there is no need to continue to run the guest.
>>
>> Would it be possible to have both a dump from a certain point in time
>> and still allow the guest to run unpaused?
>>
>> I'm thinking something along the lines of pausing the guest, setting up
>> control structures, then calling fork().  The parent can then unpause,
>> and use the control structures to communicate the memory state from the
>> child back out the monitor.  Meanwhile, the guest has a copy-on-write
>> clone of the entire memory state, so as long as the control structures
>> guarantee that the child will not accept any monitor commands and not
>> resume the guest, then the child process can be used to stream the
>> memory contents as they were at the time of the dump command back over
>> the control structure back to the parent process.  I will admit,
>> however, that following the fork(), you would be limited to
>> async-signal-safe functions, so it may be a rather difficult task to design.
>>
> 
> I do not understand this section. Do you say the reason of allowing the guest
> to run unpaused? Or do you say the way to do it?

Among other reasons for supporting a guest that runs in parallel with a
memory dump, I'm envisioning a thin-provisioning setup.  Right now, you
have to get a common off-line base disk image state, then each cloned
guest has to boot from scratch as a delta from that base state.  But it
would be a lot faster if you could get a common on-line VM state, and
start cloned guests from the same memory state as the baseline.  Taking
it further, I can envision a forensic-style application, that runs
what-if scenarios, by running two similar guests side by side and seeing
what happens when only one of the two guests has a particular tweak
made.  Or suppose you have a production server, and want to apply a
patch, but want to make sure the patch will work before committing to it
- the obvious way is to apply the patch to a temporary cloned VM. But
because it is a production server, you can't afford to wait for a long
downtime with the guest paused just to capture the machine state for
cloning a temporary VM for testing out the patch.

Basically, in all of these scenarios, my idea is that it should be easy
(well, at least easier than it currently is), to create a new guest
based on the memory state of an existing guest, all without impacting
the existing guest.  And to do that, it would be nice to be able to
reliably dump the state of memory of a guest at a given point of time,
all while continuing to let the original guest run past that point in time.

But whether this has to be done right away, or whether it even fits in
with your 'dump' command vs. needing a command of its own, I don't know.

-- 
Eric Blake   eblake@redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 620 bytes --]

  reply	other threads:[~2012-01-30 17:39 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-19  2:50 [Qemu-devel] [RFC][PATCH 00/15 v5] introducing a new, dedicated memory dump mechanism Wen Congyang
2012-01-19  3:06 ` [Qemu-devel] [RFC][PATCH 01/15] monitor: introduce qemu_suspend_monitor()/qemu_resume_monitor() Wen Congyang
2012-01-19  3:06 ` [Qemu-devel] [RFC][PATCH 02/15] Add API to create memory mapping list Wen Congyang
2012-01-19  3:06 ` [Qemu-devel] [RFC][PATCH 03/15] Add API to check whether a physical address is I/O address Wen Congyang
2012-01-19  3:06 ` [Qemu-devel] [RFC][PATCH 04/15] target-i386: implement cpu_get_memory_mapping() Wen Congyang
2012-01-19  3:06 ` [Qemu-devel] [RFC][PATCH 05/15] Add API to get memory mapping Wen Congyang
2012-01-19  3:06 ` [Qemu-devel] [RFC][PATCH 06/15] target-i386: Add API to write elf notes to core file Wen Congyang
2012-01-19  3:06 ` [Qemu-devel] [RFC][PATCH 07/15] target-i386: Add API to add extra memory mapping Wen Congyang
2012-01-19  3:07 ` [Qemu-devel] [RFC][PATCH 08/15] target-i386: add API to get dump info Wen Congyang
2012-01-19  3:07 ` [Qemu-devel] [RFC][PATCH 09/15] introduce a new monitor command 'dump' to dump guest's memory Wen Congyang
2012-01-19 16:32   ` Eric Blake
2012-01-30  5:36     ` Wen Congyang
2012-01-30 17:19       ` Eric Blake
2012-01-31  1:39         ` Wen Congyang
2012-01-19  3:07 ` [Qemu-devel] [RFC][PATCH 10/15] run dump at the background Wen Congyang
2012-01-19  3:07 ` [Qemu-devel] [RFC][PATCH 11/15 v5] support detached dump Wen Congyang
2012-01-19  3:07 ` [Qemu-devel] [RFC][PATCH 12/15 v5] support to cancel the current dumping Wen Congyang
2012-01-19  3:07 ` [Qemu-devel] [RFC][PATCH 13/15 v5] support to set dumping speed Wen Congyang
2012-01-19  3:07 ` [Qemu-devel] [RFC][PATCH 14/15 v5] support to query dumping status Wen Congyang
2012-01-19  3:07 ` [Qemu-devel] [RFC][PATCH 15/15 v5] auto cancel dumping after vm state is changed to run Wen Congyang
2012-01-19  3:32 ` [Qemu-devel] [RFC][PATCH 00/15 v5] introducing a new, dedicated memory dump mechanism Jun Koi
2012-01-19  3:39   ` Wen Congyang
2012-01-19 16:34     ` Eric Blake
2012-01-30  5:40       ` Wen Congyang
2012-01-30 17:38         ` Eric Blake [this message]
2012-01-31  1:35           ` Wen Congyang

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=4F26D5AB.9040801@redhat.com \
    --to=eblake@redhat.com \
    --cc=anderson@redhat.com \
    --cc=d.hatayama@jp.fujitsu.com \
    --cc=jan.kiszka@siemens.com \
    --cc=junkoi2004@gmail.com \
    --cc=lcapitulino@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=wency@cn.fujitsu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).