netlink: move nl_table in read_mostly section
authorEric Dumazet <edumazet@google.com>
Wed, 13 May 2015 00:24:50 +0000 (17:24 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 14 May 2015 21:49:06 +0000 (17:49 -0400)
netlink sockets creation and deletion heavily modify nl_table_users
and nl_table_lock.

If nl_table is sharing one cache line with one of them, netlink
performance is really bad on SMP.

ffffffff81ff5f00 B nl_table
ffffffff81ff5f0c b nl_table_users

Putting nl_table in read_mostly section increased performance
of my open/delete netlink sockets test by about 80 %

This came up while diagnosing a getaddrinfo() problem.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/netlink/af_netlink.c

index daa0b818174bdc2c7b5e15e5e0dbd6b287014ba6..dbe885901b34b98134f03d78bc181ef30d8b0322 100644 (file)
@@ -89,7 +89,7 @@ static inline int netlink_is_kernel(struct sock *sk)
        return nlk_sk(sk)->flags & NETLINK_KERNEL_SOCKET;
 }
 
-struct netlink_table *nl_table;
+struct netlink_table *nl_table __read_mostly;
 EXPORT_SYMBOL_GPL(nl_table);
 
 static DECLARE_WAIT_QUEUE_HEAD(nl_table_wait);