udp: no longer use SLAB_DESTROY_BY_RCU
Tom Herbert would like not touching UDP socket refcnt for encapsulated traffic. For this to happen, we need to use normal RCU rules, with a grace period before freeing a socket. UDP sockets are not short lived in the high usage case, so the added cost of call_rcu() should not be a concern. This actually removes a lot of complexity in UDP stack. Multicast receives no longer need to hold a bucket spinlock. Note that ip early demux still needs to take a reference on the socket. Same remark for functions used by xt_socket and xt_PROXY netfilter modules, but this might be changed later. Performance for a single UDP socket receiving flood traffic from many RX queues/cpus. Simple udp_rx using simple recvfrom() loop : 438 kpps instead of 374 kpps : 17 % increase of the peak rate. v2: Addressed Willem de Bruijn feedback in multicast handling - keep early demux break in __udp4_lib_demux_lookup() Signed-off-by:Eric Dumazet <edumazet@google.com> Cc: Tom Herbert <tom@herbertland.com> Cc: Willem de Bruijn <willemb@google.com> Tested-by:
Tom Herbert <tom@herbertland.com> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- include/linux/udp.h 4 additions, 4 deletionsinclude/linux/udp.h
- include/net/sock.h 6 additions, 6 deletionsinclude/net/sock.h
- include/net/udp.h 1 addition, 1 deletioninclude/net/udp.h
- net/ipv4/udp.c 87 additions, 206 deletionsnet/ipv4/udp.c
- net/ipv4/udp_diag.c 9 additions, 9 deletionsnet/ipv4/udp_diag.c
- net/ipv6/udp.c 64 additions, 132 deletionsnet/ipv6/udp.c
Loading
Please register or sign in to comment