From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57190) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W36LK-000183-Nj for qemu-devel@nongnu.org; Tue, 14 Jan 2014 10:56:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W36LD-0002xx-CJ for qemu-devel@nongnu.org; Tue, 14 Jan 2014 10:55:54 -0500 Received: from m12-16.163.com ([220.181.12.16]:59084) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W36LC-0002wu-1G for qemu-devel@nongnu.org; Tue, 14 Jan 2014 10:55:47 -0500 Date: Tue, 14 Jan 2014 23:55:31 +0800 From: "rudyfly@163.com" References: <2014011323440947092624@163.com>, <20140114014141.GA1377@T430.nay.redhat.com>, <20140114055736.GD14979@stefanha-thinkpad.redhat.com> Mime-Version: 1.0 Message-ID: <2014011423553091311128@163.com> Content-Type: multipart/alternative; boundary="----=_001_NextPart420410433204_=----" Subject: Re: [Qemu-devel] Question about drive mirror List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi , Fam Zheng Cc: "rudy.zhangmin" , qemu-devel This is a multi-part message in MIME format. ------=_001_NextPart420410433204_=---- Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmsgeW91IGZvciB5b3VyIGRldGFpbGVkIHJlcGx5Lg0KTm93LCBJIGFtIG1vZGlmeWluZyB0 aGUgY29kZSB0byBjaGFuZ2UgdGhlIHJlYWRpbmcgYW5kIHdyaXRpbmcgcHJvY2Vzc2VzLCANCk15 IHB1cnBvc2UgaXMgdGhhdCBhZnRlciBpdCBzZW5kIHRoZSB3cml0aW5nIHJlcXVlc3Rpb24gYW5k IHRoZSB3cml0aW5nIHJlcXVlc3Rpb24gDQppcyBub3QgY29tZSBiYWNrLCB0aGVuIGl0IHNlbmQg dGhlIHJlYWRpbmcgcmVxdWVzdGlvbi4gDQpJIHRoaW5rIHRoaXMgd2F5IHdpbGwgYmUgbW9yZSBy ZWFkaW5nIGFuZCB3cml0aW5nIHByZXNzdXJlIHRoYW4gYmVmb3JlLiANCg0KSSBkb24ndCBrbm93 IHdoeSBpbiBtaXJyb3JfaXRlcmF0aW9uLCBlYWNoIGl0ZXJhdGlvbiBzZW5kIHRoZSBudW1iZXIg b2YgZGF0YSBpcyANCmNvbnRpbnVvdXMgZGlydHkgZGF0YSwgdGhlIG1heGltdW0gaXMgdGhlIHNp emUgb2YgZnJlZV9idWZmZXIoZGVmYXVsdCBpcyAxME0pLA0KSSB0aGluayB0aGUgd2F5IHdpbGwg cmVkdWNlIHRoZSBwZXJmb3JtYW5jZSBvZiBJTyxiZWNhdXNlIHRoZSBtaXJyb3Igd2lsbCB3YWl0 IGxvbmcgDQp0aW1lIHRvIHNlbmQgbmV4dCByZWFkaW5nIHJlcXVlc3Rpb24uIEkgdGhpbmsgZWFj aCBpdGVyYXRpb24gc2VuZCB0aGUgbnVtYmVyIG9mIGRhdGENCnNob3VsZCBiYXNlIG9uIHRoZSBn cmFudWxhcml0eSAsd2UgY2FuIHNldCB0aGUgZ3JhbnVsYXJpdHkgIGlzIDFNLiBUaGlzIHdheSBt YXkgYmUgDQpsZXQgdGhlIHJlYWRpbmcgIGFuZCB3cml0aW5nIGlzIHBhcmFsbGVsLiANCg0KDQoN Cg0KemhhbmcgbWluDQoNCkZyb206IFN0ZWZhbiBIYWpub2N6aQ0KRGF0ZTogMjAxNC0wMS0xNCAx Mzo1Nw0KVG86IEZhbSBaaGVuZw0KQ0M6IHJ1ZHlmbHlAMTYzLmNvbTsgcnVkeS56aGFuZ21pbjsg cWVtdS1kZXZlbA0KU3ViamVjdDogUmU6IFtRZW11LWRldmVsXSBRdWVzdGlvbiBhYm91dCBkcml2 ZSBtaXJyb3INCk9uIFR1ZSwgSmFuIDE0LCAyMDE0IGF0IDA5OjQxOjQxQU0gKzA4MDAsIEZhbSBa aGVuZyB3cm90ZToNCj4gT24gTW9uLCAwMS8xMyAyMzo0NCwgcnVkeWZseUAxNjMuY29tIHdyb3Rl Og0KPiA+IEkgdGVzdGVkIHRoZSBjYXBhYmlsaXR5IG9mIGRyaXZlIG1pcnJvciwgSSBmb3VuZCB0 aGUgSU8gaXMgbG93LiBUaGVuIEkgcmVhZCB0aGUgY29kZSwgDQo+ID4gVGhlIGNvZGUgbWlycm9y X3J1bigpIHdpbGwgY2FsbCBtaXJyb3JfaXRlcmF0aW9uKCkgdG8gcmVhZCB0aGUgc2l6ZSBvZiBi dWZmZXIgZGF0YSAgDQo+ID4gZnJvbSBzb3VyY2Ugc3RvcmFnZSwgd2hlbiB0aGUgcmVhZCBjYWxs YmFjayAsYW5kIHRoZW4gaW4gbWlycm9yX3JlYWRfY29tcGxldGUgKCkgDQo+ID4gd3JpdGUgdGhl IGRhdGEgdG8gdGhlIHRhcmdldCBzdG9yYWdlLCBJdCBpcyBzZXJpYWwuIA0KDQpBbmQgaXQgYWxz byB1c2VzIHRocm90dGxpbmcgdG8gYXZvaWQgaW1wYWN0aW5nIHRoZSBndWVzdCB0b28gbXVjaC4g IEl0J3MNCmNvbnNpZGVyZWQgYSBiYWNrZ3JvdW5kIGpvYiwgaS5lLiBub3QgdHJ5aW5nIHRvIHNh dHVyYXRlIHN0b3JhZ2UNCmJhbmR3aWR0aC4NCg0KVGhhdCBzYWlkLCBpbXByb3ZpbmcgcGVyZm9y bWFuY2Ugd2hpbGUga2VlcGluZyBJL08gaXNvbGF0ZWQgZnJvbSBoaWdoZXINCnByaW9yaXR5IGd1 ZXN0IEkvTyBjYW4gYmUgZ29vZC4NCg0KPiA+IE5vdywgSSBob3BlIHdoZW4gaXQgaXMgd3JpdGlu ZyB0aGUgZGF0YSB0byB0YXJnZXQgc3RvcmFnZSAsd2UgY2FuIHNlbmQgdGhlIHJlcXVlc3QgDQo+ ID4gb2YgcmVhZGluZyBkYXRhIGZyb20gc291cmNlIHN0b3JhZ2UuIEJlY2F1c2Ugb2YgIHVzaW5n ICBjb3JvdXRpbmUgdG8gZG8gaXQgLHRoZXJlIGlzIA0KPiA+IHNvbWUgdHJvdWJsZXMgdG8gYWNo aWV2ZSBpdC4gd2h5IG5vdCB1c2UgTXVsdGktdGhyZWFkPyANCj4gPiBTb21lIG9uZSBjYW4gZ2l2 ZSBtZSBzb21lIGlkZWE/DQoNCkl0IGNhbiBiZSBwYXJhbGxlbGl6ZWQgYnkgc3BsaXR0aW5nIHRo ZSBjb2RlIGludG8gdHdvIHNlcGFyYXRlIGxvb3BzOg0KDQpBIHJlYWRlciBjb3JvdXRpbmUgdGhh dCByZWFkcyBkYXRhIGZyb20gdGhlIHNvdXJjZSBkZXZpY2UgYW5kIHBsYWNlcw0KYnVmZmVycyBp biBhIHF1ZXVlLg0KDQpBIHdyaXRlciBjb3JvdXRpbmUgdGhhdCB0YWtlcyBidWZmZXJzIGZyb20g dGhlIHF1ZXVlIGFuZCB3cml0ZXMgZGF0YSB0bw0KdGhlIHRhcmdldCBkZXZpY2UuDQoNCihJbiBm YWN0IHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIHJlYWRlcnMgYW5kIHdyaXRlcnMuKQ0KDQpTdGVm YW4= ------=_001_NextPart420410433204_=---- Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable =EF=BB=BF
Thank you for your detailed reply.
Now, I am modifying the code to change the reading and writing proces= ses,=20
My purpose is that after it send the writing requestion and the=20 writing requestion
is not come back, then it send the reading requestion.
I think this way will be more reading and writing=20 pressure than before. 
 
I don't know why in mirror_iteration, each iteration send the number = of=20 data is
continuous dirty data, the maximum is the size of free_buffer(de= fault=20 is 10M),
I think the way will reduce the performance of IO,because the mirror = will=20 wait long
time to send next reading requestion. I think each iteration send the= =20 number of data
should base on the granularity ,we can set the granularity  is 1= M.=20 This way may be
let the reading  and writing is parallel. 
 

zhang min
 
Date: 2014-01-14 13:57
To: Fam Zheng
Subject: Re: [Qemu-devel] Question about drive=20 mirror
On Tue, Jan 14, 2014 at 09:41:41AM +0800, Fam Zheng wrote:
> On Mon, 01/13 23:44, rudyfly@163.com wrote:
> > I tested the capability of drive mirror, I found the IO is = low.=20 Then I read the code,
> > The code mirror_run() will call mirror_iteration() to read = the=20 size of buffer data 
> > from source storage, when the read callback ,and then in=20 mirror_read_complete ()
> > write the data to the target storage, It is serial.
 
And it also uses throttling to avoid impacting the guest too much.&nb= sp;=20 It's
considered a background job, i.e. not trying to saturate storage
bandwidth.
 
That said, improving performance while keeping I/O isolated from=20 higher
priority guest I/O can be good.
 
> > Now, I hope when it is writing the data to target storage ,= we can=20 send the request
> > of reading data from source storage. Because of  using=  =20 coroutine to do it ,there is
> > some troubles to achieve it. why not use Multi-thread?
> > Some one can give me some idea?
 
It can be parallelized by splitting the code into two separate loops:=
 
A reader coroutine that reads data from the source device and places<= /DIV>
buffers in a queue.
 
A writer coroutine that takes buffers from the queue and writes data=20 to
the target device.
 
(In fact there could be multiple readers and writers.)
 
Stefan
------=_001_NextPart420410433204_=------