public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: force dst_default_metrics to const section
@ 2012-08-07 16:11 Eric Dumazet
  2012-08-07 20:15 ` Ben Hutchings
  0 siblings, 1 reply; 12+ messages in thread
From: Eric Dumazet @ 2012-08-07 16:11 UTC (permalink / raw)
  To: David Miller; +Cc: netdev

From: Eric Dumazet <edumazet@google.com>

While investigating on network performance problems, I found this little
gem :

$ nm -v vmlinux | grep -1 dst_default_metrics
ffffffff82736540 b busy.46605 
ffffffff82736560 B dst_default_metrics
ffffffff82736598 b dst_busy_list

Apparently, declaring a const array without initializer put it in
(writeable) bss section, in middle of possibly often dirtied cache
lines.

Since we really want dst_default_metrics be const to avoid any possible
false sharing and catch any buggy writes, I force a null initializer.

ffffffff818a4c20 R dst_default_metrics

Signed-off-by: Eric Dumazet <edumazet@google.com>
---
For reference, dst_default_metrics was added in 2.6.39

 net/core/dst.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/net/core/dst.c b/net/core/dst.c
index 069d51d..4c538be 100644
--- a/net/core/dst.c
+++ b/net/core/dst.c
@@ -149,7 +149,15 @@ int dst_discard(struct sk_buff *skb)
 }
 EXPORT_SYMBOL(dst_discard);
 
-const u32 dst_default_metrics[RTAX_MAX];
+const u32 dst_default_metrics[RTAX_MAX] = {
+	/* This initializer is needed to force linker to place this variable
+	 * into const section. Otherwise it might end into bss section.
+	 * We really want to avoid false sharing on this variable, and catch
+	 * any writes on it.
+	 */
+	0
+};
+
 
 void *dst_alloc(struct dst_ops *ops, struct net_device *dev,
 		int initial_ref, int initial_obsolete, unsigned short flags)

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-08-08 23:00 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-07 16:11 [PATCH] net: force dst_default_metrics to const section Eric Dumazet
2012-08-07 20:15 ` Ben Hutchings
2012-08-07 20:55   ` Eric Dumazet
2012-08-07 22:12     ` Ben Hutchings
2012-08-07 22:34       ` Eric Dumazet
2012-08-07 22:44         ` Ben Hutchings
2012-08-07 22:56           ` Eric Dumazet
2012-08-07 23:17             ` David Miller
2012-08-08 23:00     ` David Miller
2012-08-07 21:55   ` David Miller
2012-08-07 22:09     ` Eric Dumazet
2012-08-07 22:11       ` Eric Dumazet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox