Command Palette

Search for a command to run...

GitHubRun the benchmark

Cloud provider benchmarks

2 providers · 70 independent hosts · updated 24 Jul 2026

Reproduce any number: providerbench run

CPU all-core vs. monthly price
4 / 4 plans

Cross-host P50 against the net monthly price (EUR, excluding VAT — tax depends on the buyer, not the provider). Ringed dots sit on the efficient frontier: no cheaper measured plan is faster on this metric. Points are deliberately never connected.

View
CPU all-core versus monthly price. Lower prices and higher values are better. Points are not connected.0501001502002,0002,5003,0003,5004,000Monthly price (EUR net of VAT, linear scale)CPU all-core (MB/s)Hetzner cx23 · NBG1Hetzner ccx13 · NBG1Hetzner cpx22 · HEL1Vercel 2 vCPU / 4 GB · IAD1
Ringed dots are on the efficient frontier for this metric.Faded points need 10 independent fresh hosts before ranking.

P50 is the headline

The median across fresh hosts, never a cherry-picked VM.

P90 / P99 stay visible

Tail behavior is shown beside the mean and median.

10 hosts to rank

Smaller campaigns remain visible, faded, and provisional.

Best measured configuration per provider

selected by composite P50 · best region median, not best single host

CPU · single core

Cross-host P50 · MB/s · higher is better · whiskers span P10–P90

What this measures

SHA-256 over 64 KiB buffers on one core for 3 s. Cache-resident and deterministic; uses the CPU's crypto extensions where present. source →

providerbench run -t cpu
CPU · all cores

Cross-host P50 · MB/s · higher is better · whiskers span P10–P90

What this measures

The same SHA-256 workload running on every core simultaneously for 3 s — what the machine sustains when you actually use all the vCPUs you pay for. source →

providerbench run -t cpu
Disk · random 4K read

Cross-host P50 · IOPS · higher is better · whiskers span P10–P90

What this measures

Random 4 KiB direct-I/O reads at queue depth 4 for 2 s across the 1 GiB file — the access pattern of databases and busy filesystems. source →

providerbench run -t disk
Network · download

Cross-host P50 · Mbps · higher is better · whiskers span P10–P90

What this measures

Sequential 50 MiB downloads from speed.cloudflare.com for up to 10 s (200 MiB max), counted at the socket. source →

providerbench run -t network
CPU steal time

Cross-host P50 · % · lower is better · whiskers span P10–P90

Above ~2% sustained is an oversold host. Linux only.

What this measures

Steal ticks from /proc/stat while all cores are saturated for 5 s — the kernel's own record of CPU time the hypervisor gave to other tenants. source →

providerbench run -t steal
Disk · fsync latency (p50)

Cross-host P50 · ms · lower is better · whiskers span P10–P90

Suspiciously low values can mean the storage acknowledges before data is durable.

What this measures

Median of 50 rounds of a 4 KiB write followed by fsync — the durability path every database commit waits on. source →

providerbench run -t disk

All 17 compute metrics →

Every measured plan

One row per plan using its strongest independently sampled region. Provider pages keep the full location breakdown.

Provider / plan€/moPerf.indexValueindexCPU 1-coreMB/sCPU all-coreMB/sMem BWGB/sSeq writeMB/s4K readIOPSfsync p50msDownloadMbpsConsistencyCV %Steal%
Hetznercloud-vps · cx23 · cheap · nbg1 · 2 vCPU10 independent hosts · 30 runsmeasured 24 Jul 2026 UTC5.990.0096/h68.9100.01,374μ993 · p10 2503,027μ2,060 · p10 48612.2μ9.8 · p10 3.01,177μ1,203 · p10 85315,679μ16,158 · p10 12,9141.03μ1.00 · p90 1.31 · p99 1.342,036μ2,019 · p10 1,80915.8μ13.9 · p90 24.7 · p99 29.70.00bestμ0.00 · p90 0.00 · p99 0.00
Hetznercloud-vps · ccx13 · nbg1 · 2 dedicated vCPU10 independent hosts · 30 runsmeasured 24 Jul 2026 UTC43.490.0697/h89.217.81,788bestμ1,785 · p10 1,7793,460μ3,388 · p10 3,37424.5bestμ24.4 · p10 23.51,241μ1,230 · p10 1,19423,928μ24,489 · p10 21,5370.62μ0.54 · p90 0.71 · p99 0.722,174bestμ2,086 · p10 1,70111.2μ11.2 · p90 11.5 · p99 12.50.00bestμ0.00 · p90 0.00 · p99 0.00
Hetznercloud-vps · cpx22 · medium · hel1 · 2 vCPU10 independent hosts · 30 runsmeasured 24 Jul 2026 UTC19.990.0320/h88.138.31,756μ1,734 · p10 1,6743,560bestμ3,531 · p10 3,51923.8μ23.6 · p10 22.51,240μ1,236 · p10 1,07225,464μ25,232 · p10 21,6610.73μ0.79 · p90 1.18 · p99 1.232,091μ1,967 · p10 1,59513.6μ14.1 · p90 17.5 · p99 19.50.00bestμ0.00 · p90 0.00 · p99 0.00
VercelSandbox · 2 vCPU / 4 GB · usage-based · iad1 · 2 vCPU10 independent hosts · 30 runsmeasured 24 Jul 2026 UTC218.380.2992/h100.04.01,314μ933 · p10 3522,637μ1,874 · p10 7086.7μ5.5 · p10 3.51,607bestμ1,514 · p10 1,31269,839bestμ62,647 · p10 47,3770.04bestμ0.04 · p90 0.05 · p99 0.061,882μ1,946 · p10 1,6523.0bestμ3.4 · p90 5.3 · p99 6.40.60μ0.53 · p90 0.61 · p99 0.69

Every value links back to a raw JSON report in data/results/, including full system info for verification.

go install github.com/niklas-schmidt-dev/providerbench/cmd/providerbench@latest