linux/tools/testing
Eduard Zingerman 67cdcc405b veristat: Memory accounting for bpf programs
This commit adds a new field mem_peak / "Peak memory (MiB)" field to a
set of gathered statistics. The field is intended as an estimate for
peak verifier memory consumption for processing of a given program.

Mechanically stat is collected as follows:
- At the beginning of handle_verif_mode() a new cgroup is created
  and veristat process is moved into this cgroup.
- At each program load:
  - bpf_object__load() is split into bpf_object__prepare() and
    bpf_object__load() to avoid accounting for memory allocated for
    maps;
  - before bpf_object__load():
    - a write to "memory.peak" file of the new cgroup is used to reset
      cgroup statistics;
    - updated value is read from "memory.peak" file and stashed;
  - after bpf_object__load() "memory.peak" is read again and
    difference between new and stashed values is used as a metric.

If any of the above steps fails veristat proceeds w/o collecting
mem_peak information for a program, reporting mem_peak as -1.

While memcg provides data in bytes (converted from pages), veristat
converts it to megabytes to avoid jitter when comparing results of
different executions.

The change has no measurable impact on veristat running time.

A correlation between "Peak states" and "Peak memory" fields provides
a sanity check for gathered statistics, e.g. a sample of data for
sched_ext programs:

Program                   Peak states  Peak memory (MiB)
------------------------  -----------  -----------------
lavd_select_cpu                  2153                 44
lavd_enqueue                     1982                 41
lavd_dispatch                    3480                 28
layered_dispatch                 1417                 17
layered_enqueue                   760                 11
lavd_cpu_offline                  349                  6
lavd_cpu_online                   349                  6
lavd_init                         394                  6
rusty_init                        350                  5
layered_select_cpu                391                  4
...
rusty_stopping                    134                  1
arena_topology_node_init          170                  0

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20250613072147.3938139-3-eddyz87@gmail.com
2025-06-13 10:44:12 -07:00
..
crypto/chacha20-s390 crypto: lib/chacha - strongly type the ChaCha state 2025-05-12 13:32:53 +08:00
cxl Merge branch 'for-6.16/cxl-features-ras' into cxl-for-next 2025-05-23 13:26:24 -07:00
fault-injection
ktest ktest: Fix Test Failures Due to Missing LOG_FILE Directories 2025-03-27 09:34:00 -04:00
kunit linux_kselftest-kunit-6.16-rc1 2025-05-26 14:29:44 -07:00
memblock memblock: add MEMBLOCK_RSRV_KERN flag 2025-05-12 23:50:38 -07:00
nvdimm
radix-tree maple_tree: add sufficient height 2025-05-11 17:48:29 -07:00
rbtree lib/interval_tree: add test case for span iteration 2025-03-17 12:17:01 -07:00
scatterlist
selftests veristat: Memory accounting for bpf programs 2025-06-13 10:44:12 -07:00
shared test suite: use %zu to print size_t 2025-04-11 17:32:35 -07:00
vma tools/testing/vma: add missing function stub 2025-05-31 22:46:14 -07:00
vsock vsock/test: Add test for an unexpectedly lingering close() 2025-05-27 11:05:22 +02:00