• Roman Gushchin's avatar
    selftests/bpf: cgroup local storage-based network counters · 371e4fcc
    Roman Gushchin authored
    This commit adds a bpf kselftest, which demonstrates how percpu
    and shared cgroup local storage can be used for efficient lookup-free
    network accounting.
    
    Cgroup local storage provides generic memory area with a very efficient
    lookup free access. To avoid expensive atomic operations for each
    packet, per-cpu cgroup local storage is used. Each packet is initially
    charged to a per-cpu counter, and only if the counter reaches certain
    value (32 in this case), the charge is moved into the global atomic
    counter. This allows to amortize atomic operations, keeping reasonable
    accuracy.
    
    The test also implements a naive network traffic throttling, mostly to
    demonstrate the possibility of bpf cgroup--based network bandwidth
    control.
    
    Expected output:
      ./test_netcnt
      test_netcnt:PASS
    Signed-off-by: default avatarRoman Gushchin <guro@fb.com>
    Acked-by: default avatarSong Liu <songliubraving@fb.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    371e4fcc
netcnt_common.h 320 Bytes