Skip to content

Getting Started

Mason Rowe edited this page Oct 31, 2026 · 1 revision

Getting Started

In short

YABS (Yet-Another-Bench-Script) is a single bash script that benchmarks a Linux server's disk (fio), network (iperf3), and CPU (Geekbench), and prints a report you can share. It needs no root and no installed dependencies — the benchmark binaries are downloaded on the fly — so the whole thing is one paste-able command. A full run takes roughly 5–15 minutes and can use tens of gigabytes of traffic on fast connections.

What you need

Requirement Why
Linux with bash The script is bash; other shells are not supported. No *BSD or macOS.
curl or wget Used to download the fio/iperf3 binaries, the Geekbench tarball, and geolocation info. One of the two is enough.
Internet access (IPv4 preferred) Test binaries, Geekbench, and the iperf3 servers are all remote. Geekbench's CDN is IPv4-only, so an IPv6-only host cannot run the CPU test.
Write permission in the current directory YABS creates a working directory and test files next to where you run it, and refuses to start if it cannot write.
Free disk space At least ~2 GiB on x86 (x64/x86), ~512 MiB on ARM and RISC-V — the fio test file is that size. If less is free, the disk test is skipped automatically.
Root Not required. Everything runs as your normal user.

Also useful but optional: ping (for the latency column), tar (required for Geekbench unless a local geekbench binary exists — missing on some minimal images like AlmaLinux 9 minimal), lscpu (better CPU detection on ARM/RISC-V), and locally installed fio/iperf3/geekbenchN packages, which YABS will prefer over downloads.

Running it

The canonical one-liner:

curl -sL yabs.sh | bash

or with wget:

wget -qO- yabs.sh | bash

To pass flags when piping, use bash -s --:

curl -sL yabs.sh | bash -s -- -fg -j

If you (understandably) don't want to pipe a remote script straight into bash:

curl -sL yabs.sh -o yabs.sh   # or: wget -qO yabs.sh yabs.sh
less yabs.sh                  # read it first
bash yabs.sh -fg -j           # then run it

yabs.sh (the domain) redirects curl/wget user agents to the raw script on GitHub; browsers get the repository page instead.

A gentler first run

If you'd rather watch it work before committing ~10 minutes: bash yabs.sh -h shows what would run (arch, detected binaries, connectivity) and exits in a second; bash yabs.sh -fig prints system info only. Both are covered in Command-Line Flags.

What happens during a run

sequenceDiagram
    participant U as You (terminal)
    participant S as yabs.sh
    participant R as GitHub Releases
    participant I as iperf3 servers
    participant G as cdn.geekbench.com / Geekbench
    U->>S: curl -sL yabs.sh | bash
    S->>U: banner, date, arch detection
    S->>U: Basic System Information
    S->>U: Network Information (ISP/ASN/location)
    S->>R: fetch latest fio/iperf3 release tag + binaries
    S->>U: fio Disk Speed Tests (4 block sizes)
    S->>I: send + receive tests, 7 locations, IPv4 then IPv6
    S->>U: iperf3 Network Speed Tests table(s)
    S->>G: download tarball, run geekbench --upload
    S->>U: Geekbench scores + result URL
    S->>S: rm -rf temp dir
    S->>U: "YABS completed in X min Y sec" (+ JSON if -j/-w/-s)
Loading

A few things to know while it runs:

  • Progress lines overwrite themselves. Messages like Running fio random mixed R+W disk test with 4k block size... are erased (\r + clear-line) once the step finishes — this is normal, not a display bug.
  • Sections print only when they finish. fio prints after all four block sizes run; each iperf table row prints as its location completes; Geekbench prints at the very end.
  • Ctrl+C is safe. The script traps SIGINT, prints ** Aborting YABS. Cleaning up files..., deletes its working directory, and exits.

Time and bandwidth

  • Runtime: roughly 5–15 minutes for a full run. The disk test is capped near 2.5 minutes (4 block sizes × ~30 s each plus setup), each iperf location is ~20 s (10 s in each direction), and Geekbench is the variable — a couple of minutes on fast CPUs, much longer on slow or contended ones.
  • Bandwidth: each iperf location sends and receives ~10 s of line-rate traffic on each IP version. On a 1 Gbps port a full run can move up to ~35 GB; on faster ports it scales up proportionally. If you are on a metered or capped plan, use -r (three locations instead of seven) or -i (skip network tests entirely). See Tests: Network (iperf3) for the arithmetic.
  • Disk wear: the fio test writes a 2 GiB (or 512 MiB) file and does mixed random I/O against it — a trivial amount of write wear for any SSD.

Where files go

Everything YABS downloads or creates while testing lives in a timestamped directory in your current directory:

./2026-10-31T02_13_22-04_00/
├── disk/            # fio binary + test.fio
├── iperf/           # iperf3 binary
└── geekbench_6/     # Geekbench tarball contents

The directory is deleted (rm -rf) at the end of a successful run and also when you abort with Ctrl+C.

Two things can be left behind intentionally:

  • geekbench_claim.url — accumulates the Geekbench "claim this result" URL from each run so you can attach results to a Geekbench account.
  • The -w <file> JSON output file, if you asked for one.

A ./geekbench.license file, if you create one, is an input — see Command-Line Flags.

Windows, containers, and other environments

  • Windows: run it inside WSL2. WSL1 does not work.
  • LXC/OpenVZ/Docker: runs fine, but remember you are benchmarking the host's resources through the container — VM Type will say LXC/OPENVZ, and disk/network results reflect the shared host.
  • RISC-V: supported experimentally (riscv64); expect a printed notice and some fallbacks in system information. See Supported Platforms.

See also

Clone this wiki locally