Message ID | 20240305160413.2231423-1-edumazet@google.com (mailing list archive) |
---|---|
Headers | show |
Series | net: group together hot data | expand |
On Tue, Mar 5, 2024 at 11:04 AM Eric Dumazet <edumazet@google.com> wrote: > > While our recent structure reorganizations were focused > on increasing max throughput, there is still an > area where improvements are much needed. > > In many cases, a cpu handles one packet at a time, > instead of a nice batch. > > Hardware interrupt. > -> Software interrupt. > -> Network/Protocol stacks. > > If the cpu was idle or busy in other layers, > it has to pull many cache lines. > > This series adds a new net_hotdata structure, where > some critical (and read-mostly) data used in > rx and tx path is packed in a small number of cache lines. > > Synthetic benchmarks will not see much difference, > but latency of single packet should improve. > > net_hodata current size on 64bit is 416 bytes, > but might grow in the future. > > Also move RPS definitions to a new include file. Acked-by: Soheil Hassas Yeganeh <soheil@google.com> Nice series! > Eric Dumazet (18): > net: introduce struct net_hotdata > net: move netdev_budget and netdev_budget to net_hotdata > net: move netdev_tstamp_prequeue into net_hotdata > net: move ptype_all into net_hotdata > net: move netdev_max_backlog to net_hotdata > net: move ip_packet_offload and ipv6_packet_offload to net_hotdata > net: move tcpv4_offload and tcpv6_offload to net_hotdata > net: move dev_tx_weight to net_hotdata > net: move dev_rx_weight to net_hotdata > net: move skbuff_cache(s) to net_hotdata > udp: move udpv4_offload and udpv6_offload to net_hotdata > ipv6: move tcpv6_protocol and udpv6_protocol to net_hotdata > inet: move tcp_protocol and udp_protocol to net_hotdata > inet: move inet_ehash_secret and udp_ehash_secret into net_hotdata > ipv6: move inet6_ehash_secret and udp6_ehash_secret into net_hotdata > ipv6: move tcp_ipv6_hash_secret and udp_ipv6_hash_secret to > net_hotdata > net: introduce include/net/rps.h > net: move rps_sock_flow_table to net_hotdata > > drivers/net/ethernet/intel/ice/ice_arfs.c | 1 + > .../net/ethernet/mellanox/mlx4/en_netdev.c | 1 + > .../net/ethernet/mellanox/mlx5/core/en_arfs.c | 1 + > drivers/net/ethernet/sfc/rx_common.c | 1 + > drivers/net/ethernet/sfc/siena/rx_common.c | 1 + > drivers/net/tun.c | 1 + > include/linux/netdevice.h | 88 ------------ > include/linux/skbuff.h | 1 - > include/net/gro.h | 5 +- > include/net/hotdata.h | 52 ++++++++ > include/net/protocol.h | 3 + > include/net/rps.h | 125 ++++++++++++++++++ > include/net/sock.h | 35 ----- > kernel/bpf/cpumap.c | 4 +- > net/bpf/test_run.c | 4 +- > net/core/Makefile | 1 + > net/core/dev.c | 58 +++----- > net/core/dev.h | 3 - > net/core/gro.c | 15 +-- > net/core/gro_cells.c | 3 +- > net/core/gso.c | 4 +- > net/core/hotdata.c | 22 +++ > net/core/net-procfs.c | 7 +- > net/core/net-sysfs.c | 1 + > net/core/skbuff.c | 44 +++--- > net/core/sysctl_net_core.c | 25 ++-- > net/core/xdp.c | 5 +- > net/ipv4/af_inet.c | 49 +++---- > net/ipv4/inet_hashtables.c | 3 +- > net/ipv4/tcp.c | 1 + > net/ipv4/tcp_offload.c | 17 ++- > net/ipv4/udp.c | 2 - > net/ipv4/udp_offload.c | 17 ++- > net/ipv6/af_inet6.c | 1 + > net/ipv6/inet6_hashtables.c | 8 +- > net/ipv6/ip6_offload.c | 18 +-- > net/ipv6/tcp_ipv6.c | 17 +-- > net/ipv6/tcpv6_offload.c | 16 +-- > net/ipv6/udp.c | 19 ++- > net/ipv6/udp_offload.c | 21 ++- > net/sched/sch_generic.c | 3 +- > net/sctp/socket.c | 1 + > net/xfrm/espintcp.c | 4 +- > net/xfrm/xfrm_input.c | 3 +- > 44 files changed, 391 insertions(+), 320 deletions(-) > create mode 100644 include/net/hotdata.h > create mode 100644 include/net/rps.h > create mode 100644 net/core/hotdata.c > > -- > 2.44.0.278.ge034bb2e1d-goog >
On 3/5/24 9:03 AM, Eric Dumazet wrote: > While our recent structure reorganizations were focused > on increasing max throughput, there is still an > area where improvements are much needed. > > In many cases, a cpu handles one packet at a time, > instead of a nice batch. > > Hardware interrupt. > -> Software interrupt. > -> Network/Protocol stacks. > > If the cpu was idle or busy in other layers, > it has to pull many cache lines. > > This series adds a new net_hotdata structure, where > some critical (and read-mostly) data used in > rx and tx path is packed in a small number of cache lines. > > Synthetic benchmarks will not see much difference, > but latency of single packet should improve. > > net_hodata current size on 64bit is 416 bytes, > but might grow in the future. > > Also move RPS definitions to a new include file. > Interesting patch set. For the set: Reviewed-by: David Ahern <dsahern@kernel.org>