Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 May 2013 18:42:44 +0200
From:      Luigi Rizzo <rizzo@iet.unipi.it>
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>

next in thread | raw e-mail | index | archive | help
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 <luigi@FreeBSD.org> -----

Date: Wed, 22 May 2013 16:32:18 +0000 (UTC)
From: Luigi Rizzo <luigi@FreeBSD.org>
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 -----



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130522164244.GB95808>