mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
netns-ipv4: reorganize netns_ipv4 fast path variables
Reorganize fast path variables on tx-txrx-rx order. Fastpath cacheline ends after sysctl_tcp_rmem. There are only read-only variables here. (write is on the control path and not considered in this case) Below data generated with pahole on x86 architecture. Fast path variables span cache lines before change: 4 Fast path variables span cache lines after change: 2 Suggested-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Wei Wang <weiwan@google.com> Reviewed-by: David Ahern <dsahern@kernel.org> 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>
This commit is contained in:
parent
aeb9ce058d
commit
18fd64d254
@ -42,6 +42,38 @@ struct inet_timewait_death_row {
|
|||||||
struct tcp_fastopen_context;
|
struct tcp_fastopen_context;
|
||||||
|
|
||||||
struct netns_ipv4 {
|
struct netns_ipv4 {
|
||||||
|
/* Cacheline organization can be found documented in
|
||||||
|
* Documentation/networking/net_cachelines/netns_ipv4_sysctl.rst.
|
||||||
|
* Please update the document when adding new fields.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TX readonly hotpath cache lines */
|
||||||
|
__cacheline_group_begin(netns_ipv4_read_tx);
|
||||||
|
u8 sysctl_tcp_early_retrans;
|
||||||
|
u8 sysctl_tcp_tso_win_divisor;
|
||||||
|
u8 sysctl_tcp_tso_rtt_log;
|
||||||
|
u8 sysctl_tcp_autocorking;
|
||||||
|
int sysctl_tcp_min_snd_mss;
|
||||||
|
unsigned int sysctl_tcp_notsent_lowat;
|
||||||
|
int sysctl_tcp_limit_output_bytes;
|
||||||
|
int sysctl_tcp_min_rtt_wlen;
|
||||||
|
int sysctl_tcp_wmem[3];
|
||||||
|
u8 sysctl_ip_fwd_use_pmtu;
|
||||||
|
__cacheline_group_end(netns_ipv4_read_tx);
|
||||||
|
|
||||||
|
/* TXRX readonly hotpath cache lines */
|
||||||
|
__cacheline_group_begin(netns_ipv4_read_txrx);
|
||||||
|
u8 sysctl_tcp_moderate_rcvbuf;
|
||||||
|
__cacheline_group_end(netns_ipv4_read_txrx);
|
||||||
|
|
||||||
|
/* RX readonly hotpath cache line */
|
||||||
|
__cacheline_group_begin(netns_ipv4_read_rx);
|
||||||
|
u8 sysctl_ip_early_demux;
|
||||||
|
u8 sysctl_tcp_early_demux;
|
||||||
|
int sysctl_tcp_reordering;
|
||||||
|
int sysctl_tcp_rmem[3];
|
||||||
|
__cacheline_group_end(netns_ipv4_read_rx);
|
||||||
|
|
||||||
struct inet_timewait_death_row tcp_death_row;
|
struct inet_timewait_death_row tcp_death_row;
|
||||||
struct udp_table *udp_table;
|
struct udp_table *udp_table;
|
||||||
|
|
||||||
@ -96,17 +128,14 @@ struct netns_ipv4 {
|
|||||||
|
|
||||||
u8 sysctl_ip_default_ttl;
|
u8 sysctl_ip_default_ttl;
|
||||||
u8 sysctl_ip_no_pmtu_disc;
|
u8 sysctl_ip_no_pmtu_disc;
|
||||||
u8 sysctl_ip_fwd_use_pmtu;
|
|
||||||
u8 sysctl_ip_fwd_update_priority;
|
u8 sysctl_ip_fwd_update_priority;
|
||||||
u8 sysctl_ip_nonlocal_bind;
|
u8 sysctl_ip_nonlocal_bind;
|
||||||
u8 sysctl_ip_autobind_reuse;
|
u8 sysctl_ip_autobind_reuse;
|
||||||
/* Shall we try to damage output packets if routing dev changes? */
|
/* Shall we try to damage output packets if routing dev changes? */
|
||||||
u8 sysctl_ip_dynaddr;
|
u8 sysctl_ip_dynaddr;
|
||||||
u8 sysctl_ip_early_demux;
|
|
||||||
#ifdef CONFIG_NET_L3_MASTER_DEV
|
#ifdef CONFIG_NET_L3_MASTER_DEV
|
||||||
u8 sysctl_raw_l3mdev_accept;
|
u8 sysctl_raw_l3mdev_accept;
|
||||||
#endif
|
#endif
|
||||||
u8 sysctl_tcp_early_demux;
|
|
||||||
u8 sysctl_udp_early_demux;
|
u8 sysctl_udp_early_demux;
|
||||||
|
|
||||||
u8 sysctl_nexthop_compat_mode;
|
u8 sysctl_nexthop_compat_mode;
|
||||||
@ -119,7 +148,6 @@ struct netns_ipv4 {
|
|||||||
u8 sysctl_tcp_mtu_probing;
|
u8 sysctl_tcp_mtu_probing;
|
||||||
int sysctl_tcp_mtu_probe_floor;
|
int sysctl_tcp_mtu_probe_floor;
|
||||||
int sysctl_tcp_base_mss;
|
int sysctl_tcp_base_mss;
|
||||||
int sysctl_tcp_min_snd_mss;
|
|
||||||
int sysctl_tcp_probe_threshold;
|
int sysctl_tcp_probe_threshold;
|
||||||
u32 sysctl_tcp_probe_interval;
|
u32 sysctl_tcp_probe_interval;
|
||||||
|
|
||||||
@ -135,17 +163,14 @@ struct netns_ipv4 {
|
|||||||
u8 sysctl_tcp_backlog_ack_defer;
|
u8 sysctl_tcp_backlog_ack_defer;
|
||||||
u8 sysctl_tcp_pingpong_thresh;
|
u8 sysctl_tcp_pingpong_thresh;
|
||||||
|
|
||||||
int sysctl_tcp_reordering;
|
|
||||||
u8 sysctl_tcp_retries1;
|
u8 sysctl_tcp_retries1;
|
||||||
u8 sysctl_tcp_retries2;
|
u8 sysctl_tcp_retries2;
|
||||||
u8 sysctl_tcp_orphan_retries;
|
u8 sysctl_tcp_orphan_retries;
|
||||||
u8 sysctl_tcp_tw_reuse;
|
u8 sysctl_tcp_tw_reuse;
|
||||||
int sysctl_tcp_fin_timeout;
|
int sysctl_tcp_fin_timeout;
|
||||||
unsigned int sysctl_tcp_notsent_lowat;
|
|
||||||
u8 sysctl_tcp_sack;
|
u8 sysctl_tcp_sack;
|
||||||
u8 sysctl_tcp_window_scaling;
|
u8 sysctl_tcp_window_scaling;
|
||||||
u8 sysctl_tcp_timestamps;
|
u8 sysctl_tcp_timestamps;
|
||||||
u8 sysctl_tcp_early_retrans;
|
|
||||||
u8 sysctl_tcp_recovery;
|
u8 sysctl_tcp_recovery;
|
||||||
u8 sysctl_tcp_thin_linear_timeouts;
|
u8 sysctl_tcp_thin_linear_timeouts;
|
||||||
u8 sysctl_tcp_slow_start_after_idle;
|
u8 sysctl_tcp_slow_start_after_idle;
|
||||||
@ -161,21 +186,13 @@ struct netns_ipv4 {
|
|||||||
u8 sysctl_tcp_frto;
|
u8 sysctl_tcp_frto;
|
||||||
u8 sysctl_tcp_nometrics_save;
|
u8 sysctl_tcp_nometrics_save;
|
||||||
u8 sysctl_tcp_no_ssthresh_metrics_save;
|
u8 sysctl_tcp_no_ssthresh_metrics_save;
|
||||||
u8 sysctl_tcp_moderate_rcvbuf;
|
|
||||||
u8 sysctl_tcp_tso_win_divisor;
|
|
||||||
u8 sysctl_tcp_workaround_signed_windows;
|
u8 sysctl_tcp_workaround_signed_windows;
|
||||||
int sysctl_tcp_limit_output_bytes;
|
|
||||||
int sysctl_tcp_challenge_ack_limit;
|
int sysctl_tcp_challenge_ack_limit;
|
||||||
int sysctl_tcp_min_rtt_wlen;
|
|
||||||
u8 sysctl_tcp_min_tso_segs;
|
u8 sysctl_tcp_min_tso_segs;
|
||||||
u8 sysctl_tcp_tso_rtt_log;
|
|
||||||
u8 sysctl_tcp_autocorking;
|
|
||||||
u8 sysctl_tcp_reflect_tos;
|
u8 sysctl_tcp_reflect_tos;
|
||||||
int sysctl_tcp_invalid_ratelimit;
|
int sysctl_tcp_invalid_ratelimit;
|
||||||
int sysctl_tcp_pacing_ss_ratio;
|
int sysctl_tcp_pacing_ss_ratio;
|
||||||
int sysctl_tcp_pacing_ca_ratio;
|
int sysctl_tcp_pacing_ca_ratio;
|
||||||
int sysctl_tcp_wmem[3];
|
|
||||||
int sysctl_tcp_rmem[3];
|
|
||||||
unsigned int sysctl_tcp_child_ehash_entries;
|
unsigned int sysctl_tcp_child_ehash_entries;
|
||||||
unsigned long sysctl_tcp_comp_sack_delay_ns;
|
unsigned long sysctl_tcp_comp_sack_delay_ns;
|
||||||
unsigned long sysctl_tcp_comp_sack_slack_ns;
|
unsigned long sysctl_tcp_comp_sack_slack_ns;
|
||||||
|
@ -1099,11 +1099,56 @@ out:
|
|||||||
rtnl_set_sk_err(net, RTNLGRP_NSID, err);
|
rtnl_set_sk_err(net, RTNLGRP_NSID, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_NS
|
||||||
|
static void __init netns_ipv4_struct_check(void)
|
||||||
|
{
|
||||||
|
/* TX readonly hotpath cache lines */
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_tcp_early_retrans);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_tcp_tso_win_divisor);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_tcp_tso_rtt_log);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_tcp_autocorking);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_tcp_min_snd_mss);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_tcp_notsent_lowat);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_tcp_limit_output_bytes);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_tcp_min_rtt_wlen);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_tcp_wmem);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_tx,
|
||||||
|
sysctl_ip_fwd_use_pmtu);
|
||||||
|
CACHELINE_ASSERT_GROUP_SIZE(struct netns_ipv4, netns_ipv4_read_tx, 33);
|
||||||
|
|
||||||
|
/* TXRX readonly hotpath cache lines */
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_txrx,
|
||||||
|
sysctl_tcp_moderate_rcvbuf);
|
||||||
|
CACHELINE_ASSERT_GROUP_SIZE(struct netns_ipv4, netns_ipv4_read_txrx, 1);
|
||||||
|
|
||||||
|
/* RX readonly hotpath cache line */
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_rx,
|
||||||
|
sysctl_ip_early_demux);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_rx,
|
||||||
|
sysctl_tcp_early_demux);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_rx,
|
||||||
|
sysctl_tcp_reordering);
|
||||||
|
CACHELINE_ASSERT_GROUP_MEMBER(struct netns_ipv4, netns_ipv4_read_rx,
|
||||||
|
sysctl_tcp_rmem);
|
||||||
|
CACHELINE_ASSERT_GROUP_SIZE(struct netns_ipv4, netns_ipv4_read_rx, 18);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void __init net_ns_init(void)
|
void __init net_ns_init(void)
|
||||||
{
|
{
|
||||||
struct net_generic *ng;
|
struct net_generic *ng;
|
||||||
|
|
||||||
#ifdef CONFIG_NET_NS
|
#ifdef CONFIG_NET_NS
|
||||||
|
netns_ipv4_struct_check();
|
||||||
net_cachep = kmem_cache_create("net_namespace", sizeof(struct net),
|
net_cachep = kmem_cache_create("net_namespace", sizeof(struct net),
|
||||||
SMP_CACHE_BYTES,
|
SMP_CACHE_BYTES,
|
||||||
SLAB_PANIC|SLAB_ACCOUNT, NULL);
|
SLAB_PANIC|SLAB_ACCOUNT, NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user