[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] 答复: Question about aio_poll and glib aio_ctx_dispatch
From: |
Li Qiang |
Subject: |
[Qemu-devel] 答复: Question about aio_poll and glib aio_ctx_dispatch |
Date: |
Thu, 20 Dec 2018 06:58:50 +0800 |
Hello Paolo
Thanks for your kind reply.
Yes, aio_poll and aio_ctx_dispatch mostly run in different threads, though
Sometimes they can run in a thread nested from Fam’s slides:
→http://events17.linuxfoundation.org/sites/events/files/slides/Improving%20the%20QEMU%20Event%20Loop%20-%203.pdf
So you mean we can poll the same fd in two threads? If so , the ‘fd’ in
‘qemu_aio_context’ will be run twice, I think there’s
something I understand wrong.
Let’s take an example. In the ‘v9fs_reset’.
void v9fs_reset(V9fsState *s)
{
VirtfsCoResetData data = { .pdu = { .s = s }, .done = false };
Coroutine *co;
while (!QLIST_EMPTY(&s->active_list)) {
aio_poll(qemu_get_aio_context(), true);
}
co = qemu_coroutine_create(virtfs_co_reset, &data);
qemu_coroutine_enter(co);
while (!data.done) {
aio_poll(qemu_get_aio_context(), true);
}
}
Here we use aio_poll to wait the pending action to complete.
Here aio_poll will poll the fds in ‘qemu_aio_context’ in vcpu thread,
However, the main loop is also poll the fds in ‘qemu_aio_context’.
If some ‘fd’ in ‘qemu_aio_context’ has events, the two thread will be wakeup?
You say both will call aio_dispatch_handlers and timerlistgroup_run_timers.
But the are the same fd, how can this happen?
Thanks,
Li Qiang
发件人: Paolo Bonzini
发送时间: 2018年12月20日 4:42
收件人: Li Qiang; address@hidden; address@hidden; Qemu Developers; 李强
主题: Re: Question about aio_poll and glib aio_ctx_dispatch
On 19/12/18 11:05, Li Qiang wrote:
> Sent it to qemu-devel.
>
> Li Qiang <address@hidden <mailto:address@hidden>> 于2018年12月19日周
> 三 下午6:04写道:
>
> Hello Paolo, Stefan, Fam and all,
>
> Here I have a question about 'aio_poll'.
> IIUC the 'aio_poll' is (mostly) used for synchronous IO
> as I see a lot of code like this:
> while(condition)
> aio_poll();
>
> However it seems the 'aio_poll' and 'aio_ctx_dispatch' both poll the fd.
> So what happened when the 'fd' has events, which function will be
> wakeup?
Roughly speaking, aio_poll is used for synchronous IO and within I/O
threads; aio_ctx_dispatch is used within the main thread.
Both end up calling aio_dispatch_handlers and timerlistgroup_run_timers.
Paolo