From: Jeff Cody <jcody@redhat.com>
To: "Denis V. Lunev" <den@openvz.org>
Cc: qemu-devel@nongnu.org,
Anton Nefedov <anton.nefedov@virtuozzo.com>,
Kevin Wolf <kwolf@redhat.com>, Max Reitz <mreitz@redhat.com>,
Eric Blake <eblake@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 1/1] mirror: do not increase offset during initial zero_or_discard phase
Date: Tue, 7 Feb 2017 02:07:19 -0500 [thread overview]
Message-ID: <20170207070719.GE27752@localhost.localdomain> (raw)
In-Reply-To: <1486045515-8009-1-git-send-email-den@openvz.org>
On Thu, Feb 02, 2017 at 05:25:15PM +0300, Denis V. Lunev wrote:
> From: Anton Nefedov <anton.nefedov@virtuozzo.com>
>
> If explicit zeroing out before mirroring is required for the target image,
> it moves the block job offset counter to EOF, then offset and len counters
> count the image size twice. There is no harm but stats are confusing,
> specifically the progress of the operation is always reported as 99% by
> management tools.
>
> The patch skips offset increase for the first "technical" pass over the
> image. This should not cause any further harm.
>
> Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> CC: Jeff Cody <jcody@redhat.com>
> CC: Kevin Wolf <kwolf@redhat.com>
> CC: Max Reitz <mreitz@redhat.com>
> CC: Eric Blake <eblake@redhat.com>
> ---
> Changes from v1:
> - changed the approach - we do not allow to increase the offset rather then
> to move it back
> - description rewritten
> - kludges to tests are removed as not actually needed with this approach
>
> block/mirror.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/block/mirror.c b/block/mirror.c
> index 301ba92..f100f5d 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -69,6 +69,7 @@ typedef struct MirrorBlockJob {
> bool waiting_for_io;
> int target_cluster_sectors;
> int max_iov;
> + bool initial_zeroing_ongoing;
> } MirrorBlockJob;
>
> typedef struct MirrorOp {
> @@ -117,9 +118,10 @@ static void mirror_iteration_done(MirrorOp *op, int ret)
> if (s->cow_bitmap) {
> bitmap_set(s->cow_bitmap, chunk_num, nb_chunks);
> }
> - s->common.offset += (uint64_t)op->nb_sectors * BDRV_SECTOR_SIZE;
> + if (!s->initial_zeroing_ongoing) {
> + s->common.offset += (uint64_t)op->nb_sectors * BDRV_SECTOR_SIZE;
> + }
> }
> -
> qemu_iovec_destroy(&op->qiov);
> g_free(op);
>
> @@ -566,6 +568,7 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
> return 0;
> }
>
> + s->initial_zeroing_ongoing = true;
> for (sector_num = 0; sector_num < end; ) {
> int nb_sectors = MIN(end - sector_num,
> QEMU_ALIGN_DOWN(INT_MAX, s->granularity) >> BDRV_SECTOR_BITS);
> @@ -573,6 +576,7 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
> mirror_throttle(s);
>
> if (block_job_is_cancelled(&s->common)) {
> + s->initial_zeroing_ongoing = false;
> return 0;
> }
>
> @@ -587,6 +591,7 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
> }
>
> mirror_wait_for_all_io(s);
> + s->initial_zeroing_ongoing = false;
> }
>
> /* First part, loop on the sectors and initialize the dirty bitmap. */
> --
> 2.7.4
>
Thanks,
Applied to my block branch:
git://github.com/codyprime/qemu-kvm-jtc.git block
-Jeff
prev parent reply other threads:[~2017-02-07 7:07 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-02 14:25 [Qemu-devel] [PATCH v2 1/1] mirror: do not increase offset during initial zero_or_discard phase Denis V. Lunev
2017-02-02 15:17 ` Eric Blake
2017-02-03 14:52 ` Stefan Hajnoczi
2017-02-03 15:09 ` Denis V. Lunev
2017-02-07 7:07 ` Jeff Cody [this message]
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=20170207070719.GE27752@localhost.localdomain \
--to=jcody@redhat.com \
--cc=anton.nefedov@virtuozzo.com \
--cc=den@openvz.org \
--cc=eblake@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).