OSDN Git Service

ipv4: avoid quadratic behavior in netns dismantle
authorEric Dumazet <edumazet@google.com>
Wed, 19 Jan 2022 10:04:12 +0000 (02:04 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 19 Jan 2022 16:14:40 +0000 (08:14 -0800)
commitd07418afea8f1d9896aaf9dc5ae47ac4f45b220c
tree99556371ae6bd0963505ee19ba41f2b4641395ae
parent8eb896a77701bef7c80a99833ca776c9ddc317c8
ipv4: avoid quadratic behavior in netns dismantle

net/ipv4/fib_semantics.c uses an hash table of 256 slots,
keyed by device ifindexes: fib_info_devhash[DEVINDEX_HASHSIZE]

Problem is that with network namespaces, devices tend
to use the same ifindex.

lo device for instance has a fixed ifindex of one,
for all network namespaces.

This means that hosts with thousands of netns spend
a lot of time looking at some hash buckets with thousands
of elements, notably at netns dismantle.

Simply add a per netns perturbation (net_hash_mix())
to spread elements more uniformely.

Also change fib_devindex_hashfn() to use more entropy.

Fixes: aa79e66eee5d ("net: Make ifindex generation per-net namespace")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/fib_semantics.c