From: Paolo Bonzini <pbonzini@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: mdroth <mdroth@linux.vnet.ibm.com>,
Stefan Hajnoczi <stefanha@gmail.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Liu Ping Fan <qemulist@gmail.com>,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC PATCH 0/2] port network layer onto glib
Date: Wed, 13 Mar 2013 17:21:02 +0100 [thread overview]
Message-ID: <5140A76E.1080902@redhat.com> (raw)
In-Reply-To: <87hakfiild.fsf@codemonkey.ws>
Il 13/03/2013 13:34, Anthony Liguori ha scritto:
> Paolo Bonzini <pbonzini@redhat.com> writes:
>
>> Il 13/03/2013 06:59, Liu Ping Fan ha scritto:
>>> These series aim to port network backend onto glib, and
>>> prepare for moving towards making network layer mutlit-thread.
>>> The brief of the whole aim and plan is documented on
>>> http://wiki.qemu.org/Features/network_reentrant
>>>
>>> In these series, attach each NetClientState with a GSource
>>> At the first, I use AioContext instead of GSource, but after discussion,
>>> I think with GSource, we can integrated with glib more closely.
>>
>> Integrating with glib by itself is pointless. What is the *benefit*?
>>
>> We have a pretty good idea of how to make multithreaded device models
>> using AioContext, since we are using it for the block layer and
>> virtio-blk dataplane. Doing the same work twice, on two different
>> frameworks, doesn't seem like a very good idea.
>
> Hrm, I had thought on previous threads there was clear agreement that we
> did not want to use AioContext outside of the block layer.
>
> I think we certainly all agree that moving to a thread aware event loop
> is a necessary step toward multi-threading. I think the only question
> is whether to use AioContext or glib.
>
> AioContext is necessary for the block layer because the block layer
> still has synchronous I/O. I think we should aim to replace all sync
> I/O in the long term with coroutine based I/O. That lets us eliminate
> AioContextes entirely which is nice as the semantics are subtle.
>
> I think that's a solid argument for glib over AioContext. The former is
> well understood, documented, and makes unit testing easier.
I don't see anything particularly subtle in AioContext, except
qemu_bh_schedule_idle and the flush callback. The flush callback only
has a naming problem really, it is a relic of qemu_aio_flush().
qemu_bh_schedule_idle could disappear if we converted the floppy disk
drive to AIO; patches existed for that but then the poster disappeared.
glib's main loop has its share of subtleness (GMainLoop vs.
GMainContext, anyone?), and AioContext's code is vastly simpler than
GMainLoop's. AioContext is also documented and unit tested, with tests
for both standalone and GSource operation. Unit tests for AioContext
users are trivial to write, we have one in test-thread-pool.
> Did you have a specific concern with using glib vs. AioContext? Is it
> about reusing code in the block layer where AioContext is required?
In the short term yes, code duplication is a concern. We already have
two implementation of virtio. I would like the dataplane virtio code to
grow everything else that needs to be in all dataplane-style devices
(for example, things such as setting up the guest<->host notifiers), and
the hw/virtio.c API implemented on top of it (or dead altogether).
Usage of AioContext is pretty much forced by the block layer.
However, I'm more worried by overhead. GMainLoop is great because
everybody plugs into it. It enabled the GTK+ front-end, it let us reuse
GIOChannel for chardev flow control, and one can similarly think of
integrating Avahi for example. However, I think it's mostly useful for
simple-minded non-performance-critical code. QEMU has worked great in
almost all scenarios with only one non-VCPU thread, and if we are going
to move stuff to other threads we should only do that because we want
performance and control. I'm not at all confident that GMainLoop can
provide them.
On the contrary, AioContext really does two things (g_poll and bottom
halves) and does them fast. For really high-performance scenarios, such
as the ones virtio-blk-dataplane was written for, I'd be surprised if
glib's main loop had the same performance as AioContext. Also,
AioContext could be easily converted to use epoll, while we don't have
the same level of control on glib's main loop.
Of course I will easily change my mind if I see patches that show the
contrary. :)
Paolo
next prev parent reply other threads:[~2013-03-13 16:23 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-13 5:59 [Qemu-devel] [RFC PATCH 0/2] port network layer onto glib Liu Ping Fan
2013-03-13 5:59 ` [Qemu-devel] [RFC PATCH 1/2] net: port tap " Liu Ping Fan
2013-03-13 5:59 ` [Qemu-devel] [RFC PATCH 2/2] net: port hub " Liu Ping Fan
2013-03-13 10:58 ` [Qemu-devel] [RFC PATCH 0/2] port network layer " Paolo Bonzini
2013-03-13 12:34 ` Anthony Liguori
2013-03-13 16:21 ` Paolo Bonzini [this message]
2013-03-13 17:06 ` mdroth
2013-03-13 17:31 ` Paolo Bonzini
2013-03-13 17:52 ` Michael S. Tsirkin
2013-03-13 18:09 ` Anthony Liguori
2013-03-13 17:23 ` Anthony Liguori
2013-03-13 17:35 ` Paolo Bonzini
2013-03-13 17:52 ` Anthony Liguori
2013-03-14 9:29 ` Stefan Hajnoczi
2013-03-14 9:53 ` Paolo Bonzini
2013-03-13 17:58 ` Anthony Liguori
2013-03-13 18:08 ` Paolo Bonzini
2013-03-13 18:51 ` Anthony Liguori
2013-03-14 10:04 ` Peter Maydell
2013-03-14 10:53 ` Paolo Bonzini
2013-03-14 11:00 ` Peter Maydell
2013-03-14 11:04 ` Paolo Bonzini
2013-03-14 11:26 ` Peter Maydell
2013-03-15 9:13 ` Stefan Hajnoczi
2013-03-19 9:30 ` Markus Armbruster
2013-03-19 10:12 ` Peter Maydell
2013-03-19 10:34 ` Paolo Bonzini
2013-03-19 10:38 ` Peter Maydell
2013-03-19 10:45 ` Paolo Bonzini
2013-03-14 14:08 ` liu ping fan
2013-03-14 14:18 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5140A76E.1080902@redhat.com \
--to=pbonzini@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemulist@gmail.com \
--cc=stefanha@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).