From: Paolo Bonzini <pbonzini@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Juan Quintela <quintela@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>,
Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH v2 01/10] qapi: add Visitor interfaces for uint*_t and int*_t
Date: Wed, 21 Dec 2011 17:52:19 +0100 [thread overview]
Message-ID: <4EF20EC3.4030603@redhat.com> (raw)
In-Reply-To: <4EF20829.50303@codemonkey.ws>
On 12/21/2011 05:24 PM, Anthony Liguori wrote:
> Ok, I get what you're suggesting. You would like to continue to keep
> VMStateDescription describing both the QEMUFile format and the fields.
I don't "like" to do that, but yes, that's what I'm suggesting. :)
You envision having the front-end (state->introspectable state
representation) and back-end (state representation->serialization)
completely decoupled in the future, with migration filters in the middle
if necessary.
I actually agree this is as the final direction. For this reason, the
first step should be to decouple the front-end and backend and actually
have this introspectable state representation. Then you can also break
VMStateDescription apart into a front-end and backend part.
Mike's patches change the way you write to QEMUFile, so the new code
_does_ go in the right direction. However, they fail to provide an
introspectable, backend-independent state representation. Let's put it
in a few diagrams:
where we are now: struct ---> QEMUFile
^
|
VMStateDescription
what Mike's patches do: struct ---> QEMUFileVisitor ---> QEMUFile
^
|
VMStateDescription
what I proposed: struct ---> QMPOutputVisitor ---> QObject
^
|
VMStateDescription
QObject ---> QEMUFile
^
|
VMStateDescription
where you want to go: struct ---> QMPOutputVisitor ---> QObject
^
|
DeviceStateDescription
QObject ---> QEMUFileOutputVisitor ---> QEMUFile
^
|
VMStateDescription
As Mike's patches stand, I'm worried that they would make further steps
harder rather than easier. This is because I'm not convinced that the
QEMUFileOutputVisitor is actually useful.
However, the new code from Mike's patches is very close to the
backend-independent representation from the VMStateDescription. So,
Mike's patches could be morphed into this pretty easily:
struct ---> QMPOutputVisitor ---> QObject
^
|
VMStateDescription
struct ---> QEMUFile \
^ \ that's savevm.c,
| / unchanged
VMStateDescription /
This is an intermediate state that lets us do the next steps:
- serialize to QEMUFile from a QObject;
- reintroduce Mike's QEMUFileOutputVisitor [I don't really see the
benefit of this];
- split the DeviceStateDescription and the VMStateDescription;
None of these three steps are a prerequisite for introducing a new
migration format.
> One of the reasons for this split up is because I would like to generate
> the first table by IDL and make the second table not dependent on
> structure members (so we don't end up with all the hacks we have with
> dummy struct fields).
That would be a few years away. Let's reason in incremental steps.
Paolo
next prev parent reply other threads:[~2011-12-21 16:52 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-27 17:06 [Qemu-devel] [PATCH v2 00/10] do savevm/migration save/load via Visitor interface Michael Roth
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 01/10] qapi: add Visitor interfaces for uint*_t and int*_t Michael Roth
2011-12-20 11:12 ` Paolo Bonzini
2011-12-20 11:43 ` Paolo Bonzini
2011-12-20 12:00 ` Paolo Bonzini
2011-12-20 13:50 ` Anthony Liguori
2011-12-20 14:30 ` Paolo Bonzini
2011-12-20 20:22 ` Michael Roth
2011-12-21 12:29 ` Paolo Bonzini
2011-12-20 20:56 ` Anthony Liguori
2011-12-21 12:35 ` Paolo Bonzini
2011-12-21 14:45 ` Anthony Liguori
2011-12-21 15:39 ` Paolo Bonzini
2011-12-21 16:24 ` Anthony Liguori
2011-12-21 16:52 ` Paolo Bonzini [this message]
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 02/10] qapi: add QemuFileOutputVisitor Michael Roth
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 03/10] qapi: add QemuFileInputVisitor Michael Roth
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 04/10] savevm: move QEMUFile interfaces into qemu-file.c Michael Roth
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 05/10] qapi: test cases for QEMUFile input/output visitors Michael Roth
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 06/10] qemu-file: add QEMUFile<->visitor lookup routines Michael Roth
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 07/10] trace: qemu_(put|get)_(byte|buffer) events Michael Roth
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 08/10] trace: add trace statements for visitor interface Michael Roth
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 09/10] qapi: add trace statements to qapi-visit-core.c Michael Roth
2011-10-27 17:06 ` [Qemu-devel] [PATCH v2 10/10] vmstate: use visitors Michael Roth
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=4EF20EC3.4030603@redhat.com \
--to=pbonzini@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=mdroth@linux.vnet.ibm.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 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).