On 9/30/20 5:18 PM, Daniel Borkmann wrote: > With its use in BPF, the cookie generator can be called very frequently > in particular when used out of cgroup v2 hooks (e.g. connect / sendmsg) > and attached to the root cgroup, for example, when used in v1/v2 mixed > environments. In particular, when there's a high churn on sockets in the > system there can be many parallel requests to the bpf_get_socket_cookie() > and bpf_get_netns_cookie() helpers which then cause contention on the > atomic counter. > > As similarly done in f991bd2e1421 ("fs: introduce a per-cpu last_ino > allocator"), add a small helper library that both can use for the 64 bit > counters. Given this can be called from different contexts, we also need > to deal with potential nested calls even though in practice they are > considered extremely rare. One idea as suggested by Eric Dumazet was > to use a reverse counter for this situation since we don't expect 64 bit > overflows anyways; that way, we can avoid bigger gaps in the 64 bit > counter space compared to just batch-wise increase. Even on machines > with small number of cores (e.g. 4) the cookie generation shrinks from > min/max/med/avg (ns) of 22/50/40/38.9 down to 10/35/14/17.3 when run > in parallel from multiple CPUs. > > Signed-off-by: Daniel Borkmann <daniel@xxxxxxxxxxxxx> > Acked-by: Martin KaFai Lau <kafai@xxxxxx> > Cc: Eric Dumazet <eric.dumazet@xxxxxxxxx> Reviewed-by: Eric Dumazet <edumazet@xxxxxxxxxx> Thanks.