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



Leave a Reply
You must be logged in to post a comment.