ipv6/addrconf: switch to per netns inet6_addr_lst hash table
authorEric Dumazet <edumazet@google.com>
Tue, 8 Feb 2022 04:50:30 +0000 (20:50 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 9 Feb 2022 04:41:32 +0000 (20:41 -0800)
commite66d117222047ea90f92e065f929bc0e0eec3647
treee3651d07fa5a2884aed5edd78bc2a705c43bff9d
parent8805d13ff1b2bef6a7bb8a005d2441763286dd7a
ipv6/addrconf: switch to per netns inet6_addr_lst hash table

IPv6 does not scale very well with the number of IPv6 addresses.
It uses a global (shared by all netns) hash table with 256 buckets.

Some functions like addrconf_verify_rtnl() and addrconf_ifdown()
have to iterate all addresses in the hash table.

I have seen addrconf_verify_rtnl() holding the cpu for 10ms or more.

Switch to the per netns hashtable (and spinlock) added
in prior patches.

This considerably speeds up netns dismantle times on hosts
with thousands of netns. This also has an impact
on regular (fast path) IPv6 processing.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv6/addrconf.c