NerdBench is a single-binary CPU benchmark for server benchmarking.
It's essentially a Go wrapper for a bunch of test modules. These include: C-Ray, SQLite speedtest, sysbench CPU, Stockfish, OpenSSL speed, zstd, ggml ML kernel, and TinyCC compile. They are embedded inside the binary so you don't have to build anything.
NerdBench reports both single-core and multi-core scores. It can also write detailed results to a json file, allowing you to use it in other scripts.
The scores are currently calibrated based on Ryzen 9 9950X, 4 cores. (Baseline: 1000)
curl -fsSL https://raw.githubusercontent.com/XInTheDark/nerdbench/main/bench.sh | shcurl -fsSL https://raw.githubusercontent.com/XInTheDark/nerdbench/main/bench.sh | sh -s -- --format json -o /tmp/nerdbench.jsonuse with --profile
| Profile | Target Runtime | Description |
|---|---|---|
smoke |
< 1 minute | Quick CI validation with minimal workloads |
quick |
~ 1-2 minutes | Short benchmark run |
standard |
~ 5 minutes | Full benchmark suite (default) |
extended |
~ 20 minutes | Extended workloads for thorough testing |
The JSON result schema (version 1) contains:
status:"ok"or"failed"scores.single/scores.multi: geometric mean of successful test module subscoresbenchmarks[]: per-test-module results withstatus,metric,scoreerrors[]: error entries for failed test modulesprovenance: baseline hash and per-worker source, revision, license, SHA256
A failed test module appears in benchmarks[] with status: "failed" and no score, and is also listed in errors[].
scripts/build-workers.sh
go run ./cmd/nerdbench run --profile smoke --bench c-rayscripts/build-workers.sh fetches third-party sources, builds worker binaries for the native host target, verifies Linux workers are self-contained, and generates embedded asset registration under internal/assets/.
scripts/build-workers.sh # native build for local target
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o dist/nerdbench-linux-amd64 ./cmd/nerdbench
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o dist/nerdbench-linux-arm64 ./cmd/nerdbenchWorker binaries must be built in a native environment for their target OS/arch. The release workflow uses QEMU-backed Linux arm64 containers for arm64 workers instead of cross-labeling host-built artifacts.
scripts/bench.sh --profile smoke --format json --progress none -o /tmp/nerdbench-run-001.json
scripts/calibrate.sh --score-version 2026-06-07-dev --result /tmp/nerdbench-run-001.json
scripts/calibrate.sh --score-version 2026-06-07-dev --result /tmp/nerdbench-run-001.json --set-baselineRun NerdBench separately to create one or more JSON result files, then pass those files to scripts/calibrate.sh with --result. Generated baseline candidates are written to calibration/baselines/<score_version>.json. --set-baseline copies the generated candidate into internal/results/baselines/<score_version>.json if it does not already exist.
NerdBench is licensed under GPL-3.0-or-later. However, if you want to use it in a non-GPL-compatible script, you can still call NerdBench as a separate (external) GPL program and parse its output.