On 25.11.2013 16:11, Paolo Bonzini wrote:
Il 25/11/2013 14:57, Peter Lieven ha scritto:
Signed-off-by: Peter Lieven <p...@kamp.de>
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).
would you also agree to n >= cluster_sectors. In my case
and if especially if n is bound by iobuf_size the case n > cluster_sectors
will be hard to meet.

Peter


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 -@item 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} [@var{filename2} [...]] @var{output_filename}
+@item 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} [@var{filename2} [...]] 
@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



--

Mit freundlichen Grüßen

Peter Lieven

...........................................................

  KAMP Netzwerkdienste GmbH
  Vestische Str. 89-91 | 46117 Oberhausen
  Tel: +49 (0) 208.89 402-50 | Fax: +49 (0) 208.89 402-40
  p...@kamp.de | http://www.kamp.de

  Geschäftsführer: Heiner Lante | Michael Lante
  Amtsgericht Duisburg | HRB Nr. 12154
  USt-Id-Nr.: DE 120607556

...........................................................


Reply via email to