From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
To: Corentin Chary <corentin.chary@gmail.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Anthony Liguori <aliguori@us.ibm.com>,
qemu-devel@nongnu.org, Blue Swirl <blauwirbel@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v3 0/4] Coroutines for better asynchronous programming
Date: Sat, 14 May 2011 08:45:46 +0100 [thread overview]
Message-ID: <20110514074546.GA11489@stefanha-thinkpad.localdomain> (raw)
In-Reply-To: <BANLkTin5x1xvSRC1YqDf57Lu8h7zCSHYrA@mail.gmail.com>
On Sat, May 14, 2011 at 08:55:40AM +0200, Corentin Chary wrote:
> On Fri, May 13, 2011 at 11:26 AM, Stefan Hajnoczi
> <stefanha@linux.vnet.ibm.com> wrote:
> > QEMU is event-driven and suffers when blocking operations are performed because
> > VM execution may be stopped until the operation completes. Therefore many
> > operations that could block are performed asynchronously and a callback is
> > invoked when the operation has completed. This allows QEMU to continue
> > executing while the operation is pending.
> >
> > The downside to callbacks is that they split up code into many smaller
> > functions, each of which is a single step in a state machine that quickly
> > becomes complex and hard to understand. Callback functions also result in lots
> > of noise as variables are packed and unpacked into temporary structs that pass
> > state to the callback function.
> >
> > This patch series introduces coroutines as a solution for writing asynchronous
> > code while still having a nice sequential control flow. The semantics are
> > explained in the first patch. The second patch adds automated tests.
> >
> > A nice feature of coroutines is that it is relatively easy to take synchronous
> > code and lift it into a coroutine to make it asynchronous. Work has been done
> > to move qcow2 request processing into coroutines and thereby make it
> > asynchronous (today qcow2 will perform synchronous metadata accesses). This
> > qcow2 work is still ongoing and not quite ready for mainline yet.
> >
> > Coroutines are also being used for virtfs (virtio-9p) so I have submitted this
> > patch now because virtfs patches that depend on coroutines are being published.
> >
> > Other areas of QEMU that could take advantage of coroutines include the VNC
> > server, migration, and qemu-tools.
>
> Hum, the VNC server is already threaded, how would coroutines help ?
> Do you plan to rewrite the server using coroutines instead of threads
> ?
The main control flow in the VNC server is a state-machine. Imagine a
VNC session running as sequential code in a coroutine instead of being
broken up across callbacks. I think it would be easier to follow
although rewriting it now may not be worth the effort unless significant
future VNC work is planned for the future.
Stefan
prev parent reply other threads:[~2011-05-14 7:46 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-13 9:26 [Qemu-devel] [PATCH v3 0/4] Coroutines for better asynchronous programming Stefan Hajnoczi
2011-05-13 9:26 ` [Qemu-devel] [PATCH v3 1/4] coroutine: introduce coroutines Stefan Hajnoczi
2011-05-13 10:32 ` Paolo Bonzini
2011-05-13 11:19 ` Stefan Hajnoczi
2011-05-13 9:26 ` [Qemu-devel] [PATCH v3 2/4] coroutine: add check-coroutine automated tests Stefan Hajnoczi
2011-05-13 9:26 ` [Qemu-devel] [PATCH v3 3/4] coroutine: add check-coroutine --benchmark-lifecycle Stefan Hajnoczi
2011-05-13 9:26 ` [Qemu-devel] [PATCH v3 4/4] coroutine: pool coroutines to speed up creation Stefan Hajnoczi
2011-05-14 6:55 ` [Qemu-devel] [PATCH v3 0/4] Coroutines for better asynchronous programming Corentin Chary
2011-05-14 7:45 ` Stefan Hajnoczi [this message]
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=20110514074546.GA11489@stefanha-thinkpad.localdomain \
--to=stefanha@linux.vnet.ibm.com \
--cc=aliguori@us.ibm.com \
--cc=blauwirbel@gmail.com \
--cc=corentin.chary@gmail.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).