[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutin
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O |
Date: |
Thu, 27 Jan 2011 12:27:47 +0100 |
User-agent: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.15) Gecko/20101027 Fedora/3.0.10-1.fc12 Thunderbird/3.0.10 |
Am 27.01.2011 11:41, schrieb Avi Kivity:
> On 01/27/2011 12:34 PM, Kevin Wolf wrote:
>> Am 27.01.2011 10:49, schrieb Avi Kivity:
>>> On 01/27/2011 11:27 AM, Kevin Wolf wrote:
>>>> Well, but in the case of qcow2, you don't want to have a big mutex
>>>> around everything. We perfectly know which parts are asynchronous and
>>>> which are synchronous, so we'd want to do it finer grained from the
>>>> beginning.
>>>
>>> Yes we do. And the way I proposed it, the new mutex does not introduce
>>> any new serialization.
>>>
>>> To repeat, for every qcow2 callback or completion X (not qcow2 read or
>>> write operation), we transform it in the following manner:
>>> [...]
>>
>> This works fine for code that is completely synchronous today (and you
>> can't serialize it more than it already is anyway).
>>
>> It doesn't work for qemu_aio_readv/writev because these use AIO for
>> reading/writing the data. So you definitely need to rewrite that part,
>> or the AIO callback will cause the code to run outside its coroutine.
>
> The callbacks need to be wrapped in the same way. Schedule a coroutine
> to run the true callback.
Okay, I see what you're proposing. You could schedule a new coroutine
for callbacks indeed.
But I think it's actually easier to convert the bdrv_aio_readv into a
bdrv_co_readv (and by that removing the callback) and just make sure
that you don't hold the mutex during this call - basically what Stefan's
code does, just with mutexes instead of a request queue.
>> And during this rewrite you'll want to pay attention that you don't hold
>> the mutex for the bdrv_co_readv that was an AIO request before, or
>> you'll introduce additional serialization.
>
> I don't follow. Please elaborate.
We were thinking of different approaches. I hope it's clearer now.
Kevin
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, (continued)
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Anthony Liguori, 2011/01/26
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Avi Kivity, 2011/01/26
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Anthony Liguori, 2011/01/26
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Avi Kivity, 2011/01/26
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Anthony Liguori, 2011/01/26
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Avi Kivity, 2011/01/27
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Kevin Wolf, 2011/01/27
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Avi Kivity, 2011/01/27
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Kevin Wolf, 2011/01/27
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Avi Kivity, 2011/01/27
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O,
Kevin Wolf <=
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Avi Kivity, 2011/01/27
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Avi Kivity, 2011/01/26
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Stefan Hajnoczi, 2011/01/27
- Re: [Qemu-devel] [RFC][PATCH 11/12] qcow2: Convert qcow2 to use coroutines for async I/O, Avi Kivity, 2011/01/27
[Qemu-devel] [RFC][PATCH 01/12] coroutine: Add gtk-vnc coroutines library, Stefan Hajnoczi, 2011/01/22