#cpu #benchmark #workload #parallelism

bin+lib test_cpu_parallel

Generate CPU- or memory-intensive workloads for benchmarking

2 stable releases

new 1.3.1 Apr 30, 2025

#212 in Concurrency

Apache-2.0

22KB
328 lines

test_cpu_parallel – CPU & Memory Load Generator in Rust

crate docs.rs

test_cpu_parallel is a small, zero‑dependency load‑testing kit. It can:

  • load cores to verify scaling or system/container limits
  • sweep 1 → N threads and export a tidy CSV for speed‑up plots
  • hammer the memory hierarchy with random‑access touches beyond the LLC
  • run stand‑alone from the CLI or be embedded in your own Rust code

A two‑minute build, no external data files, works on Linux, macOS and Windows.

Link to the Project page


📦 Installation

what you want command
CLI binary (optimised) cargo install test_cpu_parallel
Library in an app / lib cargo add test_cpu_parallel
Dev build from source git clone … && cargo build

Note For benchmark accuracy the CLI defaults to an un‑optimised opt‑level = 0 build. If you install with cargo install a --release build is produced; results will differ slightly. Re‑compile locally with cargo build to reproduce blog numbers.


⚡ CLI quick‑start

# Burn four threads for a few seconds
$ test_cpu_parallel -w 4

# Sweep 1 → 16 threads, write CSV
$ test_cpu_parallel --num_workers 16 --full -o results.csv

# Stress memory with 8 workers and a 512 MiB buffer
$ test_cpu_parallel -w 8 --mode memory --memory_size 512

Run test_cpu_parallel --help for the complete flag list (excerpt below).

Usage: test_cpu_parallel [OPTIONS]
  -w, --num_workers <N>        parallel threads      (default 2)
  -m, --mode <cpu|memory>      workload type         (default cpu)
  -f, --full                   sweep 1‥=N threads
  -o, --output_file <PATH>     write CSV (full mode)
      --memory_size <MiB>      buffer for memory test (default 1024)

📚 Library usage

Embed the engine in unit tests, benchmarks or monitoring agents:

use test_cpu_parallel::TestCPUParallel;

fn main() -> anyhow::Result<()> {
    // 4 workers, one batch, memory workload, 64 MiB buffer
    let bench = TestCPUParallel::new(4, 1, 1_000, "", 64);
    let (thread_stats, batch_stats) = bench.test_one_load(None, "memory")?;
    println!("Per‑thread  stats: {thread_stats:?}");
    println!("Per‑batch   stats: {batch_stats:?}");
    Ok(())
}

API docs are hosted on docs.rs/test_cpu_parallel.


🔧 Building from source

# Clone and build a debug binary (recommended for comparable timings)
$ git clone https://github.com/LucaCanali/Miscellaneous.git
$ cd Miscellaneous/Performance_Testing/Test_CPU_parallel_Rust
$ cargo build            # ≈ 35 s on a modern laptop
  • Tested on Rust 1.74+ – that is the MSRV.
  • Setting cargo build --release enables heavy optimisations and changes loop timing; avoid if you care about exact comparability.

📊 Analysing the CSV

Full‑mode output is a single CSV line per thread count, ready to feed into Python/pandas, gnuplot or Excel. See the Notebooks/ directory in the repo for ready‑made Jupyter notebooks that plot speed‑up and efficiency curves.


More

Enjoy hacking your CPUs 🔥

Dependencies

~9–19MB
~228K SLoC