|
|
1072c8 |
From eea45924903f03dc6d8f20576be0a4a84d5acce4 Mon Sep 17 00:00:00 2001
|
|
|
1072c8 |
From: Kevin Wolf <kwolf@redhat.com>
|
|
|
1072c8 |
Date: Wed, 10 Feb 2021 10:16:11 -0500
|
|
|
1072c8 |
Subject: [PATCH 4/5] qemu-img convert: Don't pre-zero images
|
|
|
1072c8 |
|
|
|
1072c8 |
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
|
|
1072c8 |
Message-id: <20210210101611.137928-2-kwolf@redhat.com>
|
|
|
1072c8 |
Patchwork-id: 101030
|
|
|
1072c8 |
O-Subject: [RHEL-8.4.0 qemu-kvm PATCH 1/1] qemu-img convert: Don't pre-zero images
|
|
|
1072c8 |
Bugzilla: 1855250
|
|
|
1072c8 |
RH-Acked-by: Stefano Garzarella <sgarzare@redhat.com>
|
|
|
1072c8 |
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
1072c8 |
RH-Acked-by: Max Reitz <mreitz@redhat.com>
|
|
|
1072c8 |
|
|
|
1072c8 |
Since commit 5a37b60a61c, qemu-img create will pre-zero the target image
|
|
|
1072c8 |
if it isn't already zero-initialised (most importantly, for host block
|
|
|
1072c8 |
devices, but also iscsi etc.), so that writing explicit zeros wouldn't
|
|
|
1072c8 |
be necessary later.
|
|
|
1072c8 |
|
|
|
1072c8 |
This could speed up the operation significantly, in particular when the
|
|
|
1072c8 |
source image file was only sparsely populated. However, it also means
|
|
|
1072c8 |
that some block are written twice: Once when pre-zeroing them, and then
|
|
|
1072c8 |
when they are overwritten with actual data. On a full image, the
|
|
|
1072c8 |
pre-zeroing is wasted work because everything will be overwritten.
|
|
|
1072c8 |
|
|
|
1072c8 |
In practice, write_zeroes typically turns out faster than writing
|
|
|
1072c8 |
explicit zero buffers, but slow enough that first zeroing everything and
|
|
|
1072c8 |
then overwriting parts can be a significant net loss.
|
|
|
1072c8 |
|
|
|
1072c8 |
Meanwhile, qemu-img convert was rewritten in 690c7301600 and zero blocks
|
|
|
1072c8 |
are now written to the target using bdrv_co_pwrite_zeroes() if the
|
|
|
1072c8 |
target could be pre-zeroed. This way we already make use of the faster
|
|
|
1072c8 |
write_zeroes operation, but avoid writing any blocks twice.
|
|
|
1072c8 |
|
|
|
1072c8 |
Remove the pre-zeroing because these days this former optimisation has
|
|
|
1072c8 |
actually turned into a pessimisation in the common case.
|
|
|
1072c8 |
|
|
|
1072c8 |
Reported-by: Nir Soffer <nsoffer@redhat.com>
|
|
|
1072c8 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
1072c8 |
Message-Id: <20200622151203.35624-1-kwolf@redhat.com>
|
|
|
1072c8 |
Tested-by: Nir Soffer <nsoffer@redhat.com>
|
|
|
1072c8 |
Reviewed-by: Eric Blake <eblake@redhat.com>
|
|
|
1072c8 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
1072c8 |
(cherry picked from commit edafc70c0c8510862f2f213a3acf7067113bcd08)
|
|
|
1072c8 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
1072c8 |
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
|
1072c8 |
---
|
|
|
1072c8 |
qemu-img.c | 9 ---------
|
|
|
1072c8 |
1 file changed, 9 deletions(-)
|
|
|
1072c8 |
|
|
|
1072c8 |
diff --git a/qemu-img.c b/qemu-img.c
|
|
|
1072c8 |
index a27ad70851..b10dc5129b 100644
|
|
|
1072c8 |
--- a/qemu-img.c
|
|
|
1072c8 |
+++ b/qemu-img.c
|
|
|
1072c8 |
@@ -2029,15 +2029,6 @@ static int convert_do_copy(ImgConvertState *s)
|
|
|
1072c8 |
s->has_zero_init = false;
|
|
|
1072c8 |
}
|
|
|
1072c8 |
|
|
|
1072c8 |
- if (!s->has_zero_init && !s->target_has_backing &&
|
|
|
1072c8 |
- bdrv_can_write_zeroes_with_unmap(blk_bs(s->target)))
|
|
|
1072c8 |
- {
|
|
|
1072c8 |
- ret = blk_make_zero(s->target, BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK);
|
|
|
1072c8 |
- if (ret == 0) {
|
|
|
1072c8 |
- s->has_zero_init = true;
|
|
|
1072c8 |
- }
|
|
|
1072c8 |
- }
|
|
|
1072c8 |
-
|
|
|
1072c8 |
/* Allocate buffer for copied data. For compressed images, only one cluster
|
|
|
1072c8 |
* can be copied at a time. */
|
|
|
1072c8 |
if (s->compressed) {
|
|
|
1072c8 |
--
|
|
|
1072c8 |
2.27.0
|
|
|
1072c8 |
|