From: John Snow <jsnow@redhat.com>
To: "Daniel P. Berrange" <berrange@redhat.com>,
Stefan Hajnoczi <stefanha@gmail.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
Fam Zheng <famz@redhat.com>, Qemu-block <qemu-block@nongnu.org>,
qemu-devel <qemu-devel@nongnu.org>, Max Reitz <mreitz@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [Qemu-block] Persistent bitmaps for non-qcow2 formats
Date: Wed, 30 Aug 2017 17:39:26 -0400 [thread overview]
Message-ID: <4943b893-ff3c-317b-efef-7115bff79d49@redhat.com> (raw)
In-Reply-To: <20170830134528.GR18526@redhat.com>
On 08/30/2017 09:45 AM, Daniel P. Berrange wrote:
> On Wed, Aug 30, 2017 at 02:36:11PM +0100, Stefan Hajnoczi wrote:
>> On Tue, Aug 22, 2017 at 03:07:04PM -0400, John Snow wrote:
>>> (3) Add either a new flag that turns qcow2's backing file into a full
>>> R/W backing file, or add a new extension to qcow2 entirely (bypassing
>>> the traditional backing file mechanism to avoid confusion for older
>>> tooling) that adds a new read-write backing file field.
>>>
>>> This RW backing file field will be used for all reads AND writes; the
>>> qcow2 in question becomes a metadata container on top of the BDS chain.
>>> We can re-use Vladimir's bitmap persistence extension to save bitmaps in
>>> a qcow2 shell.
>>>
>>> The qcow2 becomes effectively a metadata cache for a new (essentially)
>>> filter node that handles features such as bitmaps. This could also be
>>> used to provide allocation map data for RAW files and other goodies down
>>> the road.
>>>
>>> Hopefully this achieves our desire to not create new formats AND our
>>> desire to concentrate features (and debugging, testing, etc) into qcow2,
>>> while allowing users to "have bitmaps with raw files."
>>>
>>> Of course, in this scenario, users now have two files: a qcow2 wrapper
>>> and the actual raw file in question; but regardless of how we were going
>>> to solve this, a raw file necessitates an external file of some sort,
>>> else we give up the idea that it was a raw file.
>>
>> There is some complexity here for management tools:
>>
>> If the underlying image is resized, who resizes the qcow2 and how do
>> they know to do it?
>>
>> If QEMU's resize/truncate command it used, does first try to resize the
>> underlying image and then resize the qcow2? This is probably the sanest
>> approach.
>>
>> If the underlying image is moved to a new location, does the qcow2 file
>> need to be modified and who does that?
>>
>> Management tools need to figure out how to represent manage this extra
>> qcow2 file. The easiest solution is to punt it to the user and treat it
>> as part of a backing file chain. If the management tool wants to
>> automatically manage the qcow2 so the user just specifies the underlying
>> image and enables the persistent bitmap checkbox, then it becomes more
>> complicated.
>
> Indeed, I don't think it is practical to have libvirt / QEMU automagically
> create a qcow2 overlay on disk. Something has to decide where this would
> be stored. You might say just put it alongside the raw file, but it might
> not be a local file at all, it could be a NBD, or RBD raw "file". So do
> we create local qcow2 file, or store a qcow2 file inside another RBD
> volume to hold the persistent bitmap. This kind of decision needs to be
> made by the mgmt app since only it knows about its storage mgmt model.
Oh, you mean to say mgmt app like VMM or something even above libvirt,
yes? Who currently makes the decision for where snapshot files and the
like goes, does libvirt not decide that, but the app using it?
> At this point you might as well just let the mgmt app take care of it
> all and not try to do anything magical with qcow2 overlays in libvirt/QEMU
>
Might be the sanest, yes -- but say I don't offer an "automagic" way to
add a bitmap to a raw file to a running QEMU instance but rather offer a
way to qcow2ify an existing node:
We could create a wrapper:
qemu-img create -f qcow2 -o wrapper wrapper.qcow2
Then add a node:
blockdev_add driver=qcow2 node-name=foo file.driver=file
file.filename=wrapper.qcow2
(The size of the drive could perhaps remain as zero temporarily here)
Then some magic to make it the active target of whatever blockbackend
was using the old image, perhaps?:
blockdev_magic target=virtioblk0 node-name=foo
At this point, virtioblk0 is now backed by our new magic qcow2 node
which provides bitmap features for whatever kind of backing storage
virtioblk0 had, and nothing automagic happened -- we passed explicit
file references.
Any magic that we wish to provide can happen in libvirt or above.
--js
next prev parent reply other threads:[~2017-08-30 21:39 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-22 19:07 [Qemu-devel] Persistent bitmaps for non-qcow2 formats John Snow
2017-08-23 8:59 ` Vladimir Sementsov-Ogievskiy
2017-08-23 18:04 ` Vladimir Sementsov-Ogievskiy
2017-08-23 18:37 ` Vladimir Sementsov-Ogievskiy
2017-08-25 0:55 ` John Snow
2017-08-25 12:05 ` Vladimir Sementsov-Ogievskiy
2017-08-25 13:44 ` Max Reitz
2017-08-28 2:57 ` Fam Zheng
2017-08-28 18:11 ` John Snow
2017-08-29 9:26 ` Yaniv Lavi (Dary)
2017-08-30 10:35 ` Max Reitz
2017-08-30 12:58 ` Yaniv Lavi (Dary)
2017-08-30 21:25 ` John Snow
2017-08-31 7:53 ` Yaniv Lavi (Dary)
2017-09-05 13:01 ` Kevin Wolf
2017-09-05 13:18 ` Fam Zheng
2017-09-05 13:27 ` Kevin Wolf
2017-09-05 13:39 ` Fam Zheng
2017-09-05 14:39 ` Kevin Wolf
2017-08-29 1:18 ` John Snow
2017-08-29 14:30 ` Eric Blake
2017-08-29 21:02 ` John Snow
2017-08-30 11:18 ` Max Reitz
2017-08-30 11:14 ` Max Reitz
2017-08-23 17:31 ` Max Reitz
2017-08-23 17:44 ` John Snow
2017-09-05 13:15 ` Kevin Wolf
2017-08-30 13:36 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2017-08-30 13:45 ` Daniel P. Berrange
2017-08-30 21:39 ` John Snow [this message]
2017-09-05 11:46 ` [Qemu-devel] " Kevin Wolf
2017-09-06 13:11 ` Stefan Hajnoczi
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=4943b893-ff3c-317b-efef-7115bff79d49@redhat.com \
--to=jsnow@redhat.com \
--cc=berrange@redhat.com \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=stefanha@redhat.com \
--cc=vsementsov@virtuozzo.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).