diff options
author | luigi <luigi@FreeBSD.org> | 2013-05-22 16:32:18 +0000 |
---|---|---|
committer | luigi <luigi@FreeBSD.org> | 2013-05-22 16:32:18 +0000 |
commit | 2205d3e0a39004e4a92c1454a275d47128aa45ab (patch) | |
tree | 72d8722463c8a7c5fa40bdf416fcb532bd3b797f /sys/kern/kern_poll.c | |
parent | 2df95f4b3ace7ecf0dd47dfd74ea492ca06e4b7e (diff) | |
download | FreeBSD-src-2205d3e0a39004e4a92c1454a275d47128aa45ab.zip FreeBSD-src-2205d3e0a39004e4a92c1454a275d47128aa45ab.tar.gz |
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
Diffstat (limited to 'sys/kern/kern_poll.c')
-rw-r--r-- | sys/kern/kern_poll.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/kern/kern_poll.c b/sys/kern/kern_poll.c index 0010452..a79161e 100644 --- a/sys/kern/kern_poll.c +++ b/sys/kern/kern_poll.c @@ -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 */ |