All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Denis V. Lunev" <den@openvz.org>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
	vsementsov@virtuozzo.com, Stefan Hajnoczi <stefanha@redhat.com>,
	Fam Zheng <famz@redhat.com>, Max Reitz <mreitz@redhat.com>,
	Jeff Cody <jcody@redhat.com>, Eric Blake <eblake@redhat.com>,
	pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH 0/9] major rework of drive-mirror
Date: Wed, 15 Jun 2016 12:34:13 +0300	[thread overview]
Message-ID: <57612115.4040202@openvz.org> (raw)
In-Reply-To: <20160615090647.GE4566@noname.redhat.com>

On 06/15/2016 12:06 PM, Kevin Wolf wrote:
> Am 14.06.2016 um 17:25 hat Denis V. Lunev geschrieben:
>> Block commit of the active image to the backing store on a slow disk
>> could never end. For example with the guest with the following loop
>> inside
>>      while true; do
>>          dd bs=1k count=1 if=/dev/zero of=x
>>      done
>> running above slow storage could not complete the operation with a
>> resonable amount of time:
>>      virsh blockcommit rhel7 sda --active --shallow
>>      virsh qemu-monitor-event
>>      virsh qemu-monitor-command rhel7 \
>>          '{"execute":"block-job-complete",\
>>            "arguments":{"device":"drive-scsi0-0-0-0"} }'
>>      virsh qemu-monitor-event
>> Completion event is never received.
>>
>> This problem could not be fixed easily with the current architecture. We
>> should either prohibit guest writes (making dirty bitmap dirty) or switch
>> to the sycnchronous scheme.
>>
>> This series switches driver mirror to synch scheme. Actually we can have
>> something more intelligent and switch to sync mirroring just after
>> the first pass over the bitmap. Though this could be done relatively
>> easily during discussion. The most difficult things are here.
>>
>> The set also adds some performance improvements dealing with
>> known-to-be-zero areas.
> I only read the cover letter and had a quick look at the patch doing the
> actual switch, so this is by far not a real review, but I have a few
> general comments anway:
>
>
> First of all, let's make sure we're all using the same terminology. In
> past discussions about mirror modes, we distinguished active/passive and
> synchronous/asynchronous.
>
> * An active mirror mirrors requests immediately when they are made by
>    the guest. A passive mirror just remembers that it needs to mirror
>    something and does it whenever it wants.
>
> * A synchronous mirror completes the guest request only after the data
>    has successfully been written to both the live imaeg and the target.
>    An asynchronous one can complete the guest request before the mirror
>    I/O has completed.
>
> In these terms, the currently implemented mirror is a passive
> asynchronous one. If I understand correctly, what you are doing in this
> series is to convert it unconditionally to an active asynchronous one.
>
>
> The "unconditionally" part is my first complaint: The active mirror does
> potentially a lot more I/O, so it's not clear that you want to use it.
> This should be the user's choice. (We always intended to add an active
> mirror sooner or later, but so far nobody needed it desperately enough.)
this sounds reasonable


>
> The second big thing is that I don't want to see new users of the
> notifiers in I/O functions. Let's try if we can't add a filter
> BlockDriver instead. Then we'd add an option to set the filter node-name
> in the mirror QMP command so that the management tool is aware of the
> node and can refer to it.
this will be much more difficult to implement at my experience. Can you
share more details why filters are bad?

> If we don't do this now, we'll have to introduce it later and can't be
> sure that the management tool knows about it. This would complicate
> things quite a bit because we would have to make sure that the added
> node stays invisible to the management tool.
>
>
> I think these two things are the big architectural questions. The rest
> is hopefully more or less implementation details.
I completely agree with you.

We have the following choices:
1. implement parameter to use 'active'/'passive' mode from the very 
beginning
2. switch to 'active' mode upon receiving "block-job-complete" command 
unconditionally
3. switch to 'active' mode upon receiving "block-job-complete" command 
with proper parameter
4. switch to 'active' mode after timeout (I personally do not like this 
option)

I think that choices 1 and 3 do not contradict each other and
could be implemented to gather.

Den

  reply	other threads:[~2016-06-15  9:34 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-14 15:25 [Qemu-devel] [PATCH 0/9] major rework of drive-mirror Denis V. Lunev
2016-06-14 15:25 ` [Qemu-devel] [PATCH 1/9] mirror: fix calling of blk_aio_pwritev/blk_aio_preadv Denis V. Lunev
2016-06-14 22:48   ` Eric Blake
2016-06-14 15:25 ` [Qemu-devel] [PATCH 2/9] mirror: create mirror_dirty_init helper for mirror_run Denis V. Lunev
2016-06-15  2:29   ` Eric Blake
2016-06-14 15:25 ` [Qemu-devel] [PATCH 3/9] mirror: optimize dirty bitmap filling in mirror_run a bit Denis V. Lunev
2016-06-15  2:36   ` Eric Blake
2016-06-15  8:41     ` Denis V. Lunev
2016-06-15 12:25       ` Eric Blake
2016-06-14 15:25 ` [Qemu-devel] [PATCH 4/9] mirror: efficiently zero out target Denis V. Lunev
2016-06-15  3:00   ` Eric Blake
2016-06-15  8:46     ` Denis V. Lunev
2016-06-15 12:34       ` Eric Blake
2016-06-15 13:18         ` Denis V. Lunev
2016-07-06 14:33         ` Denis V. Lunev
2016-06-14 15:25 ` [Qemu-devel] [PATCH 5/9] mirror: improve performance of mirroring of empty disk Denis V. Lunev
2016-06-15  3:20   ` Eric Blake
2016-06-15  9:19     ` Stefan Hajnoczi
2016-06-15 10:37       ` Denis V. Lunev
2016-06-16 10:10         ` Stefan Hajnoczi
2016-06-17  2:53           ` Eric Blake
2016-06-17 13:56             ` Stefan Hajnoczi
2016-06-14 15:25 ` [Qemu-devel] [PATCH 6/9] block: pass qiov into before_write notifier Denis V. Lunev
2016-06-15  4:07   ` Eric Blake
2016-06-15  9:21   ` Stefan Hajnoczi
2016-06-15  9:24     ` Denis V. Lunev
2016-06-15  9:22   ` Stefan Hajnoczi
2016-06-14 15:25 ` [Qemu-devel] [PATCH 7/9] mirror: allow to save buffer for QEMUIOVector in MirrorOp Denis V. Lunev
2016-06-15  4:11   ` Eric Blake
2016-06-14 15:25 ` [Qemu-devel] [PATCH 8/9] mirror: use synch scheme for drive mirror Denis V. Lunev
2016-06-15  4:18   ` Eric Blake
2016-06-15  8:52     ` Denis V. Lunev
2016-06-15  9:48   ` Stefan Hajnoczi
2016-06-14 15:25 ` [Qemu-devel] [PATCH 9/9] mirror: replace bdrv_dirty_bitmap with plain hbitmap Denis V. Lunev
2016-06-15  9:06 ` [Qemu-devel] [PATCH 0/9] major rework of drive-mirror Kevin Wolf
2016-06-15  9:34   ` Denis V. Lunev [this message]
2016-06-15 10:25     ` Kevin Wolf
2016-06-15 10:44       ` Denis V. Lunev
2016-06-15  9:50 ` Stefan Hajnoczi
2016-06-15 11:09 ` Dr. David Alan Gilbert

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=57612115.4040202@openvz.org \
    --to=den@openvz.org \
    --cc=eblake@redhat.com \
    --cc=famz@redhat.com \
    --cc=jcody@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=vsementsov@virtuozzo.com \
    /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.