VPS Provider Benchmarks 2026: A Methodology That Exposes Noisy Neighbours

Provider benchmark posts usually publish a single lucky number and call it a review. That is useless, because the thing that actually ruins a VPS is variance — a box that hits 4000 IOPS and then 90 IOPS five minutes later is worse than one that steadily delivers 1200. This guide gives you a measurement harness that quantifies the variance, so a benchmark tells you about the host’s behaviour, not about the one happy window it was measured in.

Run it against any VPS you are evaluating before committing production traffic, and re-run it on the same instance at different hours. The same harness applies to the comparison mindset laid out on the site’s benchmarking resources.

Why single-shot benchmarks lie

On a shared host, your vCPUs are time-sliced against other tenants. A single sysbench run of 30 seconds may land entirely in a quiet window or entirely in a contention storm. The metric that separates a good host from a bad one is the distribution across many samples, and specifically the tail — p99 and worst-case, not mean.

Harness 1: Repeated disk latency with percentiles

fio --name=lat --ioengine=libaio --rw=randread --bs=4k \
    --iodepth=1 --direct=1 --runtime=10 --time_based=0 \
    --loops=20 --group_reporting \
    --percentile_list=50:95:99:99.9 \
    --output-format=json > /tmp/fio.json

jq '.jobs[0].read.clat_ns.percentile' /tmp/fio.json

Queue-depth-1 random reads isolate single-stream latency from queueing effects. On a well-behaved NVMe-backed instance you should see a tight distribution — p50 and p99 within roughly 2-3x of each other. A p99 that is 20x the p50 means noisy neighbours or a heavily overcommitted storage backend. This is the single most diagnostic test you can run.

Harness 2: Sampling CPU steal over time

for i in $(seq 1 60); do
  awk '/^cpu /{t=$2+$3+$4+$5+$6+$7+$8; idle=$5; steal=$9; printf "%s cpu_steal=%.2f%%\n", systime(), steal*100/t}' /proc/stat
  sleep 5
done

Steal time is the percentage of time your vCPU was ready to run but the host scheduled someone else. Under 1% sustained is healthy; spikes above 5% mean the host is oversubscribed. Five minutes of sampling every five seconds across a full hour gives you a picture a one-liner cannot. Correlate spikes with wall-clock time — if steal climbs every evening, the host shares a physical machine with daytime-fatigued tenants.

Harness 3: Memory bandwidth stability

for i in $(seq 1 10); do
  sysbench memory --memory-block-size=1M --memory-total-size=5G --threads=2 run \
    | grep -E 'transferred|MiB/sec'
ddone

Memory bandwidth on a shared host is affected by NUMA placement and memory ballooning. Consistent numbers across ten runs mean your pages are resident and stable. If bandwidth degrades within a session, the host is reclaiming or migrating your memory — a strong signal of oversubscription.

Harness 4: Network throughput to multiple endpoints

for peer in iperf.he.net speedtest.ams1.nl; do
  for run in 1 2 3; do
    iperf3 -c "$peer" -t 15 -O 3 -P 4 2>/dev/null | grep receiver
done; done

Related Articles:

Leave a Reply