From: "Daniel P. Berrange" <berrange@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: "Kevin Wolf" <kwolf@redhat.com>,
"David Airlie" <airlied@redhat.com>,
"Marc-André Lureau" <mlureau@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] RFC: running the user interface in a thread ...
Date: Thu, 21 Jan 2016 10:40:55 +0000 [thread overview]
Message-ID: <20160121104055.GD19835@redhat.com> (raw)
In-Reply-To: <20160121095811.GA3671@stefanha-x1.localdomain>
On Thu, Jan 21, 2016 at 09:58:11AM +0000, Stefan Hajnoczi wrote:
> On Tue, Jan 19, 2016 at 01:51:09PM +0100, Kevin Wolf wrote:
> > Am 18.01.2016 um 10:54 hat Gerd Hoffmann geschrieben:
> > > Hi folks,
> > >
> > > I'm starting to investigate if and how we can move the user interface
> > > code into its own thread instead of running it in the iothread and
> > > therefore avoid blocking the guest in case some UI actions take a little
> > > longer.
> > >
> > > opengl and toolkits tend to be bad at multithreading. So my idea is to
> > > have a single thread dedicated to all the UI + rendering stuff, possibly
> > > let even the virglrenderer run in ui thread context.
> > >
> > > I think we have to make that opt-in per user interface, so we can go
> > > forward step by step.
> > >
> > > The ui thread will need quite some stuff provided by the mainloop. Wait
> > > for all kinds of events (from vnc socket, x11 connection, ...).
> > > Probably timers too. Wait for events from other threads (guest screen
> > > updates).
> > >
> > > Suggestions how to tackle that?
> > > Can I reuse the qemu mainloop code outside of the iothread?
> >
> > That should be possible. The block layer runs additional main loops in
> > dataplane threads. I think AioContext is the keyword here, so that you
> > process only events in your own UI context.
> >
> > I'm copying Stefan who knows this stuff a bit better than me.
> >
> > > Maybe it'll be better to go straight for a glib main loop?
>
> That sounds good in theory (but see below) since AioContext integrates
> with the glib main loop because it is a GSource. QEMU code should use
> AioContext where we have high resolution timers and APIs for file
> descriptor, EventNotifier, and BH.
>
> But I think using multiple glib main loops has limitations/problems.
> CCing Daniel Berrange because I vaguely remember this topic being
> discussed.
WRT to GTK you need to be very careful to ensure all gtk_* and
gdk_* API calls are made from a single thread. Running multiple
glib main loops isn't per-se a problem, as long as you respect
that threading requirement. FWIW, spice already has its own
background thread that runs its own main loop.
> > > Is it possible to wait for file handle events and posix condition
> > > variables at the same time?
>
> I don't think POSIX condition variables can be monitored from an event
> loop.
Yep, you can't monitor condition vars from poll()
> Use BH or EventNotifier instead. BH has optimizations to avoid syscalls
> where possible while EventNotifier is just a plain eventfd/pipe
> (requires a write() syscall for each notification).
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
next prev parent reply other threads:[~2016-01-21 10:41 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-18 9:54 [Qemu-devel] RFC: running the user interface in a thread Gerd Hoffmann
2016-01-18 20:34 ` Eric Blake
2016-01-19 13:01 ` Gerd Hoffmann
2016-01-19 13:38 ` Dr. David Alan Gilbert
2016-01-19 14:14 ` Gerd Hoffmann
2016-01-20 14:33 ` Kevin Wolf
2016-01-19 15:19 ` Markus Armbruster
2016-01-19 15:28 ` Daniel P. Berrange
2016-01-20 5:05 ` Eric Blake
2016-01-20 8:45 ` Gerd Hoffmann
2016-01-19 12:51 ` Kevin Wolf
2016-01-21 9:58 ` Stefan Hajnoczi
2016-01-21 10:39 ` Gerd Hoffmann
2016-01-21 10:52 ` Paolo Bonzini
2016-01-21 10:40 ` Daniel P. Berrange [this message]
2016-01-19 15:37 ` Daniel P. Berrange
2016-01-20 7:13 ` Gerd Hoffmann
2016-01-21 8:44 ` Dave Airlie
2016-01-21 9:05 ` Paolo Bonzini
2016-01-21 9:52 ` Gerd Hoffmann
2016-01-21 10:16 ` Paolo Bonzini
2016-01-22 1:38 ` Dave Airlie
2016-01-22 6:59 ` Gerd Hoffmann
2016-01-22 7:14 ` Dave Airlie
2016-01-21 9:00 ` Fam Zheng
2016-01-21 9:45 ` Gerd Hoffmann
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=20160121104055.GD19835@redhat.com \
--to=berrange@redhat.com \
--cc=airlied@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=mlureau@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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).