- kvm-s390x-pci-add-support-for-guests-that-request-direct.patch [RHEL-11430] - kvm-s390x-pci-indicate-QEMU-supports-relaxed-translation.patch [RHEL-11430] - kvm-block-Expand-block-status-mode-from-bool-to-flags.patch [RHEL-82906 RHEL-83015] - kvm-file-posix-gluster-Handle-zero-block-status-hint-bet.patch [RHEL-82906 RHEL-83015] - kvm-block-Let-bdrv_co_is_zero_fast-consolidate-adjacent-.patch [RHEL-82906 RHEL-83015] - kvm-block-Add-new-bdrv_co_is_all_zeroes-function.patch [RHEL-82906 RHEL-83015] - kvm-iotests-Improve-iotest-194-to-mirror-data.patch [RHEL-82906 RHEL-83015] - kvm-mirror-Minor-refactoring.patch [RHEL-82906 RHEL-83015] - kvm-mirror-Pass-full-sync-mode-rather-than-bool-to-inter.patch [RHEL-82906 RHEL-83015] - kvm-mirror-Allow-QMP-override-to-declare-target-already-.patch [RHEL-82906 RHEL-83015] - kvm-mirror-Drop-redundant-zero_target-parameter.patch [RHEL-82906 RHEL-83015] - kvm-mirror-Skip-pre-zeroing-destination-if-it-is-already.patch [RHEL-82906 RHEL-83015] - kvm-mirror-Skip-writing-zeroes-when-target-is-already-ze.patch [RHEL-82906 RHEL-83015] - kvm-iotests-common.rc-add-disk_usage-function.patch [RHEL-82906 RHEL-83015] - kvm-tests-Add-iotest-mirror-sparse-for-recent-patches.patch [RHEL-82906 RHEL-83015] - kvm-mirror-Reduce-I-O-when-destination-is-detect-zeroes-.patch [RHEL-82906 RHEL-83015] - Resolves: RHEL-11430 ([IBM 9.7 FEAT] KVM: Performance Enhanced Refresh PCI Translation - qemu part) - Resolves: RHEL-82906 (--migrate-disks-detect-zeroes doesn't take effect for disk migration [rhel-9.7]) - Resolves: RHEL-83015 (Disk size of target raw image is full allocated when doing mirror with default discard value [rhel-9.7])
59 lines
2.6 KiB
Diff
59 lines
2.6 KiB
Diff
From be6ce2c91fe949d1c264de974ab4f6c4efc6976e Mon Sep 17 00:00:00 2001
|
|
From: Eric Blake <eblake@redhat.com>
|
|
Date: Tue, 13 May 2025 17:00:45 -0500
|
|
Subject: [PATCH 16/16] mirror: Reduce I/O when destination is
|
|
detect-zeroes:unmap
|
|
|
|
RH-Author: Eric Blake <eblake@redhat.com>
|
|
RH-MergeRequest: 365: blockdev-mirror: More efficient handling of sparse mirrors
|
|
RH-Jira: RHEL-82906 RHEL-83015
|
|
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
RH-Acked-by: Jon Maloy <jmaloy@redhat.com>
|
|
RH-Commit: [14/14] 66f3de2ba9f977c9bc1c54f67d76b366df132e62 (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-82906
|
|
Jira: https://issues.redhat.com/browse/RHEL-83015
|
|
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 7f3b5477ce..87c19ddf0d 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.48.1
|
|
|