linux-stable/Documentation/networking/net_cachelines/snmp.rst

136 lines
12 KiB
ReStructuredText
Raw Normal View History

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>
2023-11-29 07:27:52 +00:00
.. SPDX-License-Identifier: GPL-2.0
.. Copyright (C) 2023 Google LLC
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>
2023-11-29 07:27:52 +00:00
===========================================
netns_ipv4 enum fast path usage breakdown
===========================================
Type Name fastpath_tx_access fastpath_rx_access comment
..enum
unsigned_long LINUX_MIB_TCPKEEPALIVE write_mostly - tcp_keepalive_timer
unsigned_long LINUX_MIB_DELAYEDACKS write_mostly - tcp_delack_timer_handler,tcp_delack_timer
unsigned_long LINUX_MIB_DELAYEDACKLOCKED write_mostly - tcp_delack_timer_handler,tcp_delack_timer
unsigned_long LINUX_MIB_TCPAUTOCORKING write_mostly - tcp_push,tcp_sendmsg_locked
unsigned_long LINUX_MIB_TCPFROMZEROWINDOWADV write_mostly - tcp_select_window,tcp_transmit-skb
unsigned_long LINUX_MIB_TCPTOZEROWINDOWADV write_mostly - tcp_select_window,tcp_transmit-skb
unsigned_long LINUX_MIB_TCPWANTZEROWINDOWADV write_mostly - tcp_select_window,tcp_transmit-skb
unsigned_long LINUX_MIB_TCPORIGDATASENT write_mostly - tcp_write_xmit
unsigned_long LINUX_MIB_TCPHPHITS - write_mostly tcp_rcv_established,tcp_v4_do_rcv,tcp_v6_do_rcv
unsigned_long LINUX_MIB_TCPRCVCOALESCE - write_mostly tcp_try_coalesce,tcp_queue_rcv,tcp_rcv_established
unsigned_long LINUX_MIB_TCPPUREACKS - write_mostly tcp_ack,tcp_rcv_established
unsigned_long LINUX_MIB_TCPHPACKS - write_mostly tcp_ack,tcp_rcv_established
unsigned_long LINUX_MIB_TCPDELIVERED - write_mostly tcp_newly_delivered,tcp_ack,tcp_rcv_established
unsigned_long LINUX_MIB_SYNCOOKIESSENT
unsigned_long LINUX_MIB_SYNCOOKIESRECV
unsigned_long LINUX_MIB_SYNCOOKIESFAILED
unsigned_long LINUX_MIB_EMBRYONICRSTS
unsigned_long LINUX_MIB_PRUNECALLED
unsigned_long LINUX_MIB_RCVPRUNED
unsigned_long LINUX_MIB_OFOPRUNED
unsigned_long LINUX_MIB_OUTOFWINDOWICMPS
unsigned_long LINUX_MIB_LOCKDROPPEDICMPS
unsigned_long LINUX_MIB_ARPFILTER
unsigned_long LINUX_MIB_TIMEWAITED
unsigned_long LINUX_MIB_TIMEWAITRECYCLED
unsigned_long LINUX_MIB_TIMEWAITKILLED
unsigned_long LINUX_MIB_PAWSACTIVEREJECTED
unsigned_long LINUX_MIB_PAWSESTABREJECTED
unsigned_long LINUX_MIB_DELAYEDACKLOST
unsigned_long LINUX_MIB_LISTENOVERFLOWS
unsigned_long LINUX_MIB_LISTENDROPS
unsigned_long LINUX_MIB_TCPRENORECOVERY
unsigned_long LINUX_MIB_TCPSACKRECOVERY
unsigned_long LINUX_MIB_TCPSACKRENEGING
unsigned_long LINUX_MIB_TCPSACKREORDER
unsigned_long LINUX_MIB_TCPRENOREORDER
unsigned_long LINUX_MIB_TCPTSREORDER
unsigned_long LINUX_MIB_TCPFULLUNDO
unsigned_long LINUX_MIB_TCPPARTIALUNDO
unsigned_long LINUX_MIB_TCPDSACKUNDO
unsigned_long LINUX_MIB_TCPLOSSUNDO
unsigned_long LINUX_MIB_TCPLOSTRETRANSMIT
unsigned_long LINUX_MIB_TCPRENOFAILURES
unsigned_long LINUX_MIB_TCPSACKFAILURES
unsigned_long LINUX_MIB_TCPLOSSFAILURES
unsigned_long LINUX_MIB_TCPFASTRETRANS
unsigned_long LINUX_MIB_TCPSLOWSTARTRETRANS
unsigned_long LINUX_MIB_TCPTIMEOUTS
unsigned_long LINUX_MIB_TCPLOSSPROBES
unsigned_long LINUX_MIB_TCPLOSSPROBERECOVERY
unsigned_long LINUX_MIB_TCPRENORECOVERYFAIL
unsigned_long LINUX_MIB_TCPSACKRECOVERYFAIL
unsigned_long LINUX_MIB_TCPRCVCOLLAPSED
unsigned_long LINUX_MIB_TCPDSACKOLDSENT
unsigned_long LINUX_MIB_TCPDSACKOFOSENT
unsigned_long LINUX_MIB_TCPDSACKRECV
unsigned_long LINUX_MIB_TCPDSACKOFORECV
unsigned_long LINUX_MIB_TCPABORTONDATA
unsigned_long LINUX_MIB_TCPABORTONCLOSE
unsigned_long LINUX_MIB_TCPABORTONMEMORY
unsigned_long LINUX_MIB_TCPABORTONTIMEOUT
unsigned_long LINUX_MIB_TCPABORTONLINGER
unsigned_long LINUX_MIB_TCPABORTFAILED
unsigned_long LINUX_MIB_TCPMEMORYPRESSURES
unsigned_long LINUX_MIB_TCPMEMORYPRESSURESCHRONO
unsigned_long LINUX_MIB_TCPSACKDISCARD
unsigned_long LINUX_MIB_TCPDSACKIGNOREDOLD
unsigned_long LINUX_MIB_TCPDSACKIGNOREDNOUNDO
unsigned_long LINUX_MIB_TCPSPURIOUSRTOS
unsigned_long LINUX_MIB_TCPMD5NOTFOUND
unsigned_long LINUX_MIB_TCPMD5UNEXPECTED
unsigned_long LINUX_MIB_TCPMD5FAILURE
unsigned_long LINUX_MIB_SACKSHIFTED
unsigned_long LINUX_MIB_SACKMERGED
unsigned_long LINUX_MIB_SACKSHIFTFALLBACK
unsigned_long LINUX_MIB_TCPBACKLOGDROP
unsigned_long LINUX_MIB_PFMEMALLOCDROP
unsigned_long LINUX_MIB_TCPMINTTLDROP
unsigned_long LINUX_MIB_TCPDEFERACCEPTDROP
unsigned_long LINUX_MIB_IPRPFILTER
unsigned_long LINUX_MIB_TCPTIMEWAITOVERFLOW
unsigned_long LINUX_MIB_TCPREQQFULLDOCOOKIES
unsigned_long LINUX_MIB_TCPREQQFULLDROP
unsigned_long LINUX_MIB_TCPRETRANSFAIL
unsigned_long LINUX_MIB_TCPBACKLOGCOALESCE
unsigned_long LINUX_MIB_TCPOFOQUEUE
unsigned_long LINUX_MIB_TCPOFODROP
unsigned_long LINUX_MIB_TCPOFOMERGE
unsigned_long LINUX_MIB_TCPCHALLENGEACK
unsigned_long LINUX_MIB_TCPSYNCHALLENGE
unsigned_long LINUX_MIB_TCPFASTOPENACTIVE
unsigned_long LINUX_MIB_TCPFASTOPENACTIVEFAIL
unsigned_long LINUX_MIB_TCPFASTOPENPASSIVE
unsigned_long LINUX_MIB_TCPFASTOPENPASSIVEFAIL
unsigned_long LINUX_MIB_TCPFASTOPENLISTENOVERFLOW
unsigned_long LINUX_MIB_TCPFASTOPENCOOKIEREQD
unsigned_long LINUX_MIB_TCPFASTOPENBLACKHOLE
unsigned_long LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES
unsigned_long LINUX_MIB_BUSYPOLLRXPACKETS
unsigned_long LINUX_MIB_TCPSYNRETRANS
unsigned_long LINUX_MIB_TCPHYSTARTTRAINDETECT
unsigned_long LINUX_MIB_TCPHYSTARTTRAINCWND
unsigned_long LINUX_MIB_TCPHYSTARTDELAYDETECT
unsigned_long LINUX_MIB_TCPHYSTARTDELAYCWND
unsigned_long LINUX_MIB_TCPACKSKIPPEDSYNRECV
unsigned_long LINUX_MIB_TCPACKSKIPPEDPAWS
unsigned_long LINUX_MIB_TCPACKSKIPPEDSEQ
unsigned_long LINUX_MIB_TCPACKSKIPPEDFINWAIT2
unsigned_long LINUX_MIB_TCPACKSKIPPEDTIMEWAIT
unsigned_long LINUX_MIB_TCPACKSKIPPEDCHALLENGE
unsigned_long LINUX_MIB_TCPWINPROBE
unsigned_long LINUX_MIB_TCPMTUPFAIL
unsigned_long LINUX_MIB_TCPMTUPSUCCESS
unsigned_long LINUX_MIB_TCPDELIVEREDCE
unsigned_long LINUX_MIB_TCPACKCOMPRESSED
unsigned_long LINUX_MIB_TCPZEROWINDOWDROP
unsigned_long LINUX_MIB_TCPRCVQDROP
unsigned_long LINUX_MIB_TCPWQUEUETOOBIG
unsigned_long LINUX_MIB_TCPFASTOPENPASSIVEALTKEY
unsigned_long LINUX_MIB_TCPTIMEOUTREHASH
unsigned_long LINUX_MIB_TCPDUPLICATEDATAREHASH
unsigned_long LINUX_MIB_TCPDSACKRECVSEGS
unsigned_long LINUX_MIB_TCPDSACKIGNOREDDUBIOUS
unsigned_long LINUX_MIB_TCPMIGRATEREQSUCCESS
unsigned_long LINUX_MIB_TCPMIGRATEREQFAILURE
unsigned_long __LINUX_MIB_MAX