All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Michael Roth <mdroth@linux.vnet.ibm.com>,
	Igor Mammedov <imammedo@redhat.com>
Subject: [Qemu-devel] [RFC v2 0/6] dataplane: switch to N:M devices-per-thread model
Date: Fri, 10 Jan 2014 09:45:10 +0800	[thread overview]
Message-ID: <1389318316-18841-1-git-send-email-stefanha@redhat.com> (raw)

This series moves the event loop thread out of dataplane code.  It makes
-object iothread,id=foo a separate concept.  This makes it possible to bind
several devices to the same iothread.

Syntax:

  qemu -object iothread,id=iothread0 \
       -device virtio-blk-pci,iothread=iothread0,x-data-plane=on,...

For backwards-compatibility the iothread= parameter can be omitted.  A
per-device IOThread will be created behind the scenes (just like the old 1:1
threading model).

This series includes the aio_context_acquire/release API which makes it easy to
synchronize access to AioContext across threads.

Mike: My goal is to get this into QEMU 2.0.  How can we get the QContext ball
rolling?  The only feature I'm missing is an API to query thread IDs for
iothread host CPU affinity.  Besides that the IOThread object does what I need
for virtio-blk dataplane.

v2:
 * Based off Igor's "-object/object-add support custom location and 2nd stage
   initialization" series
 * Dropped dedicated -iothread option in favor of -object
 * Avoid re-acquiring rfifo in iothread_run() [mdroth]

Stefan Hajnoczi (6):
  rfifolock: add recursive FIFO lock
  aio: add aio_context_acquire() and aio_context_release()
  iothread: add I/O thread object
  qdev: add get_pointer_and_free() for temporary strings
  iothread: add "iothread" qdev property type
  dataplane: replace internal thread with IOThread

 Makefile.objs                    |   1 +
 async.c                          |  18 ++++++
 hw/block/dataplane/virtio-blk.c  |  95 +++++++++++++++-------------
 hw/core/qdev-properties-system.c |  65 +++++++++++++++++++
 include/block/aio.h              |  18 ++++++
 include/hw/qdev-properties.h     |   3 +
 include/hw/virtio/virtio-blk.h   |   8 ++-
 include/qemu/rfifolock.h         |  54 ++++++++++++++++
 include/sysemu/iothread.h        |  30 +++++++++
 iothread.c                       | 132 +++++++++++++++++++++++++++++++++++++++
 tests/Makefile                   |   2 +
 tests/test-aio.c                 |  58 +++++++++++++++++
 tests/test-rfifolock.c           |  90 ++++++++++++++++++++++++++
 util/Makefile.objs               |   1 +
 util/rfifolock.c                 |  78 +++++++++++++++++++++++
 15 files changed, 609 insertions(+), 44 deletions(-)
 create mode 100644 include/qemu/rfifolock.h
 create mode 100644 include/sysemu/iothread.h
 create mode 100644 iothread.c
 create mode 100644 tests/test-rfifolock.c
 create mode 100644 util/rfifolock.c

-- 
1.8.4.2

             reply	other threads:[~2014-01-10  1:45 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-10  1:45 Stefan Hajnoczi [this message]
2014-01-10  1:45 ` [Qemu-devel] [RFC v2 1/6] rfifolock: add recursive FIFO lock Stefan Hajnoczi
2014-01-20 10:22   ` Fam Zheng
2014-02-20 12:45     ` Stefan Hajnoczi
2014-01-10  1:45 ` [Qemu-devel] [RFC v2 2/6] aio: add aio_context_acquire() and aio_context_release() Stefan Hajnoczi
2014-01-20 10:29   ` Fam Zheng
2014-02-20 12:45     ` Stefan Hajnoczi
2014-01-10  1:45 ` [Qemu-devel] [RFC v2 3/6] iothread: add I/O thread object Stefan Hajnoczi
2014-01-10  1:45 ` [Qemu-devel] [RFC v2 4/6] qdev: add get_pointer_and_free() for temporary strings Stefan Hajnoczi
2014-01-10  1:45 ` [Qemu-devel] [RFC v2 5/6] iothread: add "iothread" qdev property type Stefan Hajnoczi
2014-01-10  1:45 ` [Qemu-devel] [RFC v2 6/6] dataplane: replace internal thread with IOThread Stefan Hajnoczi

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=1389318316-18841-1-git-send-email-stefanha@redhat.com \
    --to=stefanha@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mdroth@linux.vnet.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.