qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v24 03/12] Backup: export interfaces for extra s


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [PATCH v24 03/12] Backup: export interfaces for extra serialization
Date: Thu, 4 Aug 2016 10:53:50 +0100
User-agent: Mutt/1.6.2 (2016-07-01)

On Wed, Jul 27, 2016 at 03:01:44PM +0800, Changlong Xie wrote:
> Normal backup(sync='none') workflow:
> step 1. NBD peformance I/O write from client to server
>    qcow2_co_writev
>     bdrv_co_writev
>      ...
>        bdrv_aligned_pwritev
>         notifier_with_return_list_notify -> backup_do_cow
>          bdrv_driver_pwritev // write new contents
> 
> step 2. drive-backup sync=none
>    backup_do_cow
>    {
>     wait_for_overlapping_requests
>     cow_request_begin
>     for(; start < end; start++) {
>             bdrv_co_readv_no_serialising //read old contents from Secondary 
> disk
>             bdrv_co_writev // write old contents to hidden-disk
>     }
>     cow_request_end
>    }
> 
> step 3. Then roll back to "step 1" to write new contents to Secondary disk.
> 
> And for replication, we must make sure that we only read the old contents from
> Secondary disk in order to keep contents consistent.
> 
> 1) Replication workflow of Secondary
>                                                          virtio-blk
>                                                               ^
> ------->  1 NBD                                               |
>    ||     server                                       3 replication
>    ||        ^                                                ^
>    ||        |           backing                 backing      |
>    ||  Secondary disk 6<-------- hidden-disk 5 <-------- active-disk 4
>    ||        |                         ^
>    ||        '-------------------------'
>    ||           drive-backup sync=none 2
> 
> Hence, we need these interfaces to implement coarse-grained serialization 
> between
> COW of Secondary disk and the read operation of replication.
> 
> Example codes about how to use them:
> 
> *#include "block/block_backup.h"
> 
> static coroutine_fn int xxx_co_readv()
> {
>         CowRequest req;
>         BlockJob *job = secondary_disk->bs->job;
> 
>         if (job) {
>               backup_wait_for_overlapping_requests(job, start, end);
>               backup_cow_request_begin(&req, job, start, end);
>               ret = bdrv_co_readv();
>               backup_cow_request_end(&req);
>               goto out;
>         }
>         ret = bdrv_co_readv();
> out:
>         return ret;
> }
> 
> Signed-off-by: Changlong Xie <address@hidden>
> Signed-off-by: Wen Congyang <address@hidden>
> Signed-off-by: Wang WeiWei <address@hidden>
> ---
>  block/backup.c               | 41 ++++++++++++++++++++++++++++++++++-------
>  include/block/block_backup.h | 14 ++++++++++++++
>  2 files changed, 48 insertions(+), 7 deletions(-)

Reviewed-by: Stefan Hajnoczi <address@hidden>

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]