PERF-BENCH(1)
π perf-bench(1) β the general framework for benchmark suites
okay bestie, welcome to the perf bench page from the perf Manual β¨ this one's literally the plug for all the benchmark suites β pull up a chair, we're gonna speedrun it together π«Ά
πΈ NAME πΈ
perf-bench β General framework for benchmark suites. that's it, that's the vibe π
π SYNOPSIS π
perf bench [<common options>] <subsystem> <suite> [<options>]
β¨ DESCRIPTION β¨
so, the perf bench command is a general framework for benchmark suites. it's the main character that holds all the individual benchmarks together π
π COMMON OPTIONS π
the ones everybody gets, no matter which suite you're running:
-r,--repeat=β specify number of times to repeat the run (default10). yes, ten. she's thorough π-f,--format=β specify format style. the format styles currently available are, and I quote:defaultβ Default style. This is mainly for human reading. i.e. it's giving readable π
% perf bench sched pipe # with no style specified
(executing 1000000 pipe operations between two tasks)
Total time:5.855 sec
5.855061 usecs/op
170792 ops/sec
simpleβ This simple style is friendly for automated processing by scripts. iykyk, scripts love a bare number π€
% perf bench --format=simple sched pipe # specified simple
5.988
π¦ SUBSYSTEM π¦
here's the menu of subsystems, pick your fighter:
schedβ Scheduler and IPC mechanisms.syscallβ System call performance (throughput).memβ Memory access performance.numaβ NUMA scheduling and MM benchmarks.futexβ Futex stressing benchmarks.epollβ Eventpoll (epoll) stressing benchmarks.internalsβ Benchmark internal perf functionality.uprobeβ Benchmark overhead of uprobe + BPF.allβ All benchmark subsystems. the "give me everything" option, periodt π
π SUITES FOR sched π
messaging
Suite for evaluating performance of scheduler and IPC mechanisms. Based on hackbench by Rusty Russell. iconic lineage fr fr π
Options of messaging
-p,--pipeβ Usepipe()instead ofsocketpair()-t,--threadβ Be multi thread instead of multi process-g,--group=β Specify number of groups-l,--nr_loops=β Specify number of loops
Example of messaging
% perf bench sched messaging # run with default
options (20 sender and receiver processes per group)
(10 groups == 400 processes run)
Total time:0.308 sec
% perf bench sched messaging -t -g 20 # be multi-thread, with 20 groups
(20 sender and receiver threads per group)
(20 groups == 800 threads run)
Total time:0.582 sec
pipe
Suite for pipe() system call. Based on pipe-test-1m.c by Ingo Molnar. a classic, no cap β¨
Options of pipe
-l,--loop=β Specify number of loops.-G,--cgroups=β Names of cgroups for sender and receiver, separated by a comma. This is useful to check cgroup context switching overhead. Note that perf doesn't create nor delete the cgroups, so users should make sure that the cgroups exist and are accessible before use.
β οΈ real talk: perf does not create or delete those cgroups for you. so double check they exist and are accessible before you run anything, or you're gonna have a bad time π
Example of pipe
% perf bench sched pipe
(executing 1000000 pipe operations between two tasks)
Total time:8.091 sec
8.091833 usecs/op
123581 ops/sec
% perf bench sched pipe -l 1000 # loop 1000
(executing 1000 pipe operations between two tasks)
Total time:0.016 sec
16.948000 usecs/op
59004 ops/sec
% perf bench sched pipe -G AAA,BBB
(executing 1000000 pipe operations between cgroups)
# Running 'sched/pipe' benchmark:
# Executed 1000000 pipe operations between two processes
Total time: 6.886 [sec]
6.886208 usecs/op
145217 ops/sec
π§ SUITES FOR syscall π§
basic
Suite for evaluating performance of core system call throughput (both usecs/op and ops/sec metrics). This uses a single thread simply doing getppid(2), which is a simple syscall where the result is not cached by glibc. one thread, one syscall, immaculate focus π
πΈ SUITES FOR mem πΈ
memcpy
Suite for evaluating performance of simple memory copy in various ways.
Options of memcpy
-s,--sizeβ Specify size of memory to copy (default:1MB). Available units areB,KB,MB,GBandTB(case insensitive).-p,--pageβ Specify page-size for mapping memory buffers (default:4KB). Available values are4KB,2MB,1GB(case insensitive).-k,--chunkβ Specify the chunk-size for each invocation. (default:0, or full-extent) Available units areB,KB,MB,GBandTB(case insensitive).-f,--functionβ Specify function to copy (default:default). Available functions are depend on the architecture. On x86-64,x86-64-unrolled,x86-64-movsqandx86-64-movsbare supported.-l,--nr_loopsβ Repeatmemcpyinvocation this number of times.-c,--cyclesβ Use perf'scpu-cyclesevent instead ofgettimeofdaysyscall.
memset
Suite for evaluating performance of simple memory set in various ways.
Options of memset
-s,--sizeβ Specify size of memory to set (default:1MB). Available units areB,KB,MB,GBandTB(case insensitive).-p,--pageβ Specify page-size for mapping memory buffers (default:4KB). Available values are4KB,2MB,1GB(case insensitive).-k,--chunkβ Specify the chunk-size for each invocation. (default:0, or full-extent) Available units areB,KB,MB,GBandTB(case insensitive).-f,--functionβ Specify function to set (default:default). Available functions are depend on the architecture. On x86-64,x86-64-unrolled,x86-64-stosqandx86-64-stosbare supported.-l,--nr_loopsβ Repeatmemsetinvocation this number of times.-c,--cyclesβ Use perf'scpu-cyclesevent instead ofgettimeofdaysyscall.
mmap
Suite for evaluating memory subsystem performance for mmap()'d memory.
Options of mmap
-s,--sizeβ Specify size of memory to set (default:1MB). Available units areB,KB,MB,GBandTB(case insensitive).-p,--pageβ Specify page-size for mapping memory buffers (default:4KB). Available values are4KB,2MB,1GB(case insensitive).-r,--randomizeβ Specify seed to randomize page access offset (default:0, or not randomized).-f,--functionβ Specify function to set (default:all). Available functions aredemandandpopulate, with the first demand faulting pages in the region and the second using an eager mapping.-l,--nr_loopsβ Repeatmmap()invocation this number of times.-c,--cyclesβ Use perf'scpu-cyclesevent instead ofgettimeofdaysyscall.-t,--threads=<NUM>β Create multiple threads to callmmap/munmapconcurrently.
π SUITES FOR numa π
memβ Suite for evaluating NUMA workloads.
π₯ SUITES FOR futex π₯
hashβ Suite for evaluating hash tables.wakeβ Suite for evaluating wake calls.wake-parallelβ Suite for evaluating parallel wake calls.requeueβ Suite for evaluating requeue calls.lock-piβ Suite for evaluating futexlock_picalls.
π SUITES FOR epoll π
waitβ Suite for evaluating concurrentepoll_waitcalls.ctlβ Suite for evaluating multipleepoll_ctlcalls.
β SUITES FOR internals β
synthesizeβ Suite for evaluating perf's event synthesis performance.
π SEE ALSO π
perf(1)β go read the big one too, bestie π«Ά
and that's the whole page, you ate that π perf, dated 10/31/2026 β this page is literally labeled PERF-BENCH(1), slay β¨
π¦ where this page comes from
- arch rolling: perf 7.3.1-1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms