Skip to content
Back to Blog
Performance10 min read

NVMe VPS Hosting: 6 Providers with Real IOPS Tests

Benchmark results from fio and database write tests on six NVMe VPS providers, showing which plans deliver advertised disk performance and which don't.

Written by Abdul AbrorTechnical Hosting Support Engineer
NVMe VPS Hosting: 6 Providers with Real IOPS Tests
On this page

Why IOPS matter more than disk type

Most VPS providers now advertise NVMe storage, but the label alone tells you nothing about real-world performance. I've seen NVMe plans that barely outperform old SATA SSDs because the host node is oversubscribed or the storage controller is throttled. What matters for WordPress installs, database servers, and anything that writes logs is sustained random I/O—the metric marketing pages never quote.

This round of tests looked at six providers offering NVMe-backed VPS plans in the $10–25/month range. I ran identical workloads on each: fio for raw disk metrics and a PostgreSQL write-heavy benchmark to simulate real application load. The goal was simple: which plans deliver the IOPS you're paying for, and which choke under load?

The test environment

Each VPS was a fresh Ubuntu 22.04 install with 4 GB RAM and 2 vCPUs. No control panel, no extra services—just the OS and test tools. I let each machine idle for an hour after boot to settle any first-run tasks, then ran three passes of each benchmark and averaged the results.

fio configuration

The fio test measured random 4K read/write performance, the pattern that matters most for databases and busy web apps. Here's the command I used:

fio --name=randwrite --ioengine=libaio --iodepth=32 \
  --rw=randwrite --bs=4k --direct=1 --size=2G \
  --numjobs=4 --runtime=60 --group_reporting

This runs four parallel jobs, each writing 4K blocks randomly for 60 seconds with a queue depth of 32. The --direct=1 flag bypasses the page cache so you're measuring storage, not RAM.

For reads, I swapped --rw=randwrite to --rw=randread and ran the same pattern.

Database write test

After fio, I installed PostgreSQL 15 and ran pgbench with a custom scale and transaction count:

pgbench -i -s 50 testdb
pgbench -c 10 -j 4 -T 60 testdb

This initializes a 50-scale database (roughly 750 MB) and then hammers it with 10 concurrent clients for 60 seconds. Transactions per second (TPS) is the number that matters here—it reflects how fast the database can commit writes to disk.

Provider 1: Vultr High Frequency

Vultr's High Frequency line uses NVMe and promises "the latest generation Intel CPUs." The $12/month plan gave me 2 vCPUs, 4 GB RAM, and 128 GB NVMe.

Benchmark results

Random write IOPS averaged around 45,000, and random reads hit 90,000. Both numbers stayed consistent across all three test runs with minimal variance. The pgbench test returned 1,850 TPS, which is solid for a shared VPS in this price range.

Disk latency stayed below 1 ms for writes and sub-500 microseconds for reads. No throttling, no sudden drop-offs. The node wasn't oversold.

Real-world note

I've deployed WordPress Multisites on Vultr High Frequency boxes before, and disk I/O has never been the bottleneck. The consistency matters more than peak numbers—when you're handling 200 concurrent users hitting wp-admin, you need predictable write latency.

Provider 2: Linode (now Akamai)

Linode's standard plans all include NVMe as of their infrastructure refresh a couple years back. The $12/month Linode 4GB comes with 80 GB of storage.

Benchmark results

Random writes clocked in at 38,000 IOPS, reads at 75,000. Lower than Vultr but still plenty fast for most workloads. The pgbench score was 1,620 TPS.

One thing I noticed: write latency had occasional spikes to 3–4 ms during the fio test, though they were rare. Average latency was still under 1 ms. This suggests the host node might have been handling a noisy neighbor during that window, but it didn't impact the database benchmark.

Real-world note

Linode's disk performance is more than adequate for typical LAMP stacks and small to mid-size databases. If you're running write-heavy analytics or log aggregation, you might see occasional pauses, but for web hosting it's a non-issue.

Provider 3: DigitalOcean Droplets

DigitalOcean's standard Droplets moved to NVMe a while ago. The $12/month Basic Droplet gives you 2 vCPUs, 2 GB RAM, and 50 GB NVMe—less RAM and storage than the others in this test, but same CPU allocation.

Benchmark results

Random write IOPS came in at 25,000, reads at 50,000. That's roughly half of Vultr's numbers. The pgbench result was 1,150 TPS, noticeably lower.

Write latency was consistently higher, hovering around 1.5 ms with occasional jumps to 5 ms. It felt like the storage was either shared more aggressively or the I/O scheduler was tuned conservatively.

Real-world note

For static sites and low-traffic apps, DigitalOcean Droplets are fine. But if you're running WooCommerce with a few hundred products and active sessions, you'll feel the disk lag during checkout and admin-ajax requests. I've seen support tickets where moving a site from DO to Vultr cut page generation time by 30% purely because of disk I/O.

Provider 4: Hetzner Cloud

Hetzner's CX31 plan is €9.05/month (roughly $10 USD) and includes 2 vCPUs, 8 GB RAM, and 80 GB NVMe. More RAM for less money, which is Hetzner's typical value play.

Benchmark results

Random writes hit 60,000 IOPS, the highest in this test. Reads topped out at 110,000. The pgbench score was 2,100 TPS, also the best.

Latency was rock-solid: writes averaged 0.7 ms, reads under 400 microseconds. No spikes, no variance. Whatever Hetzner is doing with their storage backend, it works.

Real-world note

I've moved several MySQL replicas to Hetzner Cloud and watched replication lag drop to near-zero. The extra RAM doesn't hurt either—you can fit more of your working set in buffer pools. If you can tolerate EU-only data center locations (or if that's actually a benefit for your GDPR setup), Hetzner is hard to beat on pure performance per dollar.

Provider 5: OVHcloud VPS

OVHcloud's VPS lineup includes NVMe on the "VPS Value" tier and up. The plan I tested was roughly €12/month for 2 vCPUs, 4 GB RAM, and 80 GB NVMe.

Benchmark results

Random writes measured 18,000 IOPS, reads 40,000. The pgbench result was 980 TPS. Both numbers are low compared to the other providers.

Write latency was erratic, ranging from 1 ms to over 10 ms with no clear pattern. It felt like the host was under heavy contention or the RAID array was rebuilding—hard to say without seeing OVH's infrastructure.

Real-world note

I've had mixed experiences with OVHcloud VPS plans. Some nodes are fine, others feel sluggish. If you land on a bad node, disk I/O will bottleneck everything. Their support can move you to a different host if you open a ticket, but it's a gamble.

Provider 6: Contabo VPS

Contabo advertises "NVMe or SSD" depending on availability, which is already a red flag. The plan I tested was labeled NVMe and cost €8.99/month for 4 vCPUs, 12 GB RAM, and 300 GB storage. Those specs look absurd for the price.

Benchmark results

Random writes barely broke 8,000 IOPS, reads hit 20,000. The pgbench score was 450 TPS, the lowest by far.

Write latency was all over the place, frequently spiking above 20 ms. The fio test occasionally paused entirely for a second or two, suggesting aggressive I/O throttling or severe oversubscription.

Real-world note

Contabo's value proposition is raw specs for cheap. If your workload is CPU-bound and doesn't touch disk much—video transcoding, rendering, some types of batch processing—it might work. For anything involving databases, logs, or file I/O, you'll regret it. I've migrated multiple clients off Contabo because their WordPress admin panels were unusable during peak traffic.

So which provider is actually worth it?

If you need consistent performance and can't afford surprises, Hetzner and Vultr are the clear winners. Hetzner edges ahead on raw IOPS and price, but Vultr's global footprint and simpler billing might matter more depending on where your users are.

Linode is a solid middle ground—good enough for most hosting workloads, with excellent documentation and a stable platform.

DigitalOcean is fine for development and staging environments, but the lower IOPS will bite you on production sites with any real traffic.

OVHcloud and Contabo are gambles. You might get a fast node, or you might end up spending hours troubleshooting slow queries that turn out to be disk-bound. For production hosting, the time you'll waste isn't worth the few euros you save.

What to test on your own VPS

Benchmarks from someone else's test run can guide you, but every node is different. When you spin up a new VPS, run a quick fio check before you move anything into production:

apt update && apt install -y fio
fio --name=test --ioengine=libaio --iodepth=16 \
  --rw=randwrite --bs=4k --direct=1 --size=1G \
  --numjobs=1 --runtime=30

Look at the IOPS number and the latency percentiles (especially lat (msec) at the 99th percentile). If writes are consistently above 2 ms or you see frequent 10+ ms spikes, you're probably on an oversold node. Open a ticket and ask to be moved, or provision a new instance and compare.

For database-heavy sites, install your actual database and run a write test with realistic data. A simple PostgreSQL or MySQL Bench run will tell you more than synthetic I/O tests ever will.

Common questions

Is NVMe always faster than SSD?
Not on a VPS. If the host throttles I/O or oversubscribes the node, an NVMe backend won't help. You're better off with a well-tuned SATA SSD setup than a congested NVMe one.

Do these numbers matter for a static site?
Not really. If you're serving flat HTML or a cached WordPress install that barely writes to disk, any modern VPS will be fast enough. Disk I/O matters when you have database writes, session handling, or logs piling up.

Can I trust the provider's advertised IOPS?
Almost never. Advertised IOPS are usually best-case lab numbers, not what you'll see on a shared VPS under real load. Always test.

What if my benchmarks are slow but the provider says everything is fine?
Ask them to move you to a different host node. If the numbers don't improve, migrate to a different provider. Life's too short to troubleshoot phantom slowdowns that are really just infrastructure problems.

What to check first

Before you commit to a provider based on disk speed alone, remember that I/O is only one piece of the performance puzzle. Network latency, CPU steal time, and RAM speed all matter. But if your workload is database-driven or writes a lot of logs—think WordPress with active plugins, e-commerce checkouts, or SaaS apps—disk IOPS will become your bottleneck faster than anything else.

Run your own fio test on a fresh instance before you move production workloads. Check the 99th percentile latency, not just average IOPS. And if the numbers look bad, don't assume it'll get better under load. It won't.