]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
selftests/pipe: add pipe_bench microbenchmark
authorBreno Leitao <leitao@debian.org>
Sun, 24 May 2026 14:44:59 +0000 (07:44 -0700)
committerChristian Brauner <brauner@kernel.org>
Thu, 28 May 2026 12:33:25 +0000 (14:33 +0200)
commitd29bd8efe16239608b60173a7e8d842bcbfcd9e9
tree7a0310a6cc94868c2d0a572b2afdf4bc209b3004
parent212ed884a1aeefda22d87c270d082e4b0a95821f
selftests/pipe: add pipe_bench microbenchmark

Add a small selftest that stresses pipe->mutex contention by spawning N
writer threads that hammer a single pipe with multi-page writes, plus M
reader threads that drain. Each writer records its own write() latency
samples into a log2-bucketed histogram; main aggregates and prints
total writes, throughput, average and percentile (p50/p99) latencies,
and the maximum observed latency.

Pass --memory-pressure to fork stress-ng (--vm 4 --vm-bytes 80%
--vm-method all) for the duration of the run, so alloc_page() in
anon_pipe_write() routinely hits direct reclaim. The flag fails
fast if stress-ng is not on $PATH.

Program print something like the following, for different writes,
readers, msgsizes and memory pressure:

config: writers=X readers=Y msgsize=Z duration=3 pipe_size=1048576
memory_pressure=[no|yes]
writes: total=54451 rate=18150/s
throughput_MBps: 1134.40
lat_avg_ns: 275355
lat_p50_ns_upper: 262143
lat_p99_ns_upper: 1048575
lat_max_ns: 2145633

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Breno Leitao <leitao@debian.org>
Link: https://patch.msgid.link/20260524-fix_pipe-v3-2-bb4a75d23a90@debian.org
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
tools/testing/selftests/Makefile
tools/testing/selftests/pipe/.gitignore [new file with mode: 0644]
tools/testing/selftests/pipe/Makefile [new file with mode: 0644]
tools/testing/selftests/pipe/pipe_bench.c [new file with mode: 0644]