From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59728) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W1RAG-0002kR-G8 for qemu-devel@nongnu.org; Thu, 09 Jan 2014 20:45:42 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W1RAA-0001in-AO for qemu-devel@nongnu.org; Thu, 09 Jan 2014 20:45:36 -0500 Received: from mx1.redhat.com ([209.132.183.28]:32741) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W1RA9-0001ij-UB for qemu-devel@nongnu.org; Thu, 09 Jan 2014 20:45:30 -0500 From: Stefan Hajnoczi Date: Fri, 10 Jan 2014 09:45:10 +0800 Message-Id: <1389318316-18841-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [RFC v2 0/6] dataplane: switch to N:M devices-per-thread model List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Paolo Bonzini , Michael Roth , Igor Mammedov 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