Am 16.06.2011 15:10, schrieb Anthony Liguori:
> On 06/16/2011 07:35 AM, Kevin Wolf wrote:
>> To summarise what both things are about:
>>
>> * Image streaming is a normal image file plus copy-on-read plus a
>> background task that copies data from the source image
>> * Live block copy is a block-mirror of two normal image files plus a
>> background task that copies data from the source image
> 
> Is this correct in practice?
> 
> Image streaming has the following semantics for A -> B where B is the 
> backing file of A.

That B is a backing file of A is an implementation detail and not a
requirement.

> 1) All writes go to A.
> 2) If a read can be satisified by A, read from A, else read from B, copy 
> to A, then return
> 
> Block copy has the following semantics where A is the source and B is 
> the destination.
> 
> 1) All reads and writes go to A
> 2) Copy data from B to A in the background
> 3) When B matches the content of A, switch over to B

3) is optional, it would be like adding an item for image streaming that
it drops the backing file as soon as everything has been copied.

> Other than at a hand wave, they both do copies, I'm not sure I see the 
> overlap in implementations.

One thing is handling concurrent requests. If there's a concurrent guest
write request, it must always have precedence over the background copy/COR.

And even if we couldn't use a common implementation for live block copy
and image streaming, I think it's something that shouldn't be duplicated
for copy on read in each image format driver. I think it's possible to
have a generic COR implementation that would not only work for QED, but
also for qcow2, VMDK and any other format implementing backing files
without adding code to each driver.

Kevin

Reply via email to