qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Qemu coroutine behaviour on blocking send(3)


From: Paolo Bonzini
Subject: Re: [Qemu-devel] Qemu coroutine behaviour on blocking send(3)
Date: Fri, 28 Nov 2014 15:15:12 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0


On 28/11/2014 14:46, Iwan Budi Kusnanto wrote:
> On Fri, Nov 28, 2014 at 7:47 PM, Stefan Hajnoczi <address@hidden> wrote:
>> On Fri, Nov 28, 2014 at 01:55:00PM +0700, Iwan Budi Kusnanto wrote:
>>> I meant, does the coroutine will do yield internally when it get
>>> blocked on send(3)?
>>
>> No.  In general, QEMU will use non-blocking file descriptors so the
>> blocking case does not apply.  (You can't use blocking file descriptors
>> in an event loop without a risk of blocking the entire event loop.)
>>
>> There is qemu_co_send(), which attempts the non-blocking send(2) and
>> yields on EAGAIN.
>>
>> block/sheepdog.c and nbd.c both use this function.  It's a little ugly
>> because the caller must add/remove the socket write fd handler function
>> so that the coroutine is re-entered when the fd becomes writable again.
> 
> Thanks Stefan, it really helps.

I'll add that outgoing migration _does_ use blocking file descriptors.
But it runs in a separate thread and does not use coroutines.

Incoming migration, instead, uses coroutines, because it is not as
performance-intensive as outgoing migration and it's a bit easier to not
worry about thread-safety.

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]