diff options
author | Eric Dumazet <edumazet@google.com> | 2015-05-12 17:24:50 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-05-14 17:49:06 -0400 |
commit | 91dd93f956b9ea9ecf47fd4b9acd2d2e7f980303 (patch) | |
tree | 1144107d6ac2f98703f314450ebb866baf6bcbad /net/netlink/af_netlink.c | |
parent | be346ffaad9bc354075fba5cd009fc4519abdd64 (diff) | |
download | op-kernel-dev-91dd93f956b9ea9ecf47fd4b9acd2d2e7f980303.zip op-kernel-dev-91dd93f956b9ea9ecf47fd4b9acd2d2e7f980303.tar.gz |
netlink: move nl_table in read_mostly section
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>
Diffstat (limited to 'net/netlink/af_netlink.c')
-rw-r--r-- | net/netlink/af_netlink.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index daa0b81..dbe8859 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -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); |