From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42696) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bVFLl-0002ts-HL for qemu-devel@nongnu.org; Thu, 04 Aug 2016 05:54:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bVFLj-0007eD-FU for qemu-devel@nongnu.org; Thu, 04 Aug 2016 05:54:00 -0400 Date: Thu, 4 Aug 2016 10:53:50 +0100 From: Stefan Hajnoczi Message-ID: <20160804095350.GF14185@stefanha-x1.localdomain> References: <1469602913-20979-1-git-send-email-xiecl.fnst@cn.fujitsu.com> <1469602913-20979-4-git-send-email-xiecl.fnst@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="z+pzSjdB7cqptWpS" Content-Disposition: inline In-Reply-To: <1469602913-20979-4-git-send-email-xiecl.fnst@cn.fujitsu.com> Subject: Re: [Qemu-devel] [PATCH v24 03/12] Backup: export interfaces for extra serialization List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Changlong Xie Cc: qemu devel , qemu block , Fam Zheng , Max Reitz , Kevin Wolf , Jeff Cody , Paolo Bonzini , John Snow , Eric Blake , Markus Armbruster , "Dr. David Alan Gilbert" , Dong Eddie , Jiang Yunhong , zhanghailiang , Gonglei , Wen Congyang , Wang Weiwei --z+pzSjdB7cqptWpS Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Jul 27, 2016 at 03:01:44PM +0800, Changlong Xie wrote: > Normal backup(sync=3D'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 >=20 > step 2. drive-backup sync=3Dnone > backup_do_cow > { > wait_for_overlapping_requests > cow_request_begin > for(; start < end; start++) { > bdrv_co_readv_no_serialising //read old contents from Seconda= ry disk > bdrv_co_writev // write old contents to hidden-disk > } > cow_request_end > } >=20 > step 3. Then roll back to "step 1" to write new contents to Secondary dis= k. >=20 > And for replication, we must make sure that we only read the old contents= from > Secondary disk in order to keep contents consistent. >=20 > 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=3Dnone 2 >=20 > Hence, we need these interfaces to implement coarse-grained serialization= between > COW of Secondary disk and the read operation of replication. >=20 > Example codes about how to use them: >=20 > *#include "block/block_backup.h" >=20 > static coroutine_fn int xxx_co_readv() > { > CowRequest req; > BlockJob *job =3D secondary_disk->bs->job; >=20 > if (job) { > backup_wait_for_overlapping_requests(job, start, end); > backup_cow_request_begin(&req, job, start, end); > ret =3D bdrv_co_readv(); > backup_cow_request_end(&req); > goto out; > } > ret =3D bdrv_co_readv(); > out: > return ret; > } >=20 > Signed-off-by: Changlong Xie > Signed-off-by: Wen Congyang > Signed-off-by: Wang WeiWei > --- > block/backup.c | 41 ++++++++++++++++++++++++++++++++++----= --- > include/block/block_backup.h | 14 ++++++++++++++ > 2 files changed, 48 insertions(+), 7 deletions(-) Reviewed-by: Stefan Hajnoczi --z+pzSjdB7cqptWpS Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJXoxCuAAoJEJykq7OBq3PIJOIH/278jyfJdULCH5ErmMGvzXKa H7+WbQXagho1NRDAUz7+2oj6/E5HykdxCAwN8R9NKcOws8ub7e1zl9ylccjYi/cz Qb4cVol4HIkx9eDK+WZ9jPAfSBw9OqAO139npGaTY7Vj45VtnS7FANFnsm6M84I8 nLIBNTSB5irAfIIAtb1xKauw/YOg8A36/i0Lz1n+xe6hx7A56/qEyINcRLJs9Ldh soIQu9bDRV1dDab2exVnwCQLn3tbrZaR0Ep58e6HEPFjf/o9w2iy0HEF57PrWuWW bw46jBE5qv8zzVWYuZ0BGTMZyD89EiU33+UnA9jBkcs1EYMtR1KrhnObAsjxbX0= =l9L9 -----END PGP SIGNATURE----- --z+pzSjdB7cqptWpS--