[PATCH bpf-next 0/2] bpftool: Batch bounded hash map dumps
From: Tianyi Chen
Date: Sun Sep 06 2026 - 13:10:27 EST
This series uses lookup batches for ordinary hash maps whose maximum
key/value storage fits within a 4 MiB budget. It retains the existing
formatting and falls back to individual lookups if the initial batch
operation is unsupported. Other map types keep individual lookups.
Hash batch lookups need room for a complete bucket, so ENOSPC grows the
buffer without advancing the cursor. The memory eligibility check makes
that growth bounded even after output has begun. Non-ENOENT errors do
not expose untrusted counts or trigger a duplicate dump restart.
Related request:
https://github.com/libbpf/bpftool/issues/63
The series is based on bpf-next and does not depend on my recursive
map-dump series or the flags/ring-buffer series sent alongside it.
Validation on x86-64, Linux 7.3.0-rc1 in KVM, LLVM 20:
- Full bpftool build and focused BPF selftests build.
- All 11 bpftool_map_batch subtests passed against a bpftool built with
only this series: complete unordered plain, JSON and pretty JSON
contents, batch boundaries, short keys, odd-sized values and BTF.
- strace fault injection checked initial EINVAL/EOPNOTSUPP/ENOTSUPP
fallback; ENOSPC growth initially and after progress; fatal EFAULT,
ENOMEM and post-progress EIO/EINVAL; no duplicates and valid JSON.
- A map exceeding the memory eligibility budget used individual lookups.
- On the same static 100,000-entry hash map, BPF syscall counts dropped
from 200,004 to 395. Five untraced runs had median elapsed times of
0.774 s before and 0.734 s after; text formatting still dominates.
Fault injection simulates error returns; it is not a real collision
stress test. Only focused selftests were run. Strict checkpatch has no
errors or checks; the new test file is covered by existing MAINTAINERS
patterns.
Integration check: these three independent series also applied and built
together with my previously posted recursive map-dump v2 series. The
combined 64 subtests passed with no skips or failures in the same guest.
Tianyi Chen (2):
bpftool: Use batch lookups for bounded hash map dumps
selftests/bpf: Check bpftool batch map dump contents
tools/bpf/bpftool/map.c | 113 ++++++++++-
.../bpf/prog_tests/bpftool_map_batch.c | 186 ++++++++++++++++++
2 files changed, 291 insertions(+), 8 deletions(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/bpftool_map_batch.c
--
2.55.0