tcp/dccp: install syn_recv requests into ehash table
authorEric Dumazet <[email protected]>
Fri, 2 Oct 2015 18:43:32 +0000 (11:43 -0700)
committerDavid S. Miller <[email protected]>
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 <[email protected]>
Cc: Ying Cai <[email protected]>
Cc: Willem de Bruijn <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
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