qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 1.8 5/6] qemu-img: add option to align writes to


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 1.8 5/6] qemu-img: add option to align writes to cluster_sectors during convert
Date: Mon, 25 Nov 2013 16:11:36 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130923 Thunderbird/17.0.9

Il 25/11/2013 14:57, Peter Lieven ha scritto:
> Signed-off-by: Peter Lieven <address@hidden>

Ok, given this patch I think the cluster_size is the right one to use
here---and also the way you used the optimal unmap granularity makes
sense; you could also use MAX(optimal unmap granularity, optimal
transfer length granularity).

However, there is no need to write one cluster at a time.  What matters,
I think, is to align the *end* of the transfer, so that the next
transfer can start aligned.

> +            if (align && cluster_sectors > 0) {
> +                int64_t next_aligned_sector = (sector_num + cluster_sectors);

So this should be "+ n", not "+ cluster_sectors".

Perhaps it could be conditional on "n > cluster_sectors" (small requests
happen when you have sparse region, and breaking them doesn't help).

Finally, I believe there is no need for a separate "-a" knob.

The patch looks fine to me with these small changes, though.

Also, a couple of ideas for separate patches.  Perhaps the default value
of "-S" could be cluster_size if specified?  This would avoid making raw
images too fragmented, and compounding filesystem-level fragmentation
with qcow2-level fragmentation.  And 4K is too small a default in my
opinion; it could be easily changed to 64K, though 4K was of course an
improvement compared to 512 before commit a22f123 (qemu-img: Require
larger zero areas for sparse handling, 2011-08-26).

Paolo

> +                next_aligned_sector -= next_aligned_sector % cluster_sectors;
> +                if (sector_num + n > next_aligned_sector) {
> +                    n = next_aligned_sector - sector_num;
> +                }
> +            }
> +
>              if (n > bs_offset + bs_sectors - sector_num) {
>                  n = bs_offset + bs_sectors - sector_num;
>              }
> diff --git a/qemu-img.texi b/qemu-img.texi
> index 87f9d0f..9b1720f 100644
> --- a/qemu-img.texi
> +++ b/qemu-img.texi
> @@ -179,11 +179,14 @@ Error on reading data
>  
>  @end table
>  
> address@hidden convert [-c] [-p] [-n] [-f @var{fmt}] [-t @var{cache}] [-O 
> @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S 
> @var{sparse_size}] [-m @var{iobuf_size}] @var{filename} address@hidden [...]] 
> @var{output_filename}
> address@hidden convert [-c] [-p] [-n] [-a] [-f @var{fmt}] [-t @var{cache}] 
> [-O @var{output_fmt}] [-o @var{options}] [-s @var{snapshot_name}] [-S 
> @var{sparse_size}] [-m @var{iobuf_size}] @var{filename} address@hidden [...]] 
> @var{output_filename}
>  
>  Convert the disk image @var{filename} or a snapshot @var{snapshot_name} to 
> disk image @var{output_filename}
>  using format @var{output_fmt}. It can be optionally compressed (@code{-c}
>  option) or use any format specific options like encryption (@code{-o} 
> option).
> +If the @code{-a} option is specified write requests will be aligned
> +to the cluster size of the output image if possible. This is the default
> +for compressed images.
>  
>  Only the formats @code{qcow} and @code{qcow2} support compression. The
>  compression is read-only. It means that if a compressed sector is
> 




reply via email to

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