-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'net-group-together-hot-data'
Eric Dumazet says: ==================== 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. ==================== Link: https://lore.kernel.org/r/20240306160031.874438-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
- Loading branch information
Showing
44 changed files
with
391 additions
and
320 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-or-later */ | ||
#ifndef _NET_HOTDATA_H | ||
#define _NET_HOTDATA_H | ||
|
||
#include <linux/types.h> | ||
#include <linux/netdevice.h> | ||
#include <net/protocol.h> | ||
|
||
/* Read mostly data used in network fast paths. */ | ||
struct net_hotdata { | ||
#if IS_ENABLED(CONFIG_INET) | ||
struct packet_offload ip_packet_offload; | ||
struct net_offload tcpv4_offload; | ||
struct net_protocol tcp_protocol; | ||
struct net_offload udpv4_offload; | ||
struct net_protocol udp_protocol; | ||
struct packet_offload ipv6_packet_offload; | ||
struct net_offload tcpv6_offload; | ||
#if IS_ENABLED(CONFIG_IPV6) | ||
struct inet6_protocol tcpv6_protocol; | ||
struct inet6_protocol udpv6_protocol; | ||
#endif | ||
struct net_offload udpv6_offload; | ||
#endif | ||
struct list_head offload_base; | ||
struct list_head ptype_all; | ||
struct kmem_cache *skbuff_cache; | ||
struct kmem_cache *skbuff_fclone_cache; | ||
struct kmem_cache *skb_small_head_cache; | ||
#ifdef CONFIG_RPS | ||
struct rps_sock_flow_table __rcu *rps_sock_flow_table; | ||
u32 rps_cpu_mask; | ||
#endif | ||
int gro_normal_batch; | ||
int netdev_budget; | ||
int netdev_budget_usecs; | ||
int tstamp_prequeue; | ||
int max_backlog; | ||
int dev_tx_weight; | ||
int dev_rx_weight; | ||
}; | ||
|
||
#define inet_ehash_secret net_hotdata.tcp_protocol.secret | ||
#define udp_ehash_secret net_hotdata.udp_protocol.secret | ||
#define inet6_ehash_secret net_hotdata.tcpv6_protocol.secret | ||
#define tcp_ipv6_hash_secret net_hotdata.tcpv6_offload.secret | ||
#define udp6_ehash_secret net_hotdata.udpv6_protocol.secret | ||
#define udp_ipv6_hash_secret net_hotdata.udpv6_offload.secret | ||
|
||
extern struct net_hotdata net_hotdata; | ||
|
||
#endif /* _NET_HOTDATA_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.