Thanks, pushed to master, branch-1.[456].
On Thu, Mar 15, 2012 at 09:24:37PM -0700, Justin Pettit wrote: > Looks good. Thanks again! > > --Justin > > > On Mar 15, 2012, at 9:15 PM, Ben Pfaff wrote: > > > On Thu, Mar 15, 2012 at 08:45:07PM -0700, Justin Pettit wrote: > >> On Mar 15, 2012, at 8:30 PM, Ben Pfaff wrote: > >> > >>> +#ifndef SO_RCVBUFFORCE > >>> +#define SO_RCVBUFFORCE 33 > >>> +#endif > >> > >> It seems like on some platforms, this is defined to be other values. > >> For example, this appears to be the definition on SPARC: > >> > >> #define SO_RCVBUFFORCE 0x100b > > > > Oops. Thanks for the scrutiny. > > > > I looked into more closely into the problem I was seeing with this > > definition and figured out that, in fact, it was a missing definition in > > the pseudo-headers that we feed to "sparse". I've appended a revised > > commit that avoids the #ifndef. > > > >>> @@ -122,6 +126,13 @@ nl_sock_create(int protocol, struct nl_sock **sockp) > >>> sock->protocol = protocol; > >>> sock->dump = NULL; > >>> > >>> + rcvbuf = 1024 * 1024; > >>> + if (setsockopt(sock->fd, SOL_SOCKET, SO_RCVBUFFORCE, > >>> + &rcvbuf, sizeof rcvbuf)) { > >>> + VLOG_WARN_RL(&rl, "setting %d-byte socket receive buffer failed > >>> (%s)", > >>> + rcvbuf, strerror(errno)); > >>> + } > >> > >> It appears that this increase will happen for anything created with > >> nl_sock_create(), of which there are a few things now. Would it make > >> sense to make this an optional argument to nl_sock_create()? (Not > >> necessarily right at this moment, of course.) > > > > Yes, it would make sense to do this. > > > > --8<--------------------------cut here-------------------------->8-- > > > > From: Ben Pfaff <b...@nicira.com> > > Date: Thu, 15 Mar 2012 21:12:31 -0700 > > Subject: [PATCH] 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 <b...@nicira.com> > > --- > > include/sparse/sys/socket.h | 5 +++-- > > lib/netlink-socket.c | 10 +++++++++- > > 2 files changed, 12 insertions(+), 3 deletions(-) > > > > diff --git a/include/sparse/sys/socket.h b/include/sparse/sys/socket.h > > index 89e3c2d..1ed195b 100644 > > --- a/include/sparse/sys/socket.h > > +++ b/include/sparse/sys/socket.h > > @@ -1,5 +1,5 @@ > > /* > > - * Copyright (c) 2011 Nicira Networks. > > + * Copyright (c) 2011, 2012 Nicira Networks. > > * > > * Licensed under the Apache License, Version 2.0 (the "License"); > > * you may not use this file except in compliance with the License. > > @@ -74,7 +74,8 @@ enum { > > SO_SNDBUF, > > SO_SNDLOWAT, > > SO_SNDTIMEO, > > - SO_TYPE > > + SO_TYPE, > > + SO_RCVBUFFORCE > > }; > > > > enum { > > diff --git a/lib/netlink-socket.c b/lib/netlink-socket.c > > index bc46235..df6f1d8 100644 > > --- a/lib/netlink-socket.c > > +++ b/lib/netlink-socket.c > > @@ -1,5 +1,5 @@ > > /* > > - * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. > > + * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks. > > * > > * Licensed under the Apache License, Version 2.0 (the "License"); > > * you may not use this file except in compliance with the License. > > @@ -89,6 +89,7 @@ nl_sock_create(int protocol, struct nl_sock **sockp) > > struct nl_sock *sock; > > struct sockaddr_nl local, remote; > > socklen_t local_size; > > + int rcvbuf; > > int retval = 0; > > > > if (!max_iovs) { > > @@ -122,6 +123,13 @@ nl_sock_create(int protocol, struct nl_sock **sockp) > > sock->protocol = protocol; > > sock->dump = NULL; > > > > + rcvbuf = 1024 * 1024; > > + if (setsockopt(sock->fd, SOL_SOCKET, SO_RCVBUFFORCE, > > + &rcvbuf, sizeof rcvbuf)) { > > + VLOG_WARN_RL(&rl, "setting %d-byte socket receive buffer failed > > (%s)", > > + rcvbuf, strerror(errno)); > > + } > > + > > retval = get_socket_rcvbuf(sock->fd); > > if (retval < 0) { > > retval = -retval; > > -- > > 1.7.2.5 > > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev