[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 1/7] qemu-img convert: Don't pre-zero images
From: |
Kevin Wolf |
Subject: |
[PULL 1/7] qemu-img convert: Don't pre-zero images |
Date: |
Fri, 3 Jul 2020 11:21:37 +0200 |
Since commit 5a37b60a61c, qemu-img create will pre-zero the target image
if it isn't already zero-initialised (most importantly, for host block
devices, but also iscsi etc.), so that writing explicit zeros wouldn't
be necessary later.
This could speed up the operation significantly, in particular when the
source image file was only sparsely populated. However, it also means
that some block are written twice: Once when pre-zeroing them, and then
when they are overwritten with actual data. On a full image, the
pre-zeroing is wasted work because everything will be overwritten.
In practice, write_zeroes typically turns out faster than writing
explicit zero buffers, but slow enough that first zeroing everything and
then overwriting parts can be a significant net loss.
Meanwhile, qemu-img convert was rewritten in 690c7301600 and zero blocks
are now written to the target using bdrv_co_pwrite_zeroes() if the
target could be pre-zeroed. This way we already make use of the faster
write_zeroes operation, but avoid writing any blocks twice.
Remove the pre-zeroing because these days this former optimisation has
actually turned into a pessimisation in the common case.
Reported-by: Nir Soffer <nsoffer@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20200622151203.35624-1-kwolf@redhat.com>
Tested-by: Nir Soffer <nsoffer@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
qemu-img.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index d7e846e607..bdb9f6aa46 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -2084,15 +2084,6 @@ static int convert_do_copy(ImgConvertState *s)
s->has_zero_init = bdrv_has_zero_init(blk_bs(s->target));
}
- if (!s->has_zero_init && !s->target_has_backing &&
- bdrv_can_write_zeroes_with_unmap(blk_bs(s->target)))
- {
- ret = blk_make_zero(s->target, BDRV_REQ_MAY_UNMAP |
BDRV_REQ_NO_FALLBACK);
- if (ret == 0) {
- s->has_zero_init = true;
- }
- }
-
/* Allocate buffer for copied data. For compressed images, only one cluster
* can be copied at a time. */
if (s->compressed) {
--
2.25.4
- [PULL 0/7] Block layer patches, Kevin Wolf, 2020/07/03
- [PULL 1/7] qemu-img convert: Don't pre-zero images,
Kevin Wolf <=
- [PULL 7/7] iotests: Fix 051 output after qdev_init_nofail() removal, Kevin Wolf, 2020/07/03
- [PULL 2/7] qemu-storage-daemon: remember to add qemu_object_opts, Kevin Wolf, 2020/07/03
- [PULL 3/7] qemu-storage-daemon: add missing cleanup calls, Kevin Wolf, 2020/07/03
- [PULL 6/7] iotests.py: Do not wait() before communicate(), Kevin Wolf, 2020/07/03
- [PULL 4/7] vvfat: Check that updated filenames are valid, Kevin Wolf, 2020/07/03
- [PULL 5/7] vvfat: Fix array_remove_slice(), Kevin Wolf, 2020/07/03
- Re: [PULL 0/7] Block layer patches, no-reply, 2020/07/03
- Re: [PULL 0/7] Block layer patches, Peter Maydell, 2020/07/04