From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:53097) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SrVrx-00066F-5y for qemu-devel@nongnu.org; Wed, 18 Jul 2012 11:09:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SrVrn-0000lc-8J for qemu-devel@nongnu.org; Wed, 18 Jul 2012 11:08:53 -0400 Received: from e06smtp16.uk.ibm.com ([195.75.94.112]:45440) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SrVrm-0000lG-Vy for qemu-devel@nongnu.org; Wed, 18 Jul 2012 11:08:43 -0400 Received: from /spool/local by e06smtp16.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 18 Jul 2012 16:08:42 +0100 Received: from d06av02.portsmouth.uk.ibm.com (d06av02.portsmouth.uk.ibm.com [9.149.37.228]) by d06nrmr1307.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q6IF8K4j2781324 for ; Wed, 18 Jul 2012 16:08:20 +0100 Received: from d06av02.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av02.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q6IF8J8o003105 for ; Wed, 18 Jul 2012 09:08:20 -0600 From: Stefan Hajnoczi Date: Wed, 18 Jul 2012 16:07:27 +0100 Message-Id: <1342624074-24650-1-git-send-email-stefanha@linux.vnet.ibm.com> Subject: [Qemu-devel] [RFC v9 00/27] virtio: virtio-blk data plane List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Anthony Liguori , Stefan Hajnoczi , kvm@vger.kernel.org, "Michael S. Tsirkin" , Khoa Huynh , Paolo Bonzini , Asias He This series implements a dedicated thread for virtio-blk processing using Linux AIO for raw image files only. It is based on qemu-kvm.git a0bc8c3 and somewhat old but I wanted to share it on the list since it has been mentioned on mailing lists and IRC recently. These patches can be used for benchmarking and discussion about how to improve block performance. Paolo Bonzini has also worked in this area and might want to share his patches. The basic approach is: 1. Each virtio-blk device has a thread dedicated to handling ioeventfd signalling when the guest kicks the virtqueue. 2. Requests are processed without going through the QEMU block layer using Linux AIO directly. 3. Completion interrupts are injected via ioctl from the dedicated thread. The series also contains request merging as a bdrv_aio_multiwrite() equivalent. This was only to get a comparison against the QEMU block layer and I would drop it for other types of analysis. The effect of this series is that O_DIRECT Linux AIO on raw files can bypass the QEMU global mutex and block layer. This means higher performance. A cleaned up version of this approach could be added to QEMU as a raw O_DIRECT Linux AIO fast path. Image file formats, protocols, and other block layer features are not supported by virtio-blk-data-plane. Git repo: http://repo.or.cz/w/qemu-kvm/stefanha.git/shortlog/refs/heads/virtio-blk-data-plane Stefan Hajnoczi (27): virtio-blk: Remove virtqueue request handling code virtio-blk: Set up host notifier for data plane virtio-blk: Data plane thread event loop virtio-blk: Map vring virtio-blk: Do cheapest possible memory mapping virtio-blk: Take PCI memory range into account virtio-blk: Put dataplane code into its own directory virtio-blk: Read requests from the vring virtio-blk: Add Linux AIO queue virtio-blk: Stop data plane thread cleanly virtio-blk: Indirect vring and flush support virtio-blk: Add workaround for BUG_ON() dependency in virtio_ring.h virtio-blk: Increase max requests for indirect vring virtio-blk: Use pthreads instead of qemu-thread notifier: Add a function to set the notifier virtio-blk: Kick data plane thread using event notifier set virtio-blk: Use guest notifier to raise interrupts virtio-blk: Call ioctl() directly instead of irqfd virtio-blk: Disable guest->host notifies while processing vring virtio-blk: Add ioscheduler to detect mergable requests virtio-blk: Add basic request merging virtio-blk: Fix request merging virtio-blk: Stub out SCSI commands virtio-blk: fix incorrect length msix: fix irqchip breakage in msix_try_notify_from_thread() msix: use upstream kvm_irqchip_set_irq() virtio-blk: add EVENT_IDX support to dataplane event_notifier.c | 7 + event_notifier.h | 1 + hw/dataplane/event-poll.h | 116 +++++++ hw/dataplane/ioq.h | 128 ++++++++ hw/dataplane/iosched.h | 97 ++++++ hw/dataplane/vring.h | 334 ++++++++++++++++++++ hw/msix.c | 15 + hw/msix.h | 1 + hw/virtio-blk.c | 753 +++++++++++++++++++++------------------------ hw/virtio-pci.c | 8 + hw/virtio.c | 9 + hw/virtio.h | 3 + 12 files changed, 1074 insertions(+), 398 deletions(-) create mode 100644 hw/dataplane/event-poll.h create mode 100644 hw/dataplane/ioq.h create mode 100644 hw/dataplane/iosched.h create mode 100644 hw/dataplane/vring.h -- 1.7.10.4