From: Stefan Hajnoczi <stefanha@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org, sunnyzhyy@qq.com,
vsementsov@yandex-team.ru, John Snow <jsnow@redhat.com>,
Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>
Subject: Re: [PATCH v4 10/13] mirror: Skip pre-zeroing destination if it is already zero
Date: Mon, 12 May 2025 14:40:55 -0400 [thread overview]
Message-ID: <20250512184055.GF141177@fedora> (raw)
In-Reply-To: <20250509204341.3553601-25-eblake@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 2430 bytes --]
On Fri, May 09, 2025 at 03:40:27PM -0500, Eric Blake wrote:
> When doing a sync=full mirroring, we can skip pre-zeroing the
> destination if it already reads as zeroes and we are not also trying
> to punch holes due to detect-zeroes. With this patch, there are fewer
> scenarios that have to pass in an explicit target-is-zero, while still
> resulting in a sparse destination remaining sparse.
>
> A later patch will then further improve things to skip writing to the
> destination for parts of the image where the source is zero; but even
> with just this patch, it is possible to see a difference for any
> source that does not report itself as fully allocated, coupled with a
> destination BDS that can quickly report that it already reads as zero.
> (For a source that reports as fully allocated, such as a file, the
> rest of mirror_dirty_init() still sets the entire dirty bitmap to
> true, so even though we avoided the pre-zeroing, we are not yet
> avoiding all redundant I/O).
>
> Iotest 194 detects the difference made by this patch: for a file
> source (where block status reports the entire image as allocated, and
> therefore we end up writing zeroes everywhere in the destination
> anyways), the job length remains the same. But for a qcow2 source and
> a destination that reads as all zeroes, the dirty bitmap changes to
> just tracking the allocated portions of the source, which results in
> faster completion and smaller job statistics. For the test to pass
> with both ./check -file and -qcow2, a new python filter is needed to
> mask out the now-varying job amounts (this matches the shell filters
> _filter_block_job_{offset,len} in common.filter). A later test will
> also be added which further validates expected sparseness, so it does
> not matter that 194 is no longer explicitly looking at how many bytes
> were copied.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
>
> ---
>
> v3: add exemption for "detect-zeroes":"unmap" on destination
> v4: Rebase later in series, revise logic for pre-zeroing [Sunny], add
> in python filter
> ---
> block/mirror.c | 24 ++++++++++++++++--------
> tests/qemu-iotests/194 | 6 ++++--
> tests/qemu-iotests/194.out | 4 ++--
> tests/qemu-iotests/iotests.py | 12 +++++++++++-
> 4 files changed, 33 insertions(+), 13 deletions(-)
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2025-05-12 18:41 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-09 20:40 [PATCH v4 00/13] Make blockdev-mirror dest sparse in more cases Eric Blake
2025-05-09 20:40 ` [PATCH v4 01/13] block: Expand block status mode from bool to flags Eric Blake
2025-05-09 20:40 ` [PATCH v4 02/13] file-posix, gluster: Handle zero block status hint better Eric Blake
2025-05-09 20:40 ` [PATCH v4 03/13] block: Let bdrv_co_is_zero_fast consolidate adjacent extents Eric Blake
2025-05-09 20:40 ` [PATCH v4 04/13] block: Add new bdrv_co_is_all_zeroes() function Eric Blake
2025-05-09 20:40 ` [PATCH v4 05/13] iotests: Improve iotest 194 to mirror data Eric Blake
2025-05-09 20:40 ` [PATCH v4 06/13] mirror: Minor refactoring Eric Blake
2025-05-09 20:40 ` [PATCH v4 07/13] mirror: Pass full sync mode rather than bool to internals Eric Blake
2025-05-02 23:17 ` Sunny Zhu
2025-05-12 15:19 ` Stefan Hajnoczi
2025-05-09 20:40 ` [PATCH v4 08/13] mirror: Allow QMP override to declare target already zero Eric Blake
2025-05-02 23:57 ` Sunny Zhu
2025-05-12 17:30 ` Eric Blake
2025-05-03 0:40 ` Sunny Zhu
2025-05-12 15:23 ` Stefan Hajnoczi
2025-05-09 20:40 ` [PATCH v4 09/13] mirror: Drop redundant zero_target parameter Eric Blake
2025-05-03 0:47 ` Sunny Zhu
2025-05-12 15:24 ` Stefan Hajnoczi
2025-05-14 22:09 ` Eric Blake
2025-05-15 1:11 ` Eric Blake
2025-05-09 20:40 ` [PATCH v4 10/13] mirror: Skip pre-zeroing destination if it is already zero Eric Blake
2025-05-03 0:51 ` Sunny Zhu
2025-05-12 18:40 ` Stefan Hajnoczi [this message]
2025-05-09 20:40 ` [PATCH v4 11/13] mirror: Skip writing zeroes when target " Eric Blake
2025-05-12 18:43 ` Stefan Hajnoczi
2025-05-13 21:37 ` Eric Blake
2025-05-14 15:37 ` Sunny Zhu
2025-05-14 16:30 ` Eric Blake
2025-05-09 20:40 ` [PATCH v4 12/13] iotests/common.rc: add disk_usage function Eric Blake
2025-05-09 20:40 ` [PATCH v4 13/13] tests: Add iotest mirror-sparse for recent patches Eric Blake
2025-05-12 18:44 ` Stefan Hajnoczi
2025-05-12 18:44 ` [PATCH v4 00/13] Make blockdev-mirror dest sparse in more cases Stefan Hajnoczi
2025-05-13 22:00 ` [PATCH v4 14/13] mirror: Reduce I/O when destination is detect-zeroes:unmap Eric Blake
2025-05-14 13:20 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250512184055.GF141177@fedora \
--to=stefanha@redhat.com \
--cc=eblake@redhat.com \
--cc=hreitz@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=sunnyzhyy@qq.com \
--cc=vsementsov@yandex-team.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.