• Stanislav Fomichev's avatar
    bpf: Try to avoid kzalloc in cgroup/{s,g}etsockopt · 20f2505f
    Stanislav Fomichev authored
    
    
    When we attach a bpf program to cgroup/getsockopt any other getsockopt()
    syscall starts incurring kzalloc/kfree cost.
    
    Let add a small buffer on the stack and use it for small (majority)
    {s,g}etsockopt values. The buffer is small enough to fit into
    the cache line and cover the majority of simple options (most
    of them are 4 byte ints).
    
    It seems natural to do the same for setsockopt, but it's a bit more
    involved when the BPF program modifies the data (where we have to
    kmalloc). The assumption is that for the majority of setsockopt
    calls (which are doing pure BPF options or apply policy) this
    will bring some benefit as well.
    
    Without this patch (we remove about 1% __kmalloc):
         3.38%     0.07%  tcp_mmap  [kernel.kallsyms]  [k] __cgroup_bpf_run_filter_getsockopt
                |
                 --3.30%--__cgroup_bpf_run_filter_getsockopt
                           |
                            --0.81%--__kmalloc
    Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Link: https://lore.kernel.org/bpf/20210115163501.805133-3-sdf@google.com
    20f2505f
cgroup.c 50.2 KB