From owner-freebsd-net@FreeBSD.ORG Wed May 22 16:40:10 2013 Return-Path: Delivered-To: net@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id F2E3592E for ; Wed, 22 May 2013 16:40:09 +0000 (UTC) (envelope-from luigi@onelab2.iet.unipi.it) Received: from onelab2.iet.unipi.it (onelab2.iet.unipi.it [131.114.59.238]) by mx1.freebsd.org (Postfix) with ESMTP id BC4C8323 for ; Wed, 22 May 2013 16:40:09 +0000 (UTC) Received: by onelab2.iet.unipi.it (Postfix, from userid 275) id 2050C7300A; Wed, 22 May 2013 18:42:44 +0200 (CEST) Date: Wed, 22 May 2013 18:42:44 +0200 From: Luigi Rizzo To: net@freebsd.org Subject: surprise surprise (VM related) [luigi@FreeBSD.org: svn commit: r250911 - head/sys/kern] Message-ID: <20130522164244.GB95808@onelab2.iet.unipi.it> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-06-14) X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 May 2013 16:40:10 -0000 all that work on paravirtualization (as presented at bsdcan) http://info.iet.unipi.it/~luigi/netmap/talk-bsdcan-2013.html just to discover that simply enabling DEVICE_POLLING (10-years old technology) gives the same performance gains plus livelock-avoidance. And no, linux's NAPI is nowhere near us. cheers luigi ----- Forwarded message from Luigi Rizzo ----- Date: Wed, 22 May 2013 16:32:18 +0000 (UTC) From: Luigi Rizzo Subject: svn commit: r250911 - head/sys/kern To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Author: luigi Date: Wed May 22 16:32:18 2013 New Revision: 250911 URL: http://svnweb.freebsd.org/changeset/base/250911 Log: Increase the (arbitrary) limit for the number of packets per tick from 1k to 20k The previous value was good 10 years ago, but not anymore now. More importantly, lots of good surprises: polling is incredibly effective under virtualization, and not only prevents livelock but also saves most of the VM exit overhead in receive mode. Using polling, a FreeBSD instance under qemu-kvm remains perfectly responsive even when bombed with 10 Mpps over an emulated e1000, and happily processes 1.7 Mpps through ipfw. Note that some incompatibilities still remain: e.g. polling is not (yet) compatible with netmap, and seems to freeze the guest when kern.polling.idle_poll=1 MFC after: 3 days Modified: head/sys/kern/kern_poll.c Modified: head/sys/kern/kern_poll.c ============================================================================== --- head/sys/kern/kern_poll.c Wed May 22 15:15:05 2013 (r250910) +++ head/sys/kern/kern_poll.c Wed May 22 16:32:18 2013 (r250911) @@ -87,12 +87,11 @@ static struct mtx poll_mtx; * The following constraints hold * * 1 <= poll_each_burst <= poll_burst <= poll_burst_max - * 0 <= poll_each_burst * MIN_POLL_BURST_MAX <= poll_burst_max <= MAX_POLL_BURST_MAX */ #define MIN_POLL_BURST_MAX 10 -#define MAX_POLL_BURST_MAX 1000 +#define MAX_POLL_BURST_MAX 20000 static uint32_t poll_burst = 5; static uint32_t poll_burst_max = 150; /* good for 100Mbit net and HZ=1000 */ ----- End forwarded message -----