diff options
author | Eric Dumazet | 2022-01-19 02:04:12 -0800 |
---|---|---|
committer | Jakub Kicinski | 2022-01-19 08:14:40 -0800 |
commit | d07418afea8f1d9896aaf9dc5ae47ac4f45b220c (patch) | |
tree | 99556371ae6bd0963505ee19ba41f2b4641395ae /net/netlabel | |
parent | 8eb896a77701bef7c80a99833ca776c9ddc317c8 (diff) |
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>
Diffstat (limited to 'net/netlabel')
0 files changed, 0 insertions, 0 deletions