Repository navigation
Troubleshooting and FAQ
Most YABS problems are environmental: no write permission, no free space, no IPv4, a firewall, or a busy public iperf server. The table below maps every message the script can print to what it means and what to do; the FAQs cover the questions that come up constantly on the forums.
Before debugging anything specific, run the two no-test modes:
bash yabs.sh -h # shows arch, parsed flags, detected binaries, connectivity — no tests
bash yabs.sh -f -i -g -n # system info only; ~5 seconds end to end-h answers half of all "why doesn't X work" questions by itself: it tells you whether fio/iperf3 will be local or downloaded, whether tar exists (Geekbench), and whether IPv4/IPv6 probes succeeded. Everything after that is section-specific — find your message in the table below.
Cheap checks that prevent the common failures:
-
pwd && touch .yabs_write_test && rm .yabs_write_test— is the directory writable? -
df -k .— ≥ 2 GiB free (x86) or ≥ 512 MiB (ARM/RISC-V)? -
command -v tar ping curl wget— tar for Geekbench, ping for the latency column, curl-or-wget for all downloads. -
curl -4 icanhazip.com— does outbound HTTP work at all? - Metered bandwidth? Decide now between
-rand-i, not after the bill. - ZFS pool?
df -h .against thespa_asize_inflation × 2 GBthreshold (usually 48 GB).
Strings are quoted exactly as yabs.sh prints them.
| Message | Meaning | What to do |
|---|---|---|
Warning: locale 'C' not detected. Test outputs may not be parsed correctly. |
The C locale isn't installed, so LC_ALL=C couldn't be set. Output parsing assumes . decimal separators — a system using , decimals may mangle numbers. |
Install the C locale (locale-gen C / glibc-langpack-en etc.), or just double-check odd-looking results manually. Non-fatal. |
RISC-V compatibility is considered *experimental* |
Informational — you ran on riscv64. |
Nothing; report bugs to the issue tracker (#97). |
Architecture not supported by YABS. |
uname -m isn't x86/ARM/RISC-V (e.g. ppc64le, s390x, mips). Fatal, exit 1. |
No workaround — the fio/iperf3 binaries only exist for the five supported arches. |
Warning: Both IPv4 AND IPv6 connectivity were not detected. Check for DNS issues... |
Neither the ping probe nor the HTTP fallback reached the internet. Tests continue, but all downloads and iperf will fail. | Check DNS (/etc/resolv.conf), egress firewall, and whether you're on a network that blocks ICMP and HTTP. |
You do not have write permission in this directory. Switch to an owned directory and re-run the script. |
The touch probe failed — $PWD isn't writable. Fatal, exit 1. |
cd somewhere you own (e.g. cd ~ or cd /tmp) and re-run. |
** Aborting YABS. Cleaning up files... |
You pressed Ctrl+C (after the working dir was created). | None — temp files were deleted. |
| Message | Meaning | What to do |
|---|---|---|
Less than 2GB of space available. Skipping disk test... |
df -k . shows < 2 GiB free on x86/x64 (the fio file is 2 GiB). |
Free space, or cd to a filesystem that has it. |
Less than 512MB of space available. Skipping disk test... |
Same on ARM/RISC-V (512 MiB file). | Same. |
Warning! You are running YABS on a ZFS Filesystem and your disk space is too low for the fio test. Your test results will be inaccurate. You need at least <N> GB free in order to complete this test accurately. For more information, please see https://github.com/masonr/yet-another-bench-script/issues/13 |
ZFS inflates inflight-write accounting by spa_asize_inflation (default 24); with < N GB free (N = inflation × 2 GB) fio writes get throttled hard and results can be up to 10× slow. #13
|
Free space on the dataset/pool until you're over the threshold, or treat the disk numbers as unreliable. The test still runs. |
Warning: Could not parse free space format for <mount>: '<value>' |
The ZFS check couldn't parse the Avail column for your mount. |
Harmless — the ZFS warning just can't be evaluated. Report if it recurs. |
Note: No relevant filesystem path detected for current directory (<PWD>). |
ZFS is loaded but no mountpoint in df -Th is a prefix of $PWD. |
Harmless; the ZFS check is skipped. |
Fio binary download failed. Running dd test as fallback.... |
The fio_$ARCH download produced an empty file (network block, release missing, TLS issue). |
The run continues with dd (sequential, cache-skewed — don't compare to fio numbers). Re-run later, install fio from your distro, or check that github.com is reachable. |
fio disk speed tests failed. Run manually to determine cause. + Running dd test as fallback...
|
fio executed but returned no parsable output (killed by the 35 s timeout, crashed, libaio unsupported in this environment). |
Run the printed fio command manually for the real error; dd results fill in meanwhile. |
Generating fio test file... / Running fio random mixed R+W disk test with <bs> block size...
|
Progress lines — they erase themselves when done. | Normal. |
Preparing system for disk tests... |
Ditto (fetches the binary, makes the workdir). | Normal. |
| Message | Meaning | What to do |
|---|---|---|
Performing <mode> iperf3 send test to <host> (Attempt #N of 3)... / ... recv test from <host> ...
|
Progress lines; up to 3 attempts per direction. | Normal — "Attempt #2/3" just means the first slot/speed was refused or blank. |
busy (in a result cell) |
That direction produced no usable result after its attempts: the public server had no free slot, refused, or returned 0.00. | It's about the far end, not your server. Re-run later or use -p with your own iperf3 server. If every cell is busy, suspect your outbound firewall (ports 5200–5210, 9204–9240). |
-- (Ping column) |
No ping binary, or the single echo failed/was filtered. |
Install ping (iputils) or accept --; ICMP filtering doesn't affect the throughput numbers. |
iperf3 binary download failed. Skipping iperf network tests... |
iperf3_$ARCH couldn't be fetched. |
Install iperf3 locally (it's preferred when present), check connectivity, or use -p later. |
Invalid server format: <entry> (expected format: host:port_range:name:location:network_modes) |
A -p entry didn't split into exactly 5 colon-separated fields — most often a comma inside the location (London, UK) splitting it into two entries. |
Remove commas and colons from fields; see Command-Line Flags. |
| Message | Meaning | What to do |
|---|---|---|
Running GB<N> benchmark test... *cue elevator music* |
Normal progress line. | Geekbench is the longest stage — minutes on slow CPUs. |
ARM/RISC-V architectures not supported by Geekbench 4, use Geekbench 5 or 6. |
-4 on non-x86. |
Use -5, -6, or -7. |
Geekbench <N> cannot run on 32-bit architectures. Re-run with -4 flag to use Geekbench 4, which can support 32-bit architectures. Skipping Geekbench <N>. |
Intended for -5/-6/-7 on 32-bit x86, but currently unreachable: the guard checks $GEEKBENCH_4 == *False* and that variable is only ever unset or True. On 32-bit with default flags GB6 is attempted and fails silently. |
Run with -4 on 32-bit hosts. |
Geekbench <N> cannot run on 32-bit architectures. Skipping test. |
Same, when -4 was also selected (advice would be circular). |
Use -4 alone. |
Geekbench <N> requires tar to extract the download, but tar was not found. + Install tar (e.g. 'dnf install tar' or 'apt install tar') and re-run. Skipping Geekbench <N>.
|
No tar and no local geekbenchN binary (minimal images). #99
|
Install tar. |
CentOS 7 and Geekbench have known issues relating to glibc (see issue #71 for details) |
GB6/7 need glibc ≥ 2.27; CentOS 7 has 2.17. #71 | Use -4/-5 or a newer distro. |
Geekbench releases can only be downloaded over IPv4. FTP the Geekbench files and run manually. |
Host has no IPv4; cdn.geekbench.com is IPv4-only. |
Copy the tarball over manually; a geekbenchN binary on PATH is reused automatically. |
Geekbench test failed and low memory was detected. Add at least 1GB of SWAP or use GB4 instead (higher compatibility with low memory systems). |
≤ 1 GiB RAM, version ≥ 5. | Add swap or use -4. |
Geekbench <N> test failed. Run manually to determine cause. |
Download or run failed for any other reason. | Download and run geekbenchN interactively — its error is self-explanatory. (On 32-bit x86 this generic line is silently skipped — a quirk; the 32-bit-specific messages cover the usual cases.) |
| Line | Notes |
|---|---|
fio Disk Speed Tests (Mixed R/W 50/50) (Partition <dev>): |
The <dev> is df -P .'s filesystem for your cwd — the partition actually tested. |
dd Sequential Disk Speed Tests: |
dd fallback ran — read the caveats in Tests: Disk before trusting numbers. |
iperf3 Network Speed Tests (IPv4): / (IPv6):
|
One table per detected stack. |
YABS completed in <X> min <Y> sec |
Wall-clock total including downloads and sleeps. |
When there's no explicit message, match the symptom:
| Symptom | Most likely cause | Check |
|---|---|---|
Every iperf cell says busy, both tables |
Outbound firewall blocking ports 5200–5210/9204–9240, or captive NAT |
iperf3 -c lon.speedtest.clouvider.net -p 5201 by hand; try -p with a known-good server |
| No disk section at all |
-f/-d passed, < free space, or write-permission exit earlier |
-h output; df -k .
|
dd Sequential table instead of fio |
fio download failed or fio produced no output | connectivity to github.com; run fio manually |
| No iperf section at all |
-i passed, or iperf3 binary download failed
|
-h local binary check |
| No Geekbench section |
-g, a skip message (32-bit/ARM GB4/tar/IPv4), or silent fail |
scroll up for the printed reason |
| Geekbench scores missing but URL present | upload OK but parsing failed (page not yet live, changed markup) | open the URL; JSON will show null
|
| No Network Information section |
-n passed, ip6.me/ip-api unreachable, or IPv6-only host |
curl http://ip6.me/api/ by hand |
IPv4/IPv6 : ❌ Offline lines |
probes failed (ICMP blocked AND icanhazip unreachable) | try curl -4 icanhazip.com
|
| Weird/garbled numbers everywhere | missing C locale (decimal commas) |
the startup locale warning; install C locale |
VM Type blank or UNKNOWN
|
systemd-detect-virt absent or can't decide |
install systemd utils or ignore |
| MHz looks absurdly low | idle downclocking — sample is instantaneous |
grep MHz /proc/cpuinfo while a test runs |
bash: illegal option -- l / flags do nothing when piping. You're running curl -sL yabs.sh | bash -flags — bash treats -flags as its own options (-l = login shell → "illegal option"). The correct form is curl -sL yabs.sh | bash -s -- -flags: -s reads the script from stdin, -- ends bash's option parsing, everything after becomes arguments to the script. (issue #110)
Why are the fio Read and Write numbers nearly identical? By construction — --rwmixread=50 issues equal reads and writes in one mixed run, and both are reported. An asymmetry is the interesting case (caches, throttling); see Interpreting Results.
Why does an iperf location say busy? The public server had no free test slot or refused — these are donated, shared resources. It says nothing about your server.
Why does CPU cores show such a low MHz? On x86 it's the instantaneous clock of one core at script start; idle servers sit at their lowest p-state (e.g. 800 MHz). It's not throttling evidence — see System Information.
Geekbench failed — what now? Walk the message table above: tar present? IPv4? glibc ≥ 2.27? > 1 GiB RAM (or add swap / -4)? If none apply, run geekbenchN manually for the real error.
How do I test a different disk/partition? cd into it and re-run with -ig — the test file is written under the current directory. See Tests: Disk.
How much bandwidth does a run use? Up to ~35 GB on a 1 Gbps port (both directions, 7 servers, IPv4+IPv6), scaling with port speed. Use -r or -i on metered plans. Arithmetic in Tests: Network.
Is it safe to curl | bash? It executes remote code as your user — the project is transparent about this (see the trust-model section in Precompiled Binaries). If you prefer: download the script, read it, then run the file. Functionally identical.
Can I run it on a NAT VPS? Yes — all tests work. Geolocation shows the shared egress IP, and iperf results reflect the NAT gateway's capacity as much as yours.
Why don't my results match what the provider advertised? Usually one of: shared/oversold resources (re-run at other hours), iperf server busy or far away, page-cache effects in dd fallback, or the ad described a different plan. A single run is a sample, not a verdict — see Benchmarks Are Snapshots.
Why doesn't YABS grade results good/bad? Deliberate design choice (Jan 2020): cutoffs would be arbitrary, age quickly, and be "essentially our opinion of what 'good' means". Compare against similar systems on the public result databases instead — see Ecosystem and Community.
Does it need root? No — that's a design requirement. Everything (binary downloads, Geekbench extraction, fio test files) happens in the directory you run from.
Why do my numbers differ between runs? Shared systems change minute to minute: host neighbours, burst credits, iperf server load, your own cache state. A single run is a sample, not a specification — see Benchmarks Are Snapshots. If two runs differ wildly, that's itself diagnostic information (usually host contention).
Can I run YABS twice in a row? Yes. The working directory is timestamped to the second and deleted on exit; nothing is left behind except geekbench_claim.url and your -w file. Note Geekbench uploads every run — repeated runs create repeated public results.
What does YABS leave on my system? Nothing installed, nothing in /tmp. In your run directory: geekbench_claim.url (if Geekbench ran) and any -w JSON file. That's the whole footprint.
The script printed warnings but kept going — is that ok? Usually yes. YABS is deliberately forgiving: a missing tool or a failed section degrades the report rather than killing the run. Read the warning against the message table to decide whether it matters for what you wanted to measure.
Where do I report a bug? The GitHub issue tracker. Include: the script version (banner line), your distro/arch (uname -a, /etc/os-release), the flags you ran, and the exact message or mis-parsed output. For portability bugs, a reproducer in a named Docker image gets the fastest response.
-
-pcan't take commas or colons inside fields — a location likeLondon, UK (10G)silently splits into malformed entries that each printInvalid server format:. UseLondon UK (10G). -
The
-6flag is order-sensitive —-6 -9does not give you GB6 (the later-9unsets it). Put-6last. -
On 32-bit x86 a Geekbench 5/6/7 attempt prints no message at all — the "Re-run with -4" guard is unreachable (see the table) and the generic failure message is skipped for
x86. The result is an empty Geekbench section. Use-4. - IPv6-only hosts get no Network Information section and no Geekbench — ip-api.com and cdn.geekbench.com are both IPv4-only; the script notes the latter explicitly.
-
README drift: the README says "busy after 5 tries" (code: 3), names stale servers for
-r, and its example output is from 2023. The code is authoritative.
A systematic last resort for "the run failed and nothing above matches":
- Re-run with maximum verbosity preserved — save the full output:
bash yabs.sh 2>&1 | tee yabs-out.txt(when running the file locally rather than piping). - Bisect with flags:
-fig(info only) → add tests back one at a time (-ig,-fg,-fi). The failing section is the one to focus on. - Reproduce the failing tool by hand: run fio with the exact flags from Tests: Disk, iperf3 against a listed server, or
geekbenchNdirectly — their own error messages are much better than YABS's summary. - Check the environment, not the script: free RAM (
free -h), disk (df -h), DNS (getent hosts github.com), time skew (date— TLS fails with a badly wrong clock). - Search the issue tracker — most portability bugs have already been hit by someone.
One thing not to do: reach for root to work around a write-permission error — the script doesn't need root; the error just means the directory isn't writable by your user, and cd to one that is (for example your home directory) is the correct fix.
-
Command-Line Flags —
-pformat,-6ordering,-hdry run - Tests: Disk (fio) / Tests: Network (iperf3) / Tests: CPU (Geekbench)
- Supported Platforms — environment quirks
- Interpreting Results — when numbers look wrong but nothing failed
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