On 09/10/2010 12:42 PM, Kevin Wolf wrote:
It bounces all buffers still and I still think it's synchronous
(although Kevin would know better).
Yes, it does bounce the buffers, though I'm looking into this anyway
because you raised concerns about unbounded allocations. (And it has
been on my todo list for a while, but there were always more urgent things)
What's synchronous in qcow2 is metadata access and COW. The guest
requests themselves are handled asynchronously.
I think we should differentiate between serialized requests and
synchronous requests because I got a bit sloppy in my nomenclature.
Metadata reads and writes along with COW operations are synchronous in
qcow2 IIUC. The data read/write is asynchronous.
Metadata is cached and if a cache hit is taken, then a full request can
be asynchronous.
It's not clear to me if qcow2 can handle parallel requests though
assuming that both requests don't require a cache miss for meta data.
Does any meta data cache miss (read or write) cause a stall/flush of the
request queue?
In QED, all operations are asynchronous including metadata cache misses
and COW operations.
Multiple requests are handled in parallel with the exception of metadata
writes. A metadata write will stall all future metadata cache miss
fulfillment but they remain asynchronous. Requests that can be
satisfied from the cache will be executed in parallel though.
In the future, we'll do something more sophisticated and allow multiple
simultaneous metadata writes provided they aren't do the same L2/L1
location.
Regards,
Anthony Liguori