All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Fam Zheng <famz@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	Alberto Garcia <berto@igalia.com>,
	qemu-block@nongnu.org, qemu-devel@nongnu.org,
	Markus Armbruster <armbru@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] Closing Bitmaps (Was: Re: [PATCH v7 03/24] block: Release dirty bitmaps in bdrv_close())
Date: Tue, 17 Nov 2015 12:05:15 -0500	[thread overview]
Message-ID: <564B5E4B.4000406@redhat.com> (raw)
In-Reply-To: <20151117042251.GD28076@ad.usersys.redhat.com>



On 11/16/2015 11:22 PM, Fam Zheng wrote:
> On Mon, 11/16 12:07, John Snow wrote:
>>
>>
>> On 11/15/2015 08:27 PM, Fam Zheng wrote:
>>> On Fri, 11/13 17:49, John Snow wrote:
>>>>
>>>>
>>>> On 11/12/2015 01:23 AM, Fam Zheng wrote:
>>>>> On Mon, 11/09 23:39, Max Reitz wrote:
>>>>>> bdrv_delete() is not very happy about deleting BlockDriverStates with
>>>>>> dirty bitmaps still attached to them. In the past, we got around that
>>>>>> very easily by relying on bdrv_close_all() bypassing bdrv_delete(), and
>>>>>> bdrv_close() simply ignoring that condition. We should fix that by
>>>>>> releasing all dirty bitmaps in bdrv_close() and drop the assertion in
>>>>>> bdrv_delete().
>>>>>
>>>>> What bitmaps are attached when bdrv_close() is called?  The ones created from
>>>>> the monitor should probably be removed by the monitor, and the internal ones
>>>>> like in migration and block jobs should probably be removed by stopping the
>>>>> respective job.
>>>>>
>>>>> Fam
>>>>>
>>>>
>>>> Well in this case at least it appears we are still asserting that the
>>>> BDS has no job attached, so it shouldn't have any internal bitmaps
>>>> weighing it down, which just leaves the ones created by the QMP interface.
>>>>
>>>> How important is it that we ask the user to remove all of those bitmaps
>>>> themselves?
>>>>
>>>> It might become more important in the future when persistence is an
>>>> option and we go to close a transient bitmap -- but persistent bitmaps I
>>>> am sure it will be safe to just close out and flush to disk.
>>>>
>>>
>>> Yes, I was not saying we should expecting user to do that manually, but it
>>> would be good to be clear about different types of instances in the code.
>>>
>>> For now, it's unlikely a problem.
>>>
>>> Fam
>>>
>>
>> OK, just pointing out that I think it's unlikely we have any internal
>> bitmaps at this point since we assert that we have no jobs.
>>
>> We can actually test this, since internal bitmaps are anonymous and
>> user-created ones must always have a name.
>>
>> Tangent question: If a user closes a BDS node with a transient bitmap
>> attached, should we take any special action?
>>
>> i.e.; do we offer the user a last chance to save the bitmap somewhere,
>> or do we just do what we were asked and hope the user is competent?
>>
>> (I assume: No, we let the user shoot themselves in the foot if they want
>> to, but I wanted to ask the question.)
>>
>> --js
>>
> 
> For persistent dirty bitmaps, we must provide an interface with which user can
> make sure that, upon the shutting down of VM, the dirty bitmap file is in
> consistent with the image it is tracking.
> 
> With embedded dirty bitmap in qcow2 image, this shouldn't be a problem though,
> because qcow2_close can handle this internally.  But what about the senario
> with "raw image" + "incremental backup"?
> 
> Fam
> 

Still the subject of debate on-list, but the thought is roughly this:

Bitmaps will be able to flush-to-file on close. (If they have no
persistence data, it's a no-op (maybe.)) This might mean being flushed
to their own BDS -- the one they are describing -- as a qcow2 extension.
Or, it could be to an arbitrary new standalone file format designed for
the sole purpose of containing bitmap data.

The discussion hasn't progressed beyond "Max and Kevin do not think
storing arbitrary bitmaps in .qcow2 files is a good idea." The logical
conclusion is "We need a new standalone format, then" but we haven't
decided what that format will look like or how it will be used.

Then, Through CLI arguments or QMP arguments, you can modify the
persistence attributes of bitmaps -- choosing where to store them.
Bitmaps for qcow2 nodes can be stored in their own node, bitmaps
describing raw files will need to be stored in an external file.

(Is it possible to create a block driver that doesn't implement
read/write primitives, and only implements theoretical bitmap load/save
primitives? We could create a block driver for a standalone bitmap
container in this way...)

--js

  reply	other threads:[~2015-11-17 17:05 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-09 22:39 [Qemu-devel] [PATCH v7 for-2.6 00/24] block: Rework bdrv_close_all() Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 01/24] blockdev: Add missing bdrv_unref() in drive-backup Max Reitz
2015-11-12  6:14   ` Fam Zheng
2015-11-18 15:24   ` Kevin Wolf
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 02/24] blockjob: Call bdrv_unref() on creation error Max Reitz
2015-11-12  6:16   ` Fam Zheng
2015-11-18 15:24   ` Kevin Wolf
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 03/24] block: Release dirty bitmaps in bdrv_close() Max Reitz
2015-11-11 21:08   ` John Snow
2015-11-12  6:23   ` Fam Zheng
2015-11-13 22:49     ` John Snow
2015-11-16  1:27       ` Fam Zheng
2015-11-16 17:07         ` John Snow
2015-11-17  4:22           ` Fam Zheng
2015-11-17 17:05             ` John Snow [this message]
2015-11-18  2:29               ` [Qemu-devel] Closing Bitmaps (Was: Re: [PATCH v7 03/24] block: Release dirty bitmaps in bdrv_close()) Fam Zheng
2015-11-18 15:47                 ` John Snow
2015-11-18 15:03               ` Kevin Wolf
2015-11-18 15:49                 ` John Snow
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 04/24] iotests: Rename filter_nbd to _filter_nbd in 083 Max Reitz
2015-11-12  6:25   ` Fam Zheng
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 05/24] iotests: Change coding style of " Max Reitz
2015-11-12  6:25   ` Fam Zheng
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 06/24] iotests: Move _filter_nbd into common.filter Max Reitz
2015-11-12  6:26   ` Fam Zheng
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 07/24] iotests: Make _filter_nbd drop log lines Max Reitz
2015-11-12  6:27   ` Fam Zheng
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 08/24] iotests: Make _filter_nbd support more URL types Max Reitz
2015-11-12  6:28   ` Fam Zheng
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 09/24] iotests: Make redirecting qemu's stderr optional Max Reitz
2015-11-12  6:31   ` Fam Zheng
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 10/24] iotests: Add test for eject under NBD server Max Reitz
2015-11-11 21:46   ` John Snow
2015-11-12  6:37   ` Fam Zheng
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 11/24] block: Add BB-BDS remove/insert notifiers Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 12/24] virtio-blk: Functions for op blocker management Max Reitz
2015-11-25 15:57   ` Kevin Wolf
2015-11-25 16:03     ` Max Reitz
2015-11-25 16:18       ` Kevin Wolf
2015-11-25 16:26         ` Max Reitz
2015-11-26  7:48           ` Stefan Hajnoczi
2015-11-26 10:43             ` Kevin Wolf
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 13/24] virtio-scsi: Catch BDS-BB removal/insertion Max Reitz
2015-11-25 16:03   ` Kevin Wolf
2015-11-25 16:08     ` Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 14/24] nbd: Switch from close to eject notifier Max Reitz
2015-11-30 15:36   ` Kevin Wolf
2015-11-30 17:22     ` Max Reitz
2015-12-01 13:16       ` Kevin Wolf
2015-12-02 15:51         ` Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 15/24] block: Remove BDS close notifier Max Reitz
2015-11-30 15:38   ` Kevin Wolf
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 16/24] block: Use blk_remove_bs() in blk_delete() Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 17/24] blockdev: Use blk_remove_bs() in do_drive_del() Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 18/24] block: Make bdrv_close() static Max Reitz
2015-11-12  7:07   ` Fam Zheng
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 19/24] block: Add list of all BlockDriverStates Max Reitz
2015-11-12  7:12   ` Fam Zheng
2015-11-16 16:03     ` Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 20/24] blockdev: Keep track of monitor-owned BDS Max Reitz
2015-11-10  1:25   ` Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 21/24] block: Add blk_remove_all_bs() Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 22/24] block: Rewrite bdrv_close_all() Max Reitz
2015-11-12  7:34   ` Fam Zheng
2015-11-16 16:15     ` Max Reitz
2015-11-18  2:52       ` Fam Zheng
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 23/24] iotests: Add test for multiple BB on BDS tree Max Reitz
2015-11-09 22:39 ` [Qemu-devel] [PATCH v7 24/24] iotests: Add test for block jobs and BDS ejection Max Reitz
2015-11-30 16:23   ` Kevin Wolf
2015-11-30 17:44     ` Max Reitz
2015-11-25 16:09 ` [Qemu-devel] [PATCH v7 for-2.6 00/24] block: Rework bdrv_close_all() Kevin Wolf

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=564B5E4B.4000406@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berto@igalia.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.