How it works
What nodebench runs, with which settings, and how to change them.
System
CPU model, cores and clock, the AES-NI and VM-x flags, the virtualization type (from systemd-detect-virt with a few fallbacks), RAM, swap, disk size, distro, kernel and uptime. IPv4 and IPv6 connectivity is checked, and the provider name, ASN and country come from ipinfo.io.
CPU
openssl speed with sha256 and aes-256-gcm on 16 KiB blocks, once on a single thread and once with -multi on all cores. Each run takes 5 seconds.
It's not Geekbench, and that's on purpose: openssl is on nearly every server, the run is short, and the numbers are easy to compare. sha256 shows plain integer speed, aes-256-gcm shows how good the crypto extensions are. The ratio between the two thread counts tells you how well the cores scale, which on a busy shared host is often the most telling number.
During the run on all threads nodebench also reads the steal time from /proc/stat: the share of CPU time the hypervisor handed to other guests while yours wanted it. On a dedicated server or a well kept VPS it stays close to 0%. A few percent is normal on shared hosts, more than that means you're not getting the cores you see.
Disk
fio random read/write, 50/50 mix, with 4k, 64k, 512k and 1m blocks. iodepth 64, two jobs, O_DIRECT, 20 seconds per block size, on a 2 GB file in the current directory. These are the same parameters yabs uses, so results line up with what people already post.
4k is about IOPS, the small random access a database or a busy web server does. 1m is close to the raw throughput. If fio can't run at all, a sequential dd test is used instead and the result page says so.
The result also says what the test file sits on: the filesystem, and whether the device is NVMe, an SSD, a spinning disk or a virtual disk. Virtual disks always claim to be spinning, so nodebench doesn't guess what's behind them.
Network
iperf3 in both directions with 8 parallel streams for 10 seconds, plus ping and packet loss, against 12 public test servers (all 17 with -x). Over IPv4, and IPv6 as well if the server has it. When a server is busy, up to three random ports from its range are tried.
If iperf3 can't connect anywhere, nodebench measures plain HTTP downloads instead. A direction that didn't work shows up as failed, not as zero.
Skip what you don't need.
Pass options after bash -s --:
curl -sL bench.instantnode.eu | bash -s -- -n --no-share| -c | skip the cpu test |
| -s | skip the disk test |
| -n | skip the network test |
| -4, -6 | network tests over IPv4 or IPv6 only |
| -d DIR | directory for the disk test file (default: current dir) |
| -S SIZE | size of the disk test file, e.g. 512M (default: 2G) |
| -t N | threads for the multi-core cpu test (default: all cores) |
| -l REGIONS | only test these network regions, comma separated: eu, na, sa, asia, oc |
| -x | test against all 17 locations instead of the standard 12 |
| -q | quick run: shorter tests and a 512M disk file. Good for a first look, not ranked on the leaderboard |
| -L [NAME] | put the result on the leaderboard, optionally under a name of your choice |
| --no-share | don't upload the result |
| --json | print the result as json, the share link goes to stderr |
The test lengths can be shortened with NODEBENCH_FIO_TIME, NODEBENCH_IPERF_TIME and NODEBENCH_CPU_TIME (seconds). NODEBENCH_URL points the upload at your own server.
Leaderboard
Results only show up on the leaderboard if you ask for it with -L. Without a name the provider name is used, or pass one: -L "fra-edge-01". Names are up to 32 characters, no links.
curl -sL bench.instantnode.eu | bash -s -- -L "my box"Only the best run per name, CPU model and network is listed, so running it twenty times doesn't fill the page. Results with numbers no real hardware produces are kept as shareable links but never ranked.
Questions
Does it need root?
No. Everything runs as the user you start it as. The disk test needs write access to the directory it runs in, use -d to pick another one.
What does it leave behind?
Nothing. The fio and iperf3 builds go into a temp directory that is removed on exit, also when you press Ctrl+C. The disk test file is deleted as well.
Can I trust the downloaded binaries?
They are the static builds published by the yabs project, pinned to one release. If sha256sum is available, each binary is checked against the checksum file from that release and not run if it doesn't match. The script prefers fio and iperf3 from your system when they are installed.
How much traffic does it use?
Mostly the iperf3 tests: on a 1 Gbit/s port up to about 1.2 GB per location and direction, so around 30 GB for a standard run over IPv4, twice that with IPv6. -l eu keeps it to Europe, -q cuts the test time to 4 seconds. Use -n on metered connections, or shorten the runs with NODEBENCH_IPERF_TIME.
Why are my disk numbers so different from dd?
dd writes one big sequential file through the page cache. fio with O_DIRECT and random access at queue depth 64 shows what the storage does under real load, which is usually a lot less.
Can I get a result deleted?
Yes, see privacy.