On 03/30/2010 05:07 PM, Anthony Liguori wrote:
On 03/30/2010 09:03 AM, Avi Kivity wrote:
So it looks like we really only have one operation
(qcow2_alloc_cluster_link_l2) that blocks. Do we really think that
it's sufficiently difficult to make this function asynchronous that
it justifies threading the block layer?
There are also tons of bdrv_pread()s and bdrv_pwrite()s. Isn't
growing some of the tables synchronous? how about creating a snapshot?
Eh, that ruins my whole argument.
But we can keep on arguing regardless, yes?
If it were just one operation in qcow2, threading would be a big
overkill. But threading also fixes all of the other format drivers,
and makes working on qcow2 easier.
Yeah, I think the only question is whether to stick threading in the
generic block layer or within qcow2.
Both. My plan is:
(1) some generic infrastructure
(2) kit that turns a synchronous block format driver into an
asynchronous one using (1), limited to one outstanding request
(3) adaptations to qcow2 using (1) to make it fully asynchronous,
capable of multiple outstanding requests (except when it issues a sync
request)
I've mostly done (1) and am contemplating (2).
--
Do not meddle in the internals of kernels, for they are subtle and quick to
panic.