tcp/dccp: install syn_recv requests into ehash table
authorEric Dumazet <edumazet@google.com>
Fri, 2 Oct 2015 18:43:32 +0000 (11:43 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 3 Oct 2015 11:32:41 +0000 (04:32 -0700)
commit079096f103faca2dd87342cca6f23d4b34da8871
treefa3fb0fdc064f1611c464384e70a7a402179808f
parent2feda34192a379f8b35a7c6c5826b2f23e884f32
tcp/dccp: install syn_recv requests into ehash table

In this patch, we insert request sockets into TCP/DCCP
regular ehash table (where ESTABLISHED and TIMEWAIT sockets
are) instead of using the per listener hash table.

ACK packets find SYN_RECV pseudo sockets without having
to find and lock the listener.

In nominal conditions, this halves pressure on listener lock.

Note that this will allow for SO_REUSEPORT refinements,
so that we can select a listener using cpu/numa affinities instead
of the prior 'consistent hash', since only SYN packets will
apply this selection logic.

We will shrink listen_sock in the following patch to ease
code review.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Ying Cai <ycai@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
15 files changed:
include/net/inet_connection_sock.h
include/net/inet_hashtables.h
include/net/request_sock.h
include/net/tcp.h
net/core/request_sock.c
net/dccp/ipv4.c
net/dccp/ipv6.c
net/ipv4/inet_connection_sock.c
net/ipv4/inet_diag.c
net/ipv4/inet_hashtables.c
net/ipv4/syncookies.c
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c
net/ipv6/inet6_connection_sock.c
net/ipv6/tcp_ipv6.c