• E
    ipv4: avoid quadratic behavior in netns dismantle · d07418af
    Eric Dumazet 提交于
    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: aa79e66e ("net: Make ifindex generation per-net namespace")
    Signed-off-by: NEric Dumazet <edumazet@google.com>
    Reviewed-by: NDavid Ahern <dsahern@kernel.org>
    Signed-off-by: NJakub Kicinski <kuba@kernel.org>
    d07418af
fib_semantics.c 53.4 KB