netlink-socket: Increase Netlink socket receive buffer size.
authorBen Pfaff <blp@nicira.com>
Fri, 16 Mar 2012 04:15:38 +0000 (21:15 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 16 Mar 2012 04:45:59 +0000 (21:45 -0700)
commit759351411d307772bd0ec5e0f6e1d634df6a8b3f
tree29771cf53ba8d1dc1295d56f667e038ebecd4ca3
parenta54c565cb74eb8ce50fc38acf2d0060d82058049
netlink-socket: Increase Netlink socket receive buffer size.

Open vSwitch userspace can set up flows at a high rate, but it is somewhat
"bursty" in opportunities to set up flows, by which I mean that OVS sets up
a batch of flows, then goes off and does some other work for a while, then
sets up another batch of flows, and so on.  The result is that, if a large
number of packets that need flow setups come in all at once, then some of
them can overflow the relatively small kernel-to-user buffers.

This commit increases the kernel-to-user buffers from the default of
approximately 120 kB each to 1 MB each.  In one somewhat synthetic test
case that I ran based on an "hping3" that generated a load of about 20,000
new flows per second (including both requests and replies), this reduced
the packets dropped at the kernel-to-user interface from about 30% to none.
I expect that it will similarly improve packet loss in workloads where
flow arrival is not easily predictable.

(This has little effect on workloads generated by "ovs-benchmark rate"
because that benchmark is effectively "self-clocking", that is, a new flow
is triggered only by a reply to a request made earlier, which means that
the number of buffered packets at any given has a known, constant upper
limit.)

Bug #10210.
Signed-off-by: Ben Pfaff <blp@nicira.com>
include/sparse/sys/socket.h
lib/netlink-socket.c