qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH v6 2/8] qmp: Add optional bool "unmap" to drive-


From: Fam Zheng
Subject: Re: [Qemu-block] [PATCH v6 2/8] qmp: Add optional bool "unmap" to drive-mirror
Date: Wed, 3 Jun 2015 15:13:48 +0800
User-agent: Mutt/1.5.23 (2014-03-12)

On Tue, 06/02 11:28, Eric Blake wrote:
> On 05/27/2015 11:29 PM, Fam Zheng wrote:
> > If specified as "true", it allows discarding on target sectors where source 
> > is
> > not allocated.
> > 
> > Signed-off-by: Fam Zheng <address@hidden>
> > ---
> 
> > +++ b/qapi/block-core.json
> > @@ -954,6 +954,11 @@
> >  # @on-target-error: #optional the action to take on an error on the target,
> >  #                   default 'report' (no limitations, since this applies to
> >  #                   a different block device than @device).
> > +# @unmap: #optional Whether to try to unmap target sectors where source has
> > +#         only zero. If true, and target unallocated sectors will read as 
> > zero,
> > +#         target image sectors will be unmapped; otherwise, zeroes will be
> > +#         written. Both will result in identical contents.
> > +#         Default is true. (Since 2.4)
> 
> Just making sure I understand:
> 
> The guest sees identical contents, but with "unmap":true, the host file
> is potentially sparse, while with "unmap":false, the host file is
> fully-allocated.
> 
> Also, while the default is now true, this doesn't tell me what the
> behavior was in 2.3.  Is this a new default behavior (where in 2.3 you
> could not preserve sparseness), or a new knob (previously you always got
> a sparse copy, and could not request full allocation)?  I'm okay either
> way, but I'm trying to understand whether libvirt should advertise this
> knob to higher-level apps, and if so, what libvirt should do when it
> detects qemu 2.3 (that is, should it tell upper-level apps that
> sparseness cannot be preserved, or that full allocation cannot be
> guaranteed, when the "unmap" parameter is not detected).

We always skip sectors which are initially unallocated (at the time of mirror
job starting), actually this even stays true for both unmap=true and
unmap=false now.

The difference is how we handle sectors discarded *after* mirror job starts:

Before, we ignore the *discard*, which means the target remains populated, with
old data before discard.

After, we honor the discard, depending on two factors:

    source read as zero    unmap                 RESULT
==========================================================================

           Y               true       write zero with BDRV_REQ_MAY_UNMAP

           Y               false      write zero without BDRV_REQ_MAY_UNMAP

           N               both       discard (note that on some protocols
                                      this may be nop)

In other words, the unmap option only affects sector X if:

1) in the beginning, sector X was allocated
2) drive-mirror starts
3) sector X got discarded at source side

All in all, this is quite advisory.

Fam



reply via email to

[Prev in Thread] Current Thread [Next in Thread]