From patchwork Fri Aug 27 22:37:45 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Williamson X-Patchwork-Id: 62881 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id F0CCBB7101 for ; Sat, 28 Aug 2010 08:43:43 +1000 (EST) Received: from localhost ([127.0.0.1]:50974 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Op7e6-0002KS-B1 for incoming@patchwork.ozlabs.org; Fri, 27 Aug 2010 18:43:38 -0400 Received: from [140.186.70.92] (port=48532 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Op7Ya-0007y2-2R for qemu-devel@nongnu.org; Fri, 27 Aug 2010 18:38:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Op7YV-0004Im-2A for qemu-devel@nongnu.org; Fri, 27 Aug 2010 18:37:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54848) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Op7YU-0004Ig-Qn for qemu-devel@nongnu.org; Fri, 27 Aug 2010 18:37:51 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o7RMbncx032502 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 27 Aug 2010 18:37:49 -0400 Received: from s20.home (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o7RMbkLw031129; Fri, 27 Aug 2010 18:37:47 -0400 From: Alex Williamson To: qemu-devel@nongnu.org Date: Fri, 27 Aug 2010 16:37:45 -0600 Message-ID: <20100827223745.2696.18845.stgit@s20.home> In-Reply-To: <20100827223659.2696.3589.stgit@s20.home> References: <20100827223659.2696.3589.stgit@s20.home> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. Cc: jes.sorensen@redhat.com, alex.williamson@redhat.com, kvm@vger.kernel.org Subject: [Qemu-devel] [PATCH 5/5] virtio-net: Switch default to new bottom half TX handler for iothread X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The bottom half handler shows big improvements over the timer with few downsides, default to it when the iothread is enabled. Using the following tests, with the guest and host connected via tap+bridge: guest> netperf -t TCP_STREAM -H $HOST host> netperf -t TCP_STREAM -H $GUEST guest> netperf -t UDP_STREAM -H $HOST host> netperf -t UDP_STREAM -H $GUEST guest> netperf -t TCP_RR -H $HOST Results: base throughput, exits/throughput -> patched throughput, exits/throughput --enable-io-thread TCP guest->host 2737.77, 47.82 -> 6767.09, 29.15 = 247%, 61% TCP host->guest 2231.33, 74.00 -> 4125.80, 67.61 = 185%, 91% UDP guest->host 6281.68, 14.66 -> 12569.27, 1.98 = 200%, 14% UDP host->guest 275.91, 289.22 -> 264.80, 293.53 = 96%, 101% interations/s 1949.65, 82.97 -> 7417.56, 84.31 = 380%, 102% No --enable-io-thread TCP guest->host 3041.57, 55.11 -> 1038.93, 517.57 = 34%, 939% TCP host->guest 2416.03, 76.67 -> 5655.92, 55.52 = 234%, 72% UDP guest->host 12255.82, 6.11 -> 7775.87, 31.32 = 63%, 513% UDP host->guest 587.92, 245.95 -> 611.88, 239.92 = 104%, 98% interations/s 1975.59, 83.21 -> 8935.50, 88.18 = 452%, 106% Signed-off-by: Alex Williamson --- hw/s390-virtio-bus.c | 3 ++- hw/syborg_virtio.c | 3 ++- hw/virtio-pci.c | 3 ++- hw/virtio.h | 6 ++++++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c index 1483362..985f99a 100644 --- a/hw/s390-virtio-bus.c +++ b/hw/s390-virtio-bus.c @@ -328,7 +328,8 @@ static VirtIOS390DeviceInfo s390_virtio_net = { .qdev.size = sizeof(VirtIOS390Device), .qdev.props = (Property[]) { DEFINE_NIC_PROPERTIES(VirtIOS390Device, nic), - DEFINE_PROP_UINT32("txtimer", VirtIOS390Device, txtimer, 1), + DEFINE_PROP_UINT32("txtimer", VirtIOS390Device, txtimer, + TXTIMER_DEFAULT), DEFINE_PROP_INT32("txburst", VirtIOS390Device, txburst, 256), DEFINE_PROP_END_OF_LIST(), }, diff --git a/hw/syborg_virtio.c b/hw/syborg_virtio.c index 7b76972..ee5746d 100644 --- a/hw/syborg_virtio.c +++ b/hw/syborg_virtio.c @@ -300,7 +300,8 @@ static SysBusDeviceInfo syborg_virtio_net_info = { .qdev.props = (Property[]) { DEFINE_NIC_PROPERTIES(SyborgVirtIOProxy, nic), DEFINE_VIRTIO_NET_FEATURES(SyborgVirtIOProxy, host_features), - DEFINE_PROP_UINT32("txtimer", SyborgVirtIOProxy, txtimer, 1), + DEFINE_PROP_UINT32("txtimer", SyborgVirtIOProxy, txtimer, + TXTIMER_DEFAULT), DEFINE_PROP_INT32("txburst", SyborgVirtIOProxy, txburst, 256), DEFINE_PROP_END_OF_LIST(), } diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index e025c09..9740f57 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -695,7 +695,8 @@ static PCIDeviceInfo virtio_info[] = { DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3), DEFINE_VIRTIO_NET_FEATURES(VirtIOPCIProxy, host_features), DEFINE_NIC_PROPERTIES(VirtIOPCIProxy, nic), - DEFINE_PROP_UINT32("txtimer", VirtIOPCIProxy, txtimer, 1), + DEFINE_PROP_UINT32("txtimer", VirtIOPCIProxy, txtimer, + TXTIMER_DEFAULT), DEFINE_PROP_INT32("txburst", VirtIOPCIProxy, txburst, 256), DEFINE_PROP_END_OF_LIST(), }, diff --git a/hw/virtio.h b/hw/virtio.h index 4051889..a1a17a2 100644 --- a/hw/virtio.h +++ b/hw/virtio.h @@ -183,6 +183,12 @@ void virtio_update_irq(VirtIODevice *vdev); void virtio_bind_device(VirtIODevice *vdev, const VirtIOBindings *binding, void *opaque); +#ifdef CONFIG_IOTHREAD + #define TXTIMER_DEFAULT 0 +#else + #define TXTIMER_DEFAULT 1 +#endif + /* Base devices. */ VirtIODevice *virtio_blk_init(DeviceState *dev, BlockConf *conf); VirtIODevice *virtio_net_init(DeviceState *dev, NICConf *conf,