First round of patches for linux-4.7
Add a generic facility for sockets to be freed after an RCU grace
period, if they need to.
Then UDP stack is changed to no longer use SLAB_DESTROY_BY_RCU,
in order to speedup rx processing for traffic encapsulated in UDP.
It gives a 17 % speedup for normal UDP reception in stress conditions.
Then TCP listeners are changed to use SOCK_RCU_FREE as well
to avoid touching sk_refcnt in synflood case :
I got up to 30 % performance increase for a mono listener.
Then three patches add SK_MEMINFO_DROPS to sock_diag
and add per socket rx drops accounting to TCP.
Last patch adds rate limiting on ACK sent on behalf of SYN_RECV
to better resist to SYNFLOOD targeting one or few flows.
Eric Dumazet (11):
net: add SOCK_RCU_FREE socket flag
udp: no longer use SLAB_DESTROY_BY_RCU
tcp/dccp: remove BH disable/enable in lookup
tcp/dccp: use rcu locking in inet_diag_find_one_icsk()
inet: reqsk_alloc() needs to take care of dead listeners
tcp/dccp: do not touch listener sk_refcnt under synflood
sock_diag: add SK_MEMINFO_DROPS
tcp: increment sk_drops for dropped rx packets
tcp: increment sk_drops for listeners
ipv4: tcp: set SOCK_USE_WRITE_QUEUE for ip_send_unicast_reply()
tcp: rate limit ACK sent by SYN_RECV request sockets
include/linux/udp.h| 8 +-
include/net/inet6_hashtables.h | 12 +-
include/net/inet_hashtables.h | 47 +++
include/net/request_sock.h | 31 +++--
include/net/sock.h | 21 ++-
include/net/tcp.h | 13 ++
include/net/udp.h | 2 +-
include/uapi/linux/sock_diag.h | 1 +
net/core/sock.c| 15 ++-
net/core/sock_diag.c | 1 +
net/dccp/ipv4.c| 7 +-
net/dccp/ipv6.c| 7 +-
net/ipv4/inet_diag.c | 10 +-
net/ipv4/inet_hashtables.c | 77 ---
net/ipv4/tcp_input.c | 41 +++---
net/ipv4/tcp_ipv4.c| 74 ++-
net/ipv4/tcp_minisocks.c | 5 +-
net/ipv4/udp.c | 293 -
net/ipv4/udp_diag.c| 18 +--
net/ipv6/inet6_hashtables.c| 62 +++--
net/ipv6/tcp_ipv6.c| 32 +++--
net/ipv6/udp.c | 196 +--
net/netfilter/xt_socket.c | 6 +-
23 files changed, 401 insertions(+), 578 deletions(-)
--
2.8.0.rc3.226.g39d4020