From: "Michael S. Tsirkin" <mst@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Max Reitz <mreitz@redhat.com>, Kevin Wolf <kwolf@redhat.com>,
qemu-block@nongnu.org, qemu-devel@nongnu.org,
"Richard W.M. Jones" <rjones@redhat.com>,
stefanha@redhat.com
Subject: Re: [Qemu-devel] storing machine data in qcow images?
Date: Tue, 5 Jun 2018 22:47:40 +0300 [thread overview]
Message-ID: <20180605223934-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20180605190324.GA11372@localhost.localdomain>
On Tue, Jun 05, 2018 at 04:03:24PM -0300, Eduardo Habkost wrote:
> On Tue, Jun 05, 2018 at 10:21:59AM +0100, Dr. David Alan Gilbert wrote:
> > <reawakening a fizzled out thread>
> >
> > This seems to have fizzled out because of a lack of a concrete proposal;
> > so here is one based on a reply to Max's post:
> >
> > * Max Reitz (mreitz@redhat.com) wrote:
> >
> > <snip>
> >
> > > The original problem was that you need to supply a machine type to qemu,
> > > and that multiple common architectures now have multiple machine types
> > > and not necessarily all work with a single image. So far so good, but I
> > > have two issues here already:
> > >
> > > (1) How is qemu supposed to interpret that information? If it's stored
> > > in the image file, I don't see a nice way of retrieving it before the
> > > machine is initialized, at least not with qemu's current architecture.
> >
> > <snip>
> >
> > > (2) Again, I personally just really don't like saving such information
> > > in a disk image. One actual argument I can bring up for that distaste
> > > is this: Suppose, you have multiple images attached to your VM. Now the
> > > VM wants to store the machine type. Where does it go? Into all of
> > > them?
> >
> > <snip>
> >
> > > So I think if we decide to store the machine type, that is kind of a
> > > slippery slope and then there are good arguments for storing even more
> > > configuration options in the file, too. But I really, really don't like
> > > that.
> >
> > <snip>
> >
> > > For another, how do we store the data? key-value seems wrong if we want
> > > to store everything. JSON might be fine. But eventually we just want
> > > basically a qemu configuration file in there, I would think (which may
> > > support JSON at some point?). So basically we would store the data as
> > > a binary blob and let the rest of qemu do its thing with it. But then
> > > please tell me why I fought so valiantly against storing random bitmaps
> > > in qcow2 files. I hate the idea of making qcow2 a random archive
> > > format. We have tar for that.
> >
> > <snip>
> >
> > > tl;dr: I really don't get why it's so hard to supply a config file along
> > > with a qcow2 image. Is it so hard for people to realize that a VM does
> > > not only consist of a disk?
> >
> > Yes! Because in many cases that's all it needs, and it's ready to run
> > with no unpacking.
> >
> > I think we should have:
> >
> > --------------------------------------------------------------
> > Layer 0:
> > QCOW provides a way to store a single string of arbitrary (but
> > limited?) length.
> > QCOW provides a way to replace the string by a new string.
> > The original or the new string will be stored after that;
> > never some mix.
> > Where a file 'b' has a backing file 'a', 'b' inherits the
> > string from 'a' unless 'b' has it's own string.
> > Snapshots inherit their string from the main unless they have
> > their own string.
> >
> > Layer 1:
> > The string shall always be a JSON 'object'; i.e. of the form
> > { "something": ... , "more": ... }
> >
> > The key strings shall be non-null and non-empty and shall
> > be unique.
> >
>
> I'd prefer layer 0+1 to:
>
> 1) Allow multiple entries to be stored (implemented by layer 1
> in this proposal)
> 2) Identify each entry with a name (implemented by layer 1 in
> this proposal)
> 3) Allow arbitrary binary data to be stored on an entry
> (not possible with the JSON-based proposal, because JSON
> strings are not blobs, but Unicode strings).
> 4) Make it easy to replace only one entry while keeping others
> intact (not the case here, if all entries are stored in the
> same JSON string)
>
> I think it would be simpler if layer 0 simply provided a list of
> names/value pairs, where names are ascii strings, and values are
> binary data[1]. It would make layer 1 unnecessary, and allow (3)
> and (4) to happen.
>
> [1] In other words, Rich's proposal of "named blobs":
> https://www.mail-archive.com/qemu-block@nongnu.org/msg37856.html
I think simple is beautiful, too. But assuming they
really are binary how are blobs encoded?
Did binary really mean UTF-8 here?
>
> > Layer 2:
> > '.'s in the key string shall indicate hierarchy
> >
> > Key strings shall be listed in qemu's
> > docs/specs/qcow-keys.rst
> >
> > that shall indicate their meaning and the meaning and
> > valid formatting of the value associated with the,
> >
> > Key strings shall start with either:
> > qemu. in which case they must be listed in a file in
> > the qemu source tree
> >
> > a reverse dotted name unique to the submitter, they may
> > be listed in the same file in the source tree, e.g.
> > com.redhat.
> >
>
> Based on this proposal for layer 2, it looks like you expect the
> number of keys used on layer 1 to become large.
>
> I would prefer a solution that expects a very small set of keys
> for layer 0+1, and point to other specifications of how the blob
> can be interpreted for each key. This way we can experiment with
> different solutions for layers 2-4, instead of deciding on a
> specific format like JSON.
>
>
> > Layer 3:
> > QEMU shall, for a given qcow2 file be able to dump the
> > key values.
> >
> > Layer 4:
> > On creating a VM by importing a qcow2, a management layer
> > shall inspect the key/values to influence the configuration
> > of the VM created. Where it imports multiple qcow2's it
> > shall inspect all the files and flag disagreements.
> >
> > Management layers shall, on creating a qcow2 shall set the
> > keys based on the VM the qcow2 is created for. If the qcow2
> > is created as an additional disk for an exisitng VM it's
> > fine to leave the string empty (e.g. for a data disk).
> >
> > --------------------------------------------------------------
> >
> >
> > Some reasoning:
> > a) I've avoided the problem of when QEMU interprets the value
> > by ignoring it and giving it to management layers at the point
> > of VM import.
> > b) I hate JSON, but there again nailing down a fixed format
> > seems easiest and it makes the job of QCOW easy - a single
> > string.
> > (I would suggest in layer2 that the keys are sorted, but
> > that's a pain to do in some json creators)
> > c) Forcing the registry of keys might avoid silly duplication.
> > We can but hope.
> > d) I've not said it's a libvirt XML file since that seems
> > a bit prescriptive.
> >
> > Some initial suggested keys:
> >
> > "qemu.machine-types": [ "q35", "i440fx" ]
> > "qemu.min-ram-MB": 1024
> >
> >
> > Dave
> >
> > --
> > Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
> >
>
> --
> Eduardo
next prev parent reply other threads:[~2018-06-05 19:47 UTC|newest]
Thread overview: 157+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-18 15:30 [Qemu-devel] storing machine data in qcow images? Michael S. Tsirkin
2018-05-18 16:49 ` Eduardo Habkost
2018-05-18 17:09 ` Daniel P. Berrangé
2018-05-18 17:41 ` Eduardo Habkost
2018-05-19 6:05 ` Markus Armbruster
2018-05-21 18:29 ` Eduardo Habkost
2018-05-21 18:44 ` Daniel P. Berrangé
2018-05-21 19:01 ` Eduardo Habkost
2018-05-23 11:19 ` Markus Armbruster
2018-05-23 12:13 ` Eduardo Habkost
2018-05-23 16:35 ` Markus Armbruster
2018-05-29 14:06 ` Dr. David Alan Gilbert
2018-06-05 21:58 ` Michal Suchánek
2018-05-21 20:18 ` Daniel P. Berrangé
2018-05-21 20:33 ` Eduardo Habkost
2018-05-24 9:58 ` Kashyap Chamarthy
2018-05-22 7:35 ` Gerd Hoffmann
2018-05-22 10:53 ` Eduardo Habkost
2018-05-22 14:19 ` Michael S. Tsirkin
2018-05-22 15:02 ` Kevin Wolf
2018-05-22 15:14 ` Eduardo Habkost
2018-05-23 2:12 ` Fam Zheng
2018-05-23 9:16 ` Kevin Wolf
2018-05-23 14:46 ` Michael S. Tsirkin
2018-05-24 11:17 ` Richard W.M. Jones
2018-05-29 14:03 ` Dr. David Alan Gilbert
2018-05-29 14:14 ` Eduardo Habkost
2018-05-29 14:51 ` Richard W.M. Jones
2018-05-29 15:31 ` Dr. David Alan Gilbert
2018-05-22 8:50 ` Philipp Hahn
2018-05-24 11:32 ` Richard W.M. Jones
2018-05-24 14:56 ` Michael S. Tsirkin
2018-05-24 15:08 ` Kevin Wolf
2018-05-24 15:19 ` Michael S. Tsirkin
2018-05-24 15:20 ` Richard W.M. Jones
2018-05-24 16:25 ` Markus Armbruster
2018-05-28 18:10 ` Max Reitz
2018-05-28 18:30 ` Richard W.M. Jones
2018-05-28 18:38 ` Kevin Wolf
2018-05-28 18:44 ` Max Reitz
2018-05-28 19:09 ` Kevin Wolf
2018-05-29 9:23 ` Max Reitz
2018-05-29 10:14 ` Kevin Wolf
2018-05-29 13:16 ` Eduardo Habkost
2018-05-28 21:20 ` Richard W.M. Jones
2018-05-28 21:25 ` Richard W.M. Jones
2018-05-29 6:44 ` Kevin Wolf
2018-05-29 10:14 ` Max Reitz
2018-06-05 9:21 ` Dr. David Alan Gilbert
2018-06-05 19:03 ` Eduardo Habkost
2018-06-05 19:47 ` Michael S. Tsirkin [this message]
2018-06-05 19:54 ` [Qemu-devel] [Qemu-block] " Eric Blake
2018-06-05 19:58 ` Richard W.M. Jones
2018-06-05 20:09 ` Eric Blake
2018-06-05 20:28 ` Michael S. Tsirkin
2018-06-05 20:46 ` Eric Blake
2018-06-05 21:26 ` Michael S. Tsirkin
2018-06-06 8:07 ` Dr. David Alan Gilbert
2018-06-06 6:23 ` Gerd Hoffmann
2018-06-05 20:06 ` Michael S. Tsirkin
2018-06-06 6:26 ` [Qemu-devel] " Gerd Hoffmann
2018-06-06 9:44 ` Dr. David Alan Gilbert
2018-06-06 13:35 ` Eduardo Habkost
2018-06-06 11:02 ` Max Reitz
2018-06-06 11:14 ` Dr. David Alan Gilbert
2018-06-06 11:26 ` Max Reitz
2018-06-06 12:00 ` Dr. David Alan Gilbert
2018-06-06 12:59 ` Max Reitz
2018-06-06 14:31 ` Dr. David Alan Gilbert
2018-06-06 14:37 ` Daniel P. Berrangé
2018-06-06 14:42 ` Dr. David Alan Gilbert
2018-06-06 14:51 ` Max Reitz
2018-06-06 15:05 ` Dr. David Alan Gilbert
2018-06-06 15:36 ` Eric Blake
2018-06-06 16:11 ` Michal Suchánek
2018-06-06 16:37 ` Eric Blake
2018-06-06 16:32 ` Daniel P. Berrangé
2018-06-06 16:36 ` Dr. David Alan Gilbert
2018-06-07 10:02 ` Andrea Bolognani
2018-06-07 10:22 ` Daniel P. Berrangé
2018-06-07 11:17 ` Andrea Bolognani
2018-06-07 12:38 ` Daniel P. Berrangé
2018-06-07 13:49 ` Dr. David Alan Gilbert
2018-06-07 14:06 ` Andrea Bolognani
2018-06-07 14:45 ` Dr. David Alan Gilbert
2018-06-07 14:56 ` Andrea Bolognani
2018-06-07 15:25 ` Dr. David Alan Gilbert
2018-06-07 20:38 ` Gerd Hoffmann
2018-06-07 10:32 ` Richard W.M. Jones
2018-06-07 10:35 ` Dr. David Alan Gilbert
2018-06-07 10:36 ` Daniel P. Berrangé
2018-06-07 10:54 ` Andrea Bolognani
2018-06-07 19:24 ` Laszlo Ersek
2018-06-08 8:21 ` Dr. David Alan Gilbert
2018-06-08 8:41 ` Daniel P. Berrangé
2018-06-08 8:53 ` Dr. David Alan Gilbert
2018-06-07 21:19 ` Michael S. Tsirkin
2018-06-07 21:18 ` Michael S. Tsirkin
2018-06-07 10:51 ` Andrea Bolognani
2018-06-07 19:38 ` Laszlo Ersek
2018-06-06 17:49 ` Max Reitz
2018-06-06 15:09 ` Michael S. Tsirkin
2018-06-06 17:06 ` Max Reitz
2018-06-07 21:43 ` Michael S. Tsirkin
2018-06-09 21:34 ` Max Reitz
2018-06-11 2:06 ` Michael S. Tsirkin
2018-06-11 8:16 ` Michal Suchánek
2018-06-06 11:42 ` Richard W.M. Jones
2018-06-06 11:48 ` Daniel P. Berrangé
2018-06-06 11:53 ` Max Reitz
2018-06-06 12:03 ` Dr. David Alan Gilbert
2018-06-06 13:15 ` Max Reitz
2018-06-06 12:29 ` Richard W.M. Jones
2018-06-06 11:22 ` [Qemu-devel] [Qemu-block] " Peter Krempa
2018-06-06 10:32 ` [Qemu-devel] " Michal Suchánek
2018-06-06 11:02 ` Max Reitz
2018-06-06 11:19 ` Michal Suchánek
2018-06-06 11:32 ` Max Reitz
2018-06-06 11:37 ` Dr. David Alan Gilbert
2018-06-06 11:44 ` Max Reitz
2018-06-06 12:16 ` Dr. David Alan Gilbert
2018-06-06 13:22 ` Max Reitz
2018-06-06 14:02 ` Dr. David Alan Gilbert
2018-06-06 14:33 ` Max Reitz
2018-06-06 14:41 ` Dr. David Alan Gilbert
2018-06-06 14:55 ` Max Reitz
2018-06-06 15:25 ` Michal Suchánek
2018-06-06 18:02 ` Max Reitz
2018-06-06 18:33 ` Michal Suchánek
2018-06-06 18:36 ` Eduardo Habkost
2018-06-07 18:27 ` [Qemu-devel] [Qemu-block] " Kashyap Chamarthy
2018-06-06 13:42 ` [Qemu-devel] " Eduardo Habkost
2018-06-06 14:55 ` Michael S. Tsirkin
2018-06-06 14:57 ` Max Reitz
2018-06-11 14:10 ` Kevin Wolf
2018-06-06 14:46 ` Michael S. Tsirkin
2018-06-06 15:04 ` Max Reitz
2018-06-06 11:43 ` Michal Suchánek
2018-06-06 11:52 ` Max Reitz
2018-06-06 12:13 ` Michal Suchánek
2018-06-06 13:14 ` Max Reitz
2018-06-06 13:45 ` Michal Suchánek
2018-06-06 13:50 ` Daniel P. Berrangé
2018-06-06 14:14 ` Eduardo Habkost
2018-06-06 14:21 ` Max Reitz
2018-06-06 14:24 ` Daniel P. Berrangé
2018-06-06 14:17 ` Max Reitz
2018-06-06 16:10 ` Eduardo Habkost
2018-06-06 18:09 ` Max Reitz
2018-06-11 8:44 ` Richard W.M. Jones
2018-06-06 11:40 ` Richard W.M. Jones
2018-06-06 14:31 ` Michael S. Tsirkin
2018-06-06 14:43 ` Michael S. Tsirkin
2018-06-06 14:57 ` Eric Blake
2018-06-06 20:39 ` Eric Blake
2018-06-06 21:01 ` Gerd Hoffmann
2018-06-06 15:02 ` Max Reitz
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=20180605223934-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rjones@redhat.com \
--cc=stefanha@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).