On 28/11/2014 14:46, Iwan Budi Kusnanto wrote: > On Fri, Nov 28, 2014 at 7:47 PM, Stefan Hajnoczi <stefa...@gmail.com> 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