Documentations: Analyze heavily used Networking related structs
authorCoco Li <lixiaoyan@google.com>
Wed, 29 Nov 2023 07:27:52 +0000 (07:27 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 2 Dec 2023 22:24:36 +0000 (22:24 +0000)
commit14006f1d8fa24a2320781ad503ca1cba92e940d2
tree9ea58cc8169735713cd5b9b16334e2fdfccc97bf
parent7453d7a633d020d2481cfedbcfcab6dab89ee194
Documentations: Analyze heavily used Networking related structs

Analyzed a few structs in the networking stack by looking at variables
within them that are used in the TCP/IP fast path.

Fast path is defined as TCP path where data is transferred from sender to
receiver unidirectionally. It doesn't include phases other than
TCP_ESTABLISHED, nor does it look at error paths.

We hope to re-organizing variables that span many cachelines whose fast
path variables are also spread out, and this document can help future
developers keep networking fast path cachelines small.

Optimized_cacheline field is computed as
(Fastpath_Bytes/L3_cacheline_size_x86), and not the actual organized
results (see patches to come for these).

Investigation is done on 6.5

Name                 Struct_Cachelines  Cur_fastpath_cache Fastpath_Bytes Optimized_cacheline
tcp_sock         42 (2664 Bytes)    12    396 8
net_device         39 (2240 bytes)    12 234 4
inet_sock         15 (960 bytes)    14 922 14
Inet_connection_sock 22 (1368 bytes)    18 1166 18
Netns_ipv4 (sysctls) 12 (768 bytes)     4 77 2
linux_mib         16 (1060)    6 104 2

Note how there isn't much improvement space for inet_sock and
Inet_connection_sock because sk and icsk_inet respectively takes up so
much of the struct that rest of the variables become a small portion of
the struct size.

So, we decided to reorganize tcp_sock, net_device, netns_ipv4

Suggested-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Coco Li <lixiaoyan@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Shakeel Butt <shakeelb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/networking/index.rst
Documentation/networking/net_cachelines/index.rst [new file with mode: 0644]
Documentation/networking/net_cachelines/inet_connection_sock.rst [new file with mode: 0644]
Documentation/networking/net_cachelines/inet_sock.rst [new file with mode: 0644]
Documentation/networking/net_cachelines/net_device.rst [new file with mode: 0644]
Documentation/networking/net_cachelines/netns_ipv4_sysctl.rst [new file with mode: 0644]
Documentation/networking/net_cachelines/snmp.rst [new file with mode: 0644]
Documentation/networking/net_cachelines/tcp_sock.rst [new file with mode: 0644]
MAINTAINERS