This series adds a mechanism for maps to populate per-cpu counters on insertions/deletions. The sum of these counters can be accessed by a new kfunc from map iterator and tracing programs. The following patches are present in the series: * Patch 1 adds a generic per-cpu counter to struct bpf_map * Patch 2 adds a new kfunc to access the sum of per-cpu counters * Patch 3 utilizes this mechanism for hash-based maps * Patch 4 extends the preloaded map iterator to dump the sum * Patch 5 adds a self-test for the change * Patch 6 patches map_ptr selftest to check that elem_count was initialized The reason for adding this functionality in our case (Cilium) is to get signals about how full some heavy-used maps are and what the actual dynamic profile of map capacity is. In the case of LRU maps this is impossible to get this information anyhow else. The original presentation can be found here [1]. [1] https://lpc.events/event/16/contributions/1368/ v2 -> v3: - split commits to better represent update logic - remove filter from kfunc to allow all tracing programs - extend selftests v1 -> v2: - make the counters generic part of struct bpf_map - don't use map_info and /proc/self/fdinfo in favor of a kfunc Anton Protopopov (6): bpf: add percpu stats for bpf_map elements insertions/deletions bpf: add a new kfunc to return current bpf_map elements count bpf: populate the per-cpu insertions/deletions counters for hashmaps bpf: make preloaded map iterators to display map elements count selftests/bpf: test map percpu stats selftests/bpf: check that ->elem_count is non-zero for the hash map include/linux/bpf.h | 30 + kernel/bpf/hashtab.c | 23 +- kernel/bpf/map_iter.c | 39 +- kernel/bpf/preload/iterators/iterators.bpf.c | 9 +- .../iterators/iterators.lskel-little-endian.h | 526 +++++++++--------- .../bpf/map_tests/map_percpu_stats.c | 336 +++++++++++ .../selftests/bpf/progs/map_percpu_stats.c | 24 + .../selftests/bpf/progs/map_ptr_kern.c | 3 + 8 files changed, 726 insertions(+), 264 deletions(-) create mode 100644 tools/testing/selftests/bpf/map_tests/map_percpu_stats.c create mode 100644 tools/testing/selftests/bpf/progs/map_percpu_stats.c -- 2.34.1