summaryrefslogtreecommitdiff
path: root/scripts/Makefile.thinlto
diff options
context:
space:
mode:
authorChangbin Du <changbin.du@gmail.com>2026-10-16 15:55:52 +0800
committerArnaldo Carvalho de Melo <acme@redhat.com>2026-10-21 19:25:29 -0300
commit6bfe62df93de50425e27831643c2bb06d1b252ec (patch)
treecb9cc810cd433f68edd6790daf02ecf8549eb967 /scripts/Makefile.thinlto
parentc58d1598e79554cc8f587668ab2ebcaeb616b076 (diff)
downloadlinux-6bfe62df93de50425e27831643c2bb06d1b252ec.tar.gz
linux-6bfe62df93de50425e27831643c2bb06d1b252ec.zip
perf bench: Add atomic operations benchmark
Add a new 'atomic' collection to perf bench for benchmarking atomic read-modify-write operations with multi-threaded contention testing. It provides two subcommands: - atomic cas: contended compare-and-swap operations (__atomic_compare_exchange_n) - atomic inc: contended fetch-add operations (__atomic_fetch_add) Both support a configurable thread count and runtime to measure atomic contention effects. Why this benchmark is needed: - Atomic read-modify-write operations are fundamental to lock-free algorithms and data structures. Understanding their performance characteristics under contention is critical for designing high-performance concurrent applications. - The benchmark helps identify atomic operation latency and scalability issues across different thread counts, revealing contention patterns that are not visible in single-threaded tests. - Useful for evaluating atomic implementation quality on different architectures and for regression testing after changes to atomic primitives or memory ordering. Measurement methodology: - By default two threads contend for the counter, enough to expose the contention effect; use -t to scale the count. - Each thread starts a private timer (clock_gettime CLOCK_MONOTONIC) after synchronizing on a pthread_barrier, ensuring all threads begin simultaneously. - Each thread performs a hot loop of the selected atomic operation (compare-and-swap or fetch-add) on a shared unsigned long counter for a fixed runtime. It counts its own completed operations in a local variable, and the loop runs in batches so the termination flag is only polled between batches. - The main thread sleeps for the runtime and then sets the flag; the throughput of a repeat is the total operation count divided by the measured wall time (the max per-thread runtime). - The shared counter is cache-line aligned (64 bytes) to isolate contention to the target cache line and avoid false sharing. - The per-thread operation counts of the last repeat show whether any thread failed to make progress under contention. - The first repeat is excluded from statistics as a warmup phase to avoid cache-cold effects. Example usage: $ perf bench atomic all # Running atomic/cas benchmark... Threads: 2, runtime: 2 sec, repeats: 10 (warmup: 1) Avg throughput: 68,599,954 ops/sec (+- 0.13%) Per-thread ops (last repeat): fastest: 74,842,112 ops slowest: 63,176,704 ops avg: 69,009,408 ops # Running atomic/inc benchmark... Threads: 2, runtime: 2 sec, repeats: 10 (warmup: 1) Avg throughput: 128,428,772 ops/sec (+- 0.54%) Per-thread ops (last repeat): fastest: 146,230,272 ops slowest: 112,825,344 ops avg: 129,527,808 ops Output fields explained: - Threads: number of contending threads - runtime: seconds each thread runs per repeat - repeats: number of test runs (first is warmup) - Avg throughput: mean aggregate ops/sec across repeats - +- %: relative standard error of the mean throughput across repeats - Per-thread ops: fastest/slowest/avg operations per thread in the last repeat (shows scheduling imbalance and lack of progress) Reviewed-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Changbin Du <changbin.du@gmail.com> Assisted-by: opencode:DeepSeek-V4-Pro Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions