qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [Qemu-block] [PATCH v2 11/11] block: Only poll block la


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [Qemu-block] [PATCH v2 11/11] block: Only poll block layer fds in bdrv_aio_poll
Date: Fri, 11 Sep 2015 13:02:47 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0


On 11/09/2015 13:01, Fam Zheng wrote:
> On Fri, 09/11 12:46, Paolo Bonzini wrote:
>>
>>
>> On 11/09/2015 12:40, Fam Zheng wrote:
>>> On Fri, 09/11 11:54, Paolo Bonzini wrote:
>>>>
>>>>
>>>> On 11/09/2015 11:44, Fam Zheng wrote:
>>>>>>>> That would be a step back.  Using GSource is useful because it lets
>>>>>>>> you integrate libraries such as GTK+.
>>>>>>>
>>>>>>> Can we move GTK to a separate GSource thread?
>>>>>>
>>>>>> I think that GTK should always run in the main thread, or at least the
>>>>>> one running the default main loop / GMainContext.
>>>>>
>>>>> Yeah it's basically GMainContext staying in the main thread and
>>>>> block/net/chardev I/O put in a new AioContext thread.
>>>>
>>>> Why?  The point of an event loop is that you can multiplex everything on
>>>> the same thread.  Unless we have specific needs (e.g. scalability) one
>>>> thread is the way to go and keep things simple.
>>>
>>> The reason is scalability. :)
>>
>> Scalability of what?  If virtio-net or virtio-serial needs to be more
>> scalable, putting all of them into a non-main-loop thread will not make
>> things more scalable, because you have a single thread anyway.  You'd
>> need to go BQL-free and allow an arbitrary number.
>>
>>> Moving things to AIO isn't deviation, it's more about enabling of dataplane 
>>> and
>>> epoll. That's why block was moved to AioContext, and I think we can do 
>>> similar
>>> for net and serial, the difference is that as a start, they don't need to be
>>> fully BQL-free like virtio-blk and scsi. But by running in an aio_poll() 
>>> loop,
>>> they can better performance because of epoll.
>>
>> Isn't that what your "iohandler.c with AioHandler" already does?  True,
>> it would be epoll-within-poll, not pure poll.  But if you need epoll,
>> you might as well go BQL-free.
> 
> epoll-within-poll? Do you mean change the main event loop from:
> 
>     qemu_poll_ns([..., ioeventfd1, ioeventfd2, ..., ioeventfd99], ...)
> 
> to
> 
>     qemu_poll_ns([epollfd], ...)
> 
> where epollfd watches all the fds, and let the handler of epollfd do
> epoll_wait()?

I mean that glib's main loop (or os_host_main_loop_wait in main-loop.c)
uses poll, and then the AioContext GSource uses epoll.  Still, you have
a constant (and low) number of file descriptors in the outer poll.

Paolo



reply via email to

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