Repository navigation
Getting Started
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.
| 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.
The canonical one-liner:
curl -sL yabs.sh | bashor with wget:
wget -qO- yabs.sh | bashTo pass flags when piping, use bash -s --:
curl -sL yabs.sh | bash -s -- -fg -jIf 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 ityabs.sh (the domain) redirects curl/wget user agents to the raw script on GitHub; browsers get the repository page instead.
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.
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)
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.
- 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.
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: 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.
-
Command-Line Flags — every
-flagand what it does - Understanding the Output — line-by-line walkthrough of a report
- Interpreting Results — what the numbers mean
- Troubleshooting and FAQ — messages, errors, and common questions
- Supported Platforms — architectures and environments
Repository · Issues · Binary releases · Usage stats · curl -sL yabs.sh | bash · Licensed under the WTFPL
Using YABS
- Getting Started
- Command-Line Flags
- Understanding the Output
- Interpreting Results
- Benchmarks Are Snapshots
- JSON Output and Integrations
The tests
Internals
Help and project
Background