On Fri, Feb 22, 2013 at 09:53:11AM +0100, Paolo Bonzini wrote:
> Il 22/02/2013 00:38, mdroth ha scritto:
> > On Thu, Feb 21, 2013 at 11:12:01PM +0100, Paolo Bonzini wrote:
> >> Il 21/02/2013 22:07, mdroth ha scritto:
> >>>>>
> >>>>> 100% agree.  In particular hw/dataplane/event-poll.c should be the first
> >>>>> to go away, but AioContext provides the functionality that Ping Fan
> >>>>> needs.  But hw/dataplane/vring.c will probably be here for a longer
> >>> Has there been any discussion around introducing something similar to
> >>> AioContexts for fd handlers? This would avoid the dataplane-specific hooks
> >>> needed for NetClients in this series.
> >>
> >> AioContext can include file descriptors on POSIX systems (used for NBD
> >> and other network backends), see aio_set_fd_handler.
> > 
> > Sorry, was using "fd handlers" too generally. I mean specifically for
> > the qemu_set_fd_handler interfaces, where we currently rely on a single list
> > of IOHandlerRecords for registration and a single loop to drive them. Would
> > be nice if we could drive subsets of those via mini main loops, similar to 
> > the
> > way dataplane threads would with a particular AioContext via aio_poll (or 
> > perhaps
> > the exact same way)
> 
> Yes, that's what I meant actually.  You can already do it for POSIX,
> unfortunately Windows poses extra complication because sockets are not
> handles.
> 
> Moving more of the os_host_main_loop_wait to AioContext would be
> possible (timers are on the todo list, in fact), but we should only do
> it as need arises.

Were you planning on hanging another GSource off of AioContext to handle
timers?

I wonder if adding an interface to AioContext that allows you to just
register an arbitrary GSource might be the right approach.

We could consolidate qemu_set_fd_handler()/qemu_aio_set_fd_handler() on
POSIX by teaching the current GSource about fd_read_poll functions, and on
Windows qemu_set_fd_handler() would tie into a winsock-specific GSource
that we register with an AioContext. Might be able to do similar with
GSources for slirp and the qemu_add_wait_object() stuff.

Or maybe that's the plan already... glib-style main loops, but not
intrinsically tethered to GMainContext so we can implement our own
locking/priority/loop constructs if need be... seems to be what's been
discussed elsewhere, just trying to get an idea of what that might look
like.

> possible (timers are on the todo list, in fact), but we should only do
> it as need arises.

Yup, don't mean to get ahead of things, my main interest is just in how
we might deal with the interaction between NetClients and virtio-net
dataplane threads without introducing ad-hoc, dataplane-specific
mechanisms. If there was a general way for Nic to tell it's NetClient
peer "hey, i have my own thread/main loop, here's my {Aio,*}Context, register
your handlers there instead" I think this series might look a lot more
realistic as a default, or at least make merging it less risky. But the
right way to do that seems to tie into the discussion around making
other aio sources more GMainContext/AioContext-ish.

> 
> Paolo
> 
> > Currently, Ping Fan's patches basically do this already by accessing a
> > global reference to the vnet worker thread and attaching events/handlers to
> > it's event loop via a new set of registration functions (PATCH 7).
> > 
> > I think generalizing this by basing qemu_set_fd_handler() around
> > AioContext, or something similar, would help to extend support to other
> > NetClient implementations without requiring dataplane-specific hooks
> > throughout.
> 

Reply via email to