- kvm-block-Expand-block-status-mode-from-bool-to-flags.patch [RHEL-88435 RHEL-88437] - kvm-file-posix-gluster-Handle-zero-block-status-hint-bet.patch [RHEL-88435 RHEL-88437] - kvm-block-Let-bdrv_co_is_zero_fast-consolidate-adjacent-.patch [RHEL-88435 RHEL-88437] - kvm-block-Add-new-bdrv_co_is_all_zeroes-function.patch [RHEL-88435 RHEL-88437] - kvm-iotests-Improve-iotest-194-to-mirror-data.patch [RHEL-88435 RHEL-88437] - kvm-mirror-Minor-refactoring.patch [RHEL-88435 RHEL-88437] - kvm-mirror-Pass-full-sync-mode-rather-than-bool-to-inter.patch [RHEL-88435 RHEL-88437] - kvm-mirror-Allow-QMP-override-to-declare-target-already-.patch [RHEL-88435 RHEL-88437] - kvm-mirror-Drop-redundant-zero_target-parameter.patch [RHEL-88435 RHEL-88437] - kvm-mirror-Skip-pre-zeroing-destination-if-it-is-already.patch [RHEL-88435 RHEL-88437] - kvm-mirror-Skip-writing-zeroes-when-target-is-already-ze.patch [RHEL-88435 RHEL-88437] - kvm-iotests-common.rc-add-disk_usage-function.patch [RHEL-88435 RHEL-88437] - kvm-tests-Add-iotest-mirror-sparse-for-recent-patches.patch [RHEL-88435 RHEL-88437] - kvm-mirror-Reduce-I-O-when-destination-is-detect-zeroes-.patch [RHEL-88435 RHEL-88437] - Resolves: RHEL-88435 (--migrate-disks-detect-zeroes doesn't take effect for disk migration [rhel-10.1]) - Resolves: RHEL-88437 (Disk size of target raw image is full allocated when doing mirror with default discard value [rhel-10.1])
59 lines
2.6 KiB
Diff
59 lines
2.6 KiB
Diff
From 9fedd14da6f1dc7aa3f0711d86f722397d080993 Mon Sep 17 00:00:00 2001
|
|
From: Eric Blake <eblake@redhat.com>
|
|
Date: Tue, 13 May 2025 17:00:45 -0500
|
|
Subject: [PATCH 14/14] mirror: Reduce I/O when destination is
|
|
detect-zeroes:unmap
|
|
|
|
RH-Author: Eric Blake <eblake@redhat.com>
|
|
RH-MergeRequest: 363: blockdev-mirror: More efficient handling of sparse mirrors
|
|
RH-Jira: RHEL-88435 RHEL-88437
|
|
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Commit: [14/14] d4ba9d88a8da00f82c2ba7ebf050152fbe1e2465 (ebblake/centos-qemu-kvm)
|
|
|
|
If we are going to punch holes in the mirror destination even for the
|
|
portions where the source image is unallocated, it is nicer to treat
|
|
the entire image as dirty and punch as we go, rather than pre-zeroing
|
|
the entire image just to re-do I/O to the allocated portions of the
|
|
image.
|
|
|
|
Signed-off-by: Eric Blake <eblake@redhat.com>
|
|
Message-ID: <20250513220142.535200-2-eblake@redhat.com>
|
|
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
(cherry picked from commit 9abfc81246c9cc1845080eec5920779961187c07)
|
|
Jira: https://issues.redhat.com/browse/RHEL-88435
|
|
Jira: https://issues.redhat.com/browse/RHEL-88437
|
|
Signed-off-by: Eric Blake <eblake@redhat.com>
|
|
---
|
|
block/mirror.c | 13 +++++++++----
|
|
1 file changed, 9 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/block/mirror.c b/block/mirror.c
|
|
index 724318f037..c2c5099c95 100644
|
|
--- a/block/mirror.c
|
|
+++ b/block/mirror.c
|
|
@@ -920,11 +920,16 @@ static int coroutine_fn GRAPH_UNLOCKED mirror_dirty_init(MirrorBlockJob *s)
|
|
* zeroing happened externally (ret > 0) or if we have a fast
|
|
* way to pre-zero the image (the dirty bitmap will be
|
|
* populated later by the non-zero portions, the same as for
|
|
- * TOP mode). If pre-zeroing is not fast, then our only
|
|
- * recourse is to mark the entire image dirty. The act of
|
|
- * pre-zeroing will populate the zero bitmap.
|
|
+ * TOP mode). If pre-zeroing is not fast, or we need to visit
|
|
+ * the entire image in order to punch holes even in the
|
|
+ * non-allocated regions of the source, then just mark the
|
|
+ * entire image dirty and leave the zero bitmap clear at this
|
|
+ * point in time. Otherwise, it can be faster to pre-zero the
|
|
+ * image now, even if we re-write the allocated portions of
|
|
+ * the disk later, and the pre-zero pass will populate the
|
|
+ * zero bitmap.
|
|
*/
|
|
- if (!bdrv_can_write_zeroes_with_unmap(target_bs)) {
|
|
+ if (!bdrv_can_write_zeroes_with_unmap(target_bs) || punch_holes) {
|
|
bdrv_set_dirty_bitmap(s->dirty_bitmap, 0, s->bdev_length);
|
|
return 0;
|
|
}
|
|
--
|
|
2.39.3
|
|
|