Free & open source · MIT · Windows · Linux · macOS

Know which machine is faster — and why.

loadbearer benchmarks a machine's CPU, memory, disk and network stack — and its GPU where there is one — scores every measurement against a shared reference baseline, and grades each component and the whole machine on an S‑to‑F scale. Point it at two laptops and it tells you which one wins, by how much, and what's holding the other back. A sustained‑load test shows how much speed each one keeps once it heats up.

or on Windows: winget install Issinoho.Loadbearer

Latest release — · one self-contained binary · no runtime, no network access

loadbearer run
loadbearer 1.2.2 — assessment

  Machine   ThinkPad-X280 · i5-8350U · 8 threads · 7.0 GiB RAM
  Profile   general · curve k=0.5 · baseline reference-v1
  Clocks 3.4→3.4 GHz (min 3.3) · steady

  CPU       984  [B]  ████████████████░░░░░░░
    Integer, all cores     25180.3 Mops/s   1.43x  1194  high
    Float, all cores       36997.5 MFLOP/s  1.61x  1267  high
    BLAKE3 hash             2384.6 MiB/s    1.27x  1128  high
    informational  Integer, 4 threads   24880 Mops/s

  MEMORY    947  [B]  ███████████████░░░░░░░░
    Sequential read            8.9 GiB/s    0.83x   913  medium
    Random access latency    181.8 ns       0.81x   901  high
    informational  ~L1 1.1 ns · ~L2 3.4 ns · ~L3 14.9 ns

  DISK      835  [C]  █████████████░░░░░░░░░░
    Sequential read          380.4 MiB/s    0.67x   816  high
    Random 4K write         7601.6 IOPS     0.70x   838  low
    informational  Random 4K read, deep queue  61044 IOPS

  NETWORK   1219  [A]  ████████████████████░░  · not in overall
    TCP round-trip latency    54.6 us       0.73x   853  low
    UDP send rate            169.1 Kpps     1.82x  1348  high

  OVERALL   920  [B]  ███████████████░░░░░░░

  Why:
    - held back by Disk (score 835)
    - low measurement confidence in: Disk

  vs typical hardware  · not graded
    CPU  -1%   CPU matches a typical Intel Core i5-8350U
      int_multi +0% · float_multi +0% · hash +0% · aes_gcm -4% · sha256 -2% · …
What it does

A benchmark that answers a question, not just prints numbers

Raw MiB/s and Mops/s don't tell you whether laptop A beats laptop B. loadbearer turns them into a grade, a verdict, and a reason.

One graded answer per machine

CPU, memory, disk and network each get a score against the baseline (1000 = the mean of a small fleet of real machines) and a letter grade. A profile-weighted geometric mean of CPU, memory and disk becomes one overall grade, with a plain-language note on what moved it. Network, the GPU (FP32 + VRAM bandwidth, via OpenCL), battery health, and the sustained-load test are shown alongside — OS, optional hardware, wear, cooling — so they don't skew the grade. When the CPU or GPU model is in the reference table, a vs typical hardware line says whether it's performing to spec for its model — also ungraded.

Head-to-head, in one sentence

loadbearer compare a.json b.json reads the raw metrics from two runs and says: "dev-desktop leads by 68% overall (ahead on cpu +90%, memory +55%)." Baseline-independent, so it holds even across tool versions — and loadbearer score re-grades an old run against a new baseline without re-running it.

A method you can check

Fixed-time throughput measurement, medians with confidence flags from run-to-run spread, geometric means throughout, and a documented baseline you can regenerate from your own hardware. No hidden weighting — it's a few constants in the source.

Honest and self-contained

One static binary, no runtime. No network calls — the network test is loopback only. Disk reads bypass the OS page cache (O_DIRECT / FILE_FLAG_NO_BUFFERING). Workloads are reproducible with --seed.

See it

The whole thing is a terminal

An interactive run shows a live TUI, and compare opens a scrollable coloured view; piped or scripted, both fall back to plain text or JSON. info, soak and mem are plain diagnostics. Here's the plain output.

Examples

A few things you'd actually type

bash
$ loadbearer run                         # grade this machine (TUI)
$ loadbearer run --output me.json        # ...and save the result
$ loadbearer compare me.json them.json   # which machine wins, and why
$ loadbearer soak                        # does it throttle under a long load?
$ loadbearer mem                         # what's using RAM (ps_mem-style, PSS)
$ loadbearer score me.json --baseline ref.toml  # re-grade, no re-run
$ loadbearer run --json | jq .overall    # for scripts and CI gates
$ loadbearer run --only cpu,memory       # skip the disk write
$ loadbearer baseline runs/*.json > ref.toml  # recalibrate to your fleet

Profiles (--profile dev-workstation, content-creation, server) reweight the components for a workload. loadbearer run --soak folds the sustained-load test into a full assessment. A real link test between two machines: loadbearer net-server on one, loadbearer run --net-target HOST:PORT on the other. Every run writes a plain-text diagnostic log (--log-file, --no-log, --log-level) for after-the-fact troubleshooting.

Install

Install it, download a binary, or build it

Every tagged release ships a self-contained loadbearer.exe for Windows and a Linux tarball, built from the same source by CI, and is published to winget and the Ubuntu PPA. macOS on Apple Silicon builds and runs from that same source.

🪟 Windows (x86-64)

Install from the Windows Package Manager, which puts loadbearer on your PATH:

winget install Issinoho.Loadbearer

Or unzip the release and run loadbearer.exe from a terminal. Releases are Authenticode-signed with a Certum Open Source Code Signing certificate, applied by hand shortly after each release publishes — so a build can be briefly unsigned right after tagging; check with Get-AuthenticodeSignature. An unsigned build gets a SmartScreen prompt (More info → Run anyway) and is blocked outright by Smart App Control — run it on a machine without SAC, or build from source. Every release also publishes a build-provenance attestation and SHA256SUMS.

Download .zip

🐧 Linux

On Ubuntu 22.04, 24.04 or 26.04 — amd64 or arm64 — install from the PPA and get updates through apt with everything else:

sudo add-apt-repository ppa:issinoho/loadbearer
sudo apt install loadbearer

On arm64 the CPU aes_gcm and sha256 subtests read low, as on Apple Silicon — the build doesn't use Arm crypto instructions, and the result says so.

Elsewhere: extract the x86-64 tarball and run ./loadbearer, or grab the standalone .deb attached to each release, or install from source:

cargo install --git https://github.com/issinoho/loadbearer --locked
Download .tar.gz

🍎 macOS (Apple Silicon)

No pre-built binary yet — build from source with the same command. All five components work, GPU via Apple's OpenCL framework. The CPU aes_gcm / sha256 figures read low (no Arm crypto instructions in the build) and disk I/O is buffered, both noted in the result.

cargo install --git https://github.com/issinoho/loadbearer --locked
macOS notes

🛠️ From source

Needs a recent stable Rust toolchain. On x86, for CPU kernels that use your machine's widest vectors (on Apple Silicon a plain release build is already native):

RUSTFLAGS="-C target-cpu=native" \
  cargo build --release
Build guide

Full flag reference is in the README; the wiki is the deep dive — every benchmark kernel, the scoring maths worked through, compare internals, and recalibrating the baseline. Verifying a download: Windows releases are signed by hand shortly after publishing (a Certum Open Source Code Signing certificate — check with Get-AuthenticodeSignature), and every release also carries a build-provenance attestation, a GPG-signed SHA256SUMS, and the checksums themselves — CODE_SIGNING_POLICY.md.

At fleet scale

Now do it for every machine you own

loadbearer-fleet is a companion server. Point it at the folder your deployment tool drops result files into and it indexes them and reports across the estate — summary, peer groups, drilldown, and the red flags worth acting on. Separate repository, separate release, also MIT. Early, but usable.

http://127.0.0.1:8787
The loadbearer-fleet overview: three of four machines need attention, a median score of 1,124, a bar chart of machines by grade, and findings split into machine, measurement and coverage queues.

The overview, over that project's four sample results — which is why nothing has a peer group here: a cohort needs four machines of the same hardware measured the same way.

Peers first, not the baseline

The reference baseline answers is this machine any good. It's the wrong tool for is this machine broken — a 15% shortfall against it could be the baseline. So the primary comparison is a machine against the machines like it, and the secondary one against its own history, where the hardware is held constant. Cohorts use median and MAD rather than mean and standard deviation, because the statistic has to survive the thing it's looking for.

Three queues, not one wall of red

Findings are split by what you'd do about them: the machine (repair, replace, reassign), the measurement (the number can't be trusted until collection is fixed — thermally limited, on battery, a partial run), and the data we hold (stale, or attributed by an identifier that resets on reimage). Mixing them means an estate owner reads a thermal caveat as a failing asset.

Loopback by default, SSO when you need it

Out of the box it serves 127.0.0.1:8787 with no sign-in, and refuses a wider bind unless sign-in is configured and the public URL is https — or you pass a flag that says you meant it. Point it at an identity provider and it does OpenID Connect with PKCE, roles from group claims and per-site scoping — enforced in the data layer, so a scoped viewer can't widen their own scope through a query string.

One binary on an air-gapped network

The HTML, CSS and hand-rolled SVG charts are compiled into the executable. No npm, no bundler, nothing fetched at runtime — which is what lets it send default-src 'self' and mean it, and what makes it work on a management network with no route out. Runs as a Windows service or under systemd, and exports Prometheus metrics.

bash
$ loadbearer-fleet serve \\fileserver\loadbearer   # scan, then the dashboard
$ loadbearer-fleet report                          # the same thing, as text
$ loadbearer-fleet report --json                    # the whole snapshot, as the UI sees it
$ loadbearer-fleet backup fleet-2026-09-10.db       # consistent, safe while serving
$ loadbearer-fleet forget PC-01                     # retire a decommissioned machine

The folder stays the source of truth and the index is derived, so rescanning is idempotent — every run is keyed by the SHA-256 of the document it came from. loadbearer-fleet reads the schema-tagged JSON rather than linking loadbearer as a library, which is why the two release independently.

Latest release — · Windows .zip and Linux .tar.gz · one binary, no runtime