From: Anthony Liguori <anthony@codemonkey.ws>
To: Kevin Wolf <kwolf@redhat.com>
Cc: Christoph Hellwig <chellwig@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
qemu-devel@nongnu.org, Luiz Capitulino <lcapitulino@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>, Avi Kivity <avi@redhat.com>
Subject: [Qemu-devel] Re: block: format vs. protocol, and how they stack
Date: Mon, 21 Jun 2010 08:37:58 -0500 [thread overview]
Message-ID: <4C1F6B36.8070508@codemonkey.ws> (raw)
In-Reply-To: <4C1F6973.5020003@redhat.com>
On 06/21/2010 08:30 AM, Kevin Wolf wrote:
> Am 21.06.2010 15:09, schrieb Anthony Liguori:
>
>> On 06/21/2010 03:19 AM, Kevin Wolf wrote:
>>
>>> Am 20.06.2010 12:51, schrieb Avi Kivity:
>>>
>>>
>>>> On 06/18/2010 03:59 PM, Markus Armbruster wrote:
>>>>
>>>>
>>>>> The code is pretty confused about format vs. protocol, and so are we.
>>>>> Let's try to figure them out.
>>>>>
>>>>> From cruising altitude, all this format, protocol, stacking business
>>>>> doesn't matter. We provide a bunch of arguments, and get an image.
>>>>>
>>>>> If you look more closely, providing that image involves sub-tasks. One
>>>>> is to haul bits. Another one is to translate between bits in different
>>>>> formats.
>>>>>
>>>>> Working hypothesis:
>>>>>
>>>>> * A protocol hauls image bits. Examples: file, host_device, nbd.
>>>>>
>>>>> * A format translates image formats. Examples: raw, qcow2.
>>>>>
>>>>>
>>>>>
>>>>>
>>>> Is there a reason to make the distinction? Is there a reason to expose
>>>> the distinction to the user?
>>>>
>>>>
>>> There are good reasons to make that distinction internally. There's no
>>> need to expose it to the user - the question is if it helps or not.
>>>
>>>
>> If we drop the distinction, then I think the remaining issue is how to
>> expose the stacking to a user.
>>
>> Right now, we could have a syntax like:
>>
>> -blockdev format=file,file=image.qcow2,id=base \
>> -blockdev format=qcow2,backing_dev=base,id=blk1
>>
>> backing_dev is a sucky name, but hopefully the point is clear. I think
>> the following would be a better user syntax:
>>
>> -blockdev format=qcow2,file=image.qcow2,id=blk1
>>
>> I think the easiest way to support this is to make qcow2 take a file
>> parameter and have it open the file with default options. For users
>> that need anything more sophisticated a user has to use the former syntax.
>>
> Not only qcow2, but also raw, qcow, vmdk, vdi, bochs, cow, dmg, ...
>
> In short: Any format needs an underlying protocol. You may not call it
> by its name, but that's effectively what you'd implement. And if you
> implemented it in each format driver instead of generic code, you'd be
> doing a bad implementation.
>
Sure. I don't think it would be all that difficult to implement in
common code.
> The more I think about it, the more I believe that the logic of how qemu
> handles things is made much clearer if we actually call it by its name
> and expose the distinction to the user.
>
> "If there is no protocol specified, qemu will pick one automatically"
> vs. "If you specify an image in raw, qcow2, qcow, vmdk, vdi, bochs, cow,
> dmg or blkdebug format and you have no backing_dev specified, qemu will
> pick one automatically; it won't do so for images in file, host_device,
> host_flopy, host_cdrom, nbd, http or vvfat format." It's an easy choice.
>
Are you basically saying:
[1] -blockdev format=qcow2,protocol=file,file=foo.img,id=blk1
Because what I was suggesting is that we don't allow protocol=XX here.
We would try to guess the protocol from foo.img. If a user wishes to
override this, they should do the full syntax of:
[2] -blockdev protocol=host_dev,file=/dev/sda,id=base \
-blockdev format=qcow2,backing_dev=base,id=blk1
But we're also suggesting s/protocol/format/ because the distinction
doesn't seem to be important unless you try to support syntax [1] and
you need a mechanism to specify the leaf format (which you're calling a
protocol).
Regards,
Anthony Liguori
>> We can still support format probing. We should drop any support for
>> parameter passing via file name too (with nbd and vfat).
>>
> For -blockdev, agreed. We need to retain it with -drive, though.
>
> Kevin
>
next prev parent reply other threads:[~2010-06-21 13:38 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-18 12:59 [Qemu-devel] block: format vs. protocol, and how they stack Markus Armbruster
2010-06-20 10:51 ` [Qemu-devel] " Avi Kivity
2010-06-21 7:00 ` Markus Armbruster
2010-06-22 16:46 ` Jamie Lokier
2010-06-21 8:19 ` Kevin Wolf
2010-06-21 13:09 ` Anthony Liguori
2010-06-21 13:30 ` Kevin Wolf
2010-06-21 13:37 ` Anthony Liguori [this message]
2010-06-21 14:01 ` Kevin Wolf
2010-06-21 14:51 ` Anthony Liguori
2010-06-21 14:52 ` Anthony Liguori
2010-06-21 15:00 ` Christoph Hellwig
2010-06-21 15:22 ` Paul Brook
2010-06-21 15:37 ` Anthony Liguori
2010-06-21 16:01 ` Christoph Hellwig
2010-06-21 16:09 ` Anthony Liguori
2010-06-21 16:36 ` Markus Armbruster
2010-06-21 16:21 ` Markus Armbruster
2010-06-22 8:32 ` Kevin Wolf
2010-06-22 14:24 ` Markus Armbruster
2010-06-28 10:28 ` Christoph Hellwig
2010-06-22 16:30 ` Jamie Lokier
2010-06-21 15:34 ` Anthony Liguori
2010-06-22 8:10 ` Kevin Wolf
2010-06-22 12:39 ` Anthony Liguori
2010-06-22 12:57 ` Kevin Wolf
2010-06-22 13:07 ` Anthony Liguori
2010-06-21 15:56 ` Markus Armbruster
2010-06-22 8:22 ` Kevin Wolf
2010-06-22 16:40 ` Jamie Lokier
2010-06-22 16:56 ` Daniel P. Berrange
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=4C1F6B36.8070508@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=armbru@redhat.com \
--cc=avi@redhat.com \
--cc=chellwig@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.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 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).