[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240305160413.2231423-1-edumazet@google.com>
Date: Tue, 5 Mar 2024 16:03:55 +0000
From: Eric Dumazet <edumazet@...gle.com>
To: "David S . Miller" <davem@...emloft.net>, Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>
Cc: netdev@...r.kernel.org, David Ahern <dsahern@...nel.org>,
Willem de Bruijn <willemb@...gle.com>, Soheil Hassas Yeganeh <soheil@...gle.com>,
Neal Cardwell <ncardwell@...gle.com>, eric.dumazet@...il.com,
Eric Dumazet <edumazet@...gle.com>
Subject: [PATCH net-next 00/18] net: group together hot data
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.
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
Powered by blists - more mailing lists