How to Benchmark Your VPS (And What the Numbers Actually Mean)
Running a VPS benchmark takes one command and ten minutes. Understanding what the numbers mean takes longer, because the benchmark tools don't tell you whether your results are good, bad, or normal for what you're paying. A Geekbench single-core score of 912 — is that acceptable or a sign you're on decade-old hardware? An IOPS reading of 1,300 on an "NVMe" plan — normal or throttled? 15% CPU steal — expected on a shared VPS or evidence of overselling? This guide covers both halves: how to run the test, and how to read the results with budget VPS context that the benchmark output doesn't provide.
curl -sL yabs.sh | bash — run this on any Linux VPS (no root required). It tests CPU, disk, and network in 10-30 minutes. Then come back here to interpret the results.
Running YABS (the one-command benchmark)
YABS (Yet-Another-Bench-Script) is the standard VPS benchmarking tool used across LowEndTalk, LowEndBox, and VPSBenchmarks.com. One command, no root required, no dependencies to install:
curl -sL yabs.sh | bash
YABS runs three test suites:
- Geekbench 6 — CPU performance (single-core and multi-core). Takes the longest, roughly 5-15 minutes.
- fio — Disk I/O performance. Tests sequential and random read/write at various block sizes. The 4K random results are the ones that matter most for real workloads.
- iperf3 — Network speed to multiple test servers worldwide. Measures your port's actual throughput, not the advertised speed.
For the best results: run YABS on an idle server. If you're running a database, web server, or other processes during the test, your results will be lower than the hardware's actual capability. Late-night or early-morning runs tend to produce the cleanest numbers, especially on shared VPS where other tenants' workloads affect your performance.
To upload your results to VPSBenchmarks.com for public comparison:
curl -sL yabs.sh | bash -s -- -s https://www.vpsbenchmarks.com/yabs/upload
YABS runs safely on your VPS — it doesn't modify your system, doesn't require root, and cleans up after itself. The only cost is CPU and I/O load during the test, which can slow down any services you're running. Schedule it during a low-traffic window.
CPU: Geekbench 6 scores in context
Geekbench 6 produces two numbers: single-core and multi-core. On budget VPS with 1-4 vCPUs, single-core is the number that matters. Most server workloads — web serving, database queries, SSL termination, PHP execution — are either single-threaded or benefit more from per-core speed than from having many slow cores.
| GB6 Single-Core | What it means | Budget VPS examples |
|---|---|---|
| Below 700 | Old hardware or hard-capped allocation. Anything interactive feels sluggish. | Xeon E5 v2 era (2013-2014), aggressively limited plans |
| 700 – 1,000 | Functional. Static sites, DNS, VPN, dev work fine. Dynamic PHP/Python starts dragging. | Contabo shared (~900), RackNerd (~800-1,000), DartNode standard Xeon E5 (~912) |
| 1,000 – 1,300 | Comfortable middle. WordPress, small databases, CI runners all run without complaint. | Hetzner CX (~1,100), Netcup RS dedicated (~1,200), BuyVM (~900-1,100) |
| Above 1,300 | Premium / dedicated-core territory. Diminishing returns for most workloads — justified for compute-heavy or latency-sensitive applications. | HostHatch EPYC (~1,300), SpeedyPage Ryzen 9950X (~2,500) |
Multi-core scores matter when your workload parallelizes: video transcoding, multi-threaded compiling, running multiple independent services on one VPS. But most budget VPS plans give you 1-2 vCPUs, so multi-core score is often just "single-core times the number of cores" — not a separate buying signal.
CPU steal: the metric the spec sheet hides
Open top or htop on your VPS and look for %st (steal). This single number tells you more about your VPS's real performance than the entire spec sheet.
CPU steal is the percentage of time your vCPU was ready to execute instructions but couldn't, because the physical CPU was busy serving another tenant. On a non-oversold host, steal stays near zero. On an oversold node, steal means the "4 vCPU" you're paying for delivers the equivalent of 2-3 vCPUs of actual compute.
- 0-2% steal: Healthy. The node is properly provisioned. You're getting what you paid for.
- 3-5% steal: Moderate. Some contention, especially during peak hours. Your workload is affected but probably not noticeably for web serving.
- 5-15% steal: Oversold. You're losing a measurable fraction of your CPU allocation to other tenants. Database queries slow down, page loads increase, cron jobs take longer. This is where you feel it.
- 15%+ steal: Severely oversold. You're paying for CPUs you're not getting. Time to open a ticket or change providers. Contabo nodes have been documented at 20-50% steal on older shared plans.
The critical insight: steal is invisible to YABS. Geekbench runs a CPU-intensive workload and reports the score, but it can't distinguish between a slow CPU and a fast CPU that's being shared. A Geekbench score of 900 on a provider with 0% steal means slow hardware. A Geekbench score of 900 on a provider with 20% steal means the hardware is capable of ~1,125 but you're only getting 80% of it. Same score, completely different problems, completely different solutions.
To check steal: SSH into your VPS, run top, and watch the %st value for 2-3 minutes. Don't just check once — steal fluctuates throughout the day as other tenants' workloads peak and dip. Check during business hours (when contention is highest) for the most realistic reading.
Providers that explicitly don't oversell — BuyVM and DartNode VDS Slices — should show 0% steal consistently. If you're seeing steal on a "dedicated core" plan, something is wrong and you should contact support.
Disk I/O: why "NVMe" doesn't mean fast
YABS tests disk performance at multiple block sizes. The two numbers that matter most for real workloads:
- 4K random read/write: This simulates database queries, log writes, and general filesystem operations — the most common I/O pattern on a server. Measured in IOPS (operations per second).
- 1M sequential read/write: This simulates large file transfers, backup operations, and media streaming. Measured in MB/s or GB/s.
| 4K Random IOPS | What it means | Where you'll see this |
|---|---|---|
| Below 2,000 | HDD or severe throttling. Databases crawl, WordPress stalls on disk before CPU or RAM matter. | Contabo old SSD line (~1,300 — hypervisor cap), actual HDD plans |
| 2,000 – 10,000 | Typical SSD or throttled NVMe. Functional, but database-heavy apps hit the ceiling during peaks. | Most standard SSD-backed budget VPS |
| 10,000 – 50,000 | Healthy NVMe. Comfortable for any standard server workload. | DartNode VPS-3 (25,000+), Netcup RS (15,000+), Hetzner CX (20,000+) |
| Above 50,000 | Unthrottled NVMe — the hardware is giving you everything it has. | HostHatch NVMe (30,000+), SpeedyPage (30,000+) |
The trap to watch for: Contabo brands its storage as "NVMe" but throttles IOPS at the hypervisor level. Community benchmarks consistently show Contabo NVMe plans at roughly 1,300 IOPS for 4K random operations — which is what a mediocre SSD delivers. The physical drive is NVMe; the performance you get is not. This is why benchmarking matters more than reading the spec sheet: "NVMe" on the product page doesn't guarantee NVMe performance on the disk.
Sequential speeds (1M block) are less commonly the bottleneck but still worth checking. Unthrottled NVMe should deliver 1,500+ MB/s sequential read and 500+ MB/s write. If you're seeing 200-400 MB/s on a plan labeled NVMe, the drive is being throttled.
Network: bandwidth vs latency
YABS tests network throughput using iperf3 to multiple global endpoints. The results tell you two things: your port's actual speed (does the advertised 1 Gbps deliver?) and your connectivity quality (how fast is the route to different regions?).
- Port speed: If your VPS advertises a 1 Gbps port, your iperf3 results to nearby servers should approach 900-960 Mbps. Seeing 500 Mbps or less on a 1 Gbps plan means either the port is oversold, the route is congested, or the provider is throttling. DartNode consistently tests at 950+ Mbps to domestic endpoints — the unmetered bandwidth claim holds up.
- Geographic reach: Speed to nearby servers (same country/region) is always higher than speed to distant ones. A US VPS testing 900 Mbps to NYC but 200 Mbps to Singapore is normal — that's physics (routing hops and cross-ocean latency), not throttling.
YABS doesn't directly test latency (ping). For latency testing, use ping or mtr to your target destinations:
mtr --report google.com
Latency expectations: under 5ms to same-datacenter targets, 10-30ms within the same continent, 80-150ms cross-ocean (US to Europe), 150-250ms US to Asia. If your latency is 2-3x these baselines, check whether your provider's network has peering issues or if you're routing through congested transit providers.
Budget VPS benchmark reference chart
Real-world benchmark scores from VPSBenchmarks.com and community YABS results, to give you a comparison baseline when reading your own results:
| Provider / Plan | GB6 Single | GB6 Multi | 4K IOPS | Network | CPU steal |
|---|---|---|---|---|---|
| SpeedyPage (Ryzen 9950X) | ~2,500 | ~4,800 | 30,000+ | 1 Gbps | Low |
| HostHatch NVMe 32GB (EPYC) | ~1,300 | ~2,600 | 30,000+ | 1 Gbps | Low-moderate |
| Netcup RS (dedicated) | ~1,200 | ~4,800 | 15,000+ | 2.5 Gbps | ~0% (dedicated) |
| DartNode VPS-3 (Xeon E5) | ~912 | ~1,639 | 25,000+ | 959 Mbps | Varies |
| BuyVM Slice (Intel) | ~900-1,100 | ~1,800 | 10,000+ | 1 Gbps unmetered | ~0% (no oversell) |
| RackNerd (varies) | ~800-1,000 | ~1,600 | 10,000-20,000 | 1 Gbps (metered) | Variable |
| Contabo Cloud VPS (shared) | ~900 | ~3,000 | ~1,300 | 400 Mbps (200 out) | 20-50% |
| Hetzner CX (shared) | ~1,100 | ~2,200 | 20,000+ | 1 Gbps | Low |
Scores are representative ranges from public benchmarks, not guaranteed values. Your results will vary based on the specific node, time of day, and current load. Contabo's 4K IOPS of ~1,300 on "NVMe" plans is the standout outlier — it's a hypervisor-level throttle, not a hardware limitation. Hetzner is included for context as the nearest non-budget alternative.
FAQ
What is YABS?
Yet-Another-Bench-Script — a one-command VPS benchmark that tests CPU (Geekbench 6), disk (fio), and network (iperf3). Run with curl -sL yabs.sh | bash, no root needed. Takes 10-30 minutes. It's the standard on LowEndTalk and VPSBenchmarks.com for comparing VPS performance.
What is a good Geekbench 6 score for a VPS?
Budget VPS context: below 700 is old/throttled, 700-1,000 is functional (Xeon E5 era), 1,000-1,300 is good (EPYC/newer Xeon), 1,300+ is excellent (EPYC 7R13, Ryzen). Single-core matters more than multi-core on 1-4 vCPU plans because most server workloads are single-threaded or lightly threaded.
What is CPU steal?
The percentage of time your vCPU couldn't execute because the physical CPU was serving another tenant (%st in top/htop). Below 2% is healthy. 5-15% means oversold. 15%+ means you're paying for CPUs you're not getting. Steal is invisible to YABS — you have to check it separately with top/htop during peak hours.
What IOPS should my VPS have?
For 4K random (the metric that matters): 50,000+ is unthrottled NVMe, 10,000-50,000 is good SSD/NVMe, 2,000-10,000 is typical SSD, below 2,000 is throttled or HDD. Contabo's "NVMe" delivers ~1,300 IOPS due to throttling — the label doesn't match the performance. Benchmark to verify.