Commit 8cf4d6a224a0226987d9cba69cb46d93814fe449
Committed by
Pablo Neira Ayuso
1 parent
6853605360
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
net: reorder struct netns_ct for better cache-line usage
Reorder struct netns_ct so that atomic_t "count" changes don't slowdown users of read mostly fields. This is based on Eric Dumazet's proposed patch: "netfilter: conntrack: remove the central spinlock" http://thread.gmane.org/gmane.linux.network/268758/focus=47306 The tricky part of cache-aligning this structure, that it is getting inlined in struct net (include/net/net_namespace.h), thus changes to other netns_xxx structures affects our alignment. Eric's original patch contained an ambiguity on 32-bit regarding alignment in struct net. This patch also takes 32-bit into account, and in case of changed (struct net) alignment sysctl_xxx entries have been ordered according to how often they are accessed. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Reviewed-by: Jiri Benc <jbenc@redhat.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Showing 1 changed file with 17 additions and 16 deletions Side-by-side Diff
include/net/netns/conntrack.h
... | ... | @@ -65,6 +65,23 @@ |
65 | 65 | struct netns_ct { |
66 | 66 | atomic_t count; |
67 | 67 | unsigned int expect_count; |
68 | +#ifdef CONFIG_SYSCTL | |
69 | + struct ctl_table_header *sysctl_header; | |
70 | + struct ctl_table_header *acct_sysctl_header; | |
71 | + struct ctl_table_header *tstamp_sysctl_header; | |
72 | + struct ctl_table_header *event_sysctl_header; | |
73 | + struct ctl_table_header *helper_sysctl_header; | |
74 | +#endif | |
75 | + char *slabname; | |
76 | + unsigned int sysctl_log_invalid; /* Log invalid packets */ | |
77 | + unsigned int sysctl_events_retry_timeout; | |
78 | + int sysctl_events; | |
79 | + int sysctl_acct; | |
80 | + int sysctl_auto_assign_helper; | |
81 | + bool auto_assign_helper_warned; | |
82 | + int sysctl_tstamp; | |
83 | + int sysctl_checksum; | |
84 | + | |
68 | 85 | unsigned int htable_size; |
69 | 86 | struct kmem_cache *nf_conntrack_cachep; |
70 | 87 | struct hlist_nulls_head *hash; |
... | ... | @@ -75,14 +92,6 @@ |
75 | 92 | struct ip_conntrack_stat __percpu *stat; |
76 | 93 | struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb; |
77 | 94 | struct nf_exp_event_notifier __rcu *nf_expect_event_cb; |
78 | - int sysctl_events; | |
79 | - unsigned int sysctl_events_retry_timeout; | |
80 | - int sysctl_acct; | |
81 | - int sysctl_tstamp; | |
82 | - int sysctl_checksum; | |
83 | - unsigned int sysctl_log_invalid; /* Log invalid packets */ | |
84 | - int sysctl_auto_assign_helper; | |
85 | - bool auto_assign_helper_warned; | |
86 | 95 | struct nf_ip_net nf_ct_proto; |
87 | 96 | #if defined(CONFIG_NF_CONNTRACK_LABELS) |
88 | 97 | unsigned int labels_used; |
... | ... | @@ -92,14 +101,6 @@ |
92 | 101 | struct hlist_head *nat_bysource; |
93 | 102 | unsigned int nat_htable_size; |
94 | 103 | #endif |
95 | -#ifdef CONFIG_SYSCTL | |
96 | - struct ctl_table_header *sysctl_header; | |
97 | - struct ctl_table_header *acct_sysctl_header; | |
98 | - struct ctl_table_header *tstamp_sysctl_header; | |
99 | - struct ctl_table_header *event_sysctl_header; | |
100 | - struct ctl_table_header *helper_sysctl_header; | |
101 | -#endif | |
102 | - char *slabname; | |
103 | 104 | }; |
104 | 105 | #endif |