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. Paolo