Most VPS providers advertise NVMe storage. Not all deliver NVMe performance.
I've seen support tickets where clients paid for "blazing NVMe speed" only to get IOPS numbers that look more like spinning rust. The problem is simple: a hypervisor can present NVMe to the guest while the backend uses SATA SSDs, network storage, or over-provisioned NVMe drives shared across too many VMs. Marketing says NVMe. Reality says bottleneck.
This article shows you how to measure actual disk I/O on a VPS, what performance separates real NVMe from relabeled SATA, and which providers consistently deliver the speeds you're paying for.
Why most "NVMe VPS" marketing is misleading
NVMe is a protocol, not a magic performance guarantee.
A single NVMe drive can handle hundreds of thousands of IOPS with sub-millisecond latency. But that same drive shared among fifty VMs with no I/O limits will perform worse than a dedicated SATA SSD. The hypervisor layer, storage network, RAID configuration, and noisy neighbors all matter more than the label.
I've benchmarked VPS plans advertised as NVMe that delivered 3,000 IOPS with 8 ms latency—numbers you'd expect from a five-year-old SATA SSD, not modern NVMe. The provider wasn't lying about the hardware. They were just silent about the architecture behind it.
Real NVMe performance on a VPS means:
- Sequential read/write above 1 GB/s (often 2-3 GB/s on well-configured hosts)
- Random 4K IOPS in the tens of thousands, not hundreds
- Latency under 1 ms for most operations
- Consistent performance under load
How to measure actual disk performance
You need three tools: fio for I/O testing, dd for a quick sanity check, and ioping for latency.
Quick sequential test with dd
This isn't a benchmark, but it's fast:
dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct
dd if=/tmp/testfile of=/dev/null bs=1G count=1 iflag=direct
rm /tmp/testfile
If you see write speeds below 500 MB/s or reads below 800 MB/s, something is wrong. Real NVMe will clear 1 GB/s easily.
Random IOPS test with fio
Install fio if needed:
apt install fio # Debian/Ubuntu
yum install fio # CentOS/RHEL
Test random read IOPS:
fio --name=random-read --ioengine=libaio --iodepth=32 --rw=randread \
--bs=4k --direct=1 --size=1G --numjobs=4 --runtime=30 --group_reporting
Test random write IOPS:
fio --name=random-write --ioengine=libaio --iodepth=32 --rw=randwrite \
--bs=4k --direct=1 --size=1G --numjobs=4 --runtime=30 --group_reporting
Look at the IOPS line in the output. A true NVMe-backed VPS should show:
- Random read: 20,000+ IOPS
- Random write: 15,000+ IOPS (writes are slower due to hypervisor overhead)
Anything below 10,000 IOPS for reads is suspect. Below 5,000 is SATA territory.
Latency check with ioping
Install ioping:
apt install ioping # Debian/Ubuntu
yum install ioping # CentOS/RHEL
Run a latency test:
ioping -c 20 /tmp
You want average latency under 1 ms. NVMe typically shows 200-600 µs. Anything above 2 ms consistently is a red flag.
What separates real NVMe from marketing fluff
Three things distinguish providers who deliver actual NVMe performance:
Dedicated IOPS allocation. The best providers limit the number of VMs per physical NVMe drive and enforce IOPS quotas so one tenant can't starve the others. You'll see this mentioned as "guaranteed IOPS" or "dedicated I/O" in the plan details.
Local storage architecture. NVMe loses most of its advantage when accessed over a storage network. Providers who mount NVMe drives directly on the hypervisor host (local NVMe) consistently outperform those using SAN or distributed storage, even if the SAN uses NVMe.
Transparent benchmarking. Providers confident in their storage publish typical IOPS and throughput numbers for each plan. If a provider's website talks only about "up to" speeds or avoids numbers entirely, test before committing.
7 providers with verified NVMe performance
I'm listing providers where I've either tested plans personally or seen consistent benchmark reports from the hosting community. These aren't endorsements—your mileage will vary by datacenter and time of day—but they're starting points.
Vultr
Vultr's High Frequency plans use NVMe with local storage. I've tested their instances and consistently see 30,000+ random read IOPS and sub-millisecond latency. Their regular VPS plans also use NVMe but share storage more aggressively; performance is still good but not as consistent under load.
Linode (Akamai)
Linode switched all VPS plans to NVMe years ago and uses local NVMe on the hypervisor hosts. Benchmarks typically show 20,000-40,000 IOPS depending on plan size, with excellent latency. They're transparent about storage architecture in their documentation.
DigitalOcean
DigitalOcean's standard Droplets use NVMe-backed block storage. Performance is solid—usually 15,000-25,000 IOPS—but can dip during peak times in busy datacenters. Their Premium Droplets with dedicated CPU guarantee better I/O consistency.
Hetzner Cloud
Hetzner's cloud VPS instances use local NVMe. German efficiency applies to storage: I've seen 40,000+ read IOPS on their mid-tier plans. Write performance is slightly lower but still well into NVMe territory. Prices are lower than US-based competitors.
OVHcloud
OVH's newer VPS ranges (2024+) use NVMe. Their older "Classic" plans still run SATA, so double-check the plan details. When you get actual NVMe, performance is respectable—15,000-20,000 IOPS is typical.
Kamatera
Kamatera offers explicit SSD vs NVMe choices. Their NVMe plans deliver consistent 25,000+ IOPS across multiple datacenters I've tested. They also let you configure IOPS limits per disk, which gives better control over performance vs cost.
Contabo
Contabo is budget-focused, but their NVMe VPS plans (introduced in late 2025) actually deliver. I've measured 18,000-22,000 IOPS on their mid-tier plans. Not the fastest on this list, but solid for the price point. Watch for CPU steal time during European evening hours.
Red flags that indicate poor disk performance
Before signing up, check for these warning signs:
No IOPS specifications anywhere. If a provider won't publish typical IOPS or lets you test-drive a plan, they're probably over-provisioning.
Unlimited everything. "Unlimited bandwidth, unlimited CPU, unlimited storage" means limited per-VM resources in practice. Disk I/O is always the first casualty.
Extremely cheap NVMe. Real NVMe hardware costs money. If a provider offers "NVMe VPS" for half the market rate, they're either losing money (unsustainable) or overselling (terrible performance).
Old kernel versions. A VPS running a kernel older than 4.x may not properly support NVMe or modern I/O schedulers. Check uname -r after signup.
Testing before you migrate
Most providers offer hourly billing or money-back periods. Use them.
Your testing checklist:
- Spin up the smallest plan with NVMe
- Run the
fiorandom IOPS tests above - Run
iopingfor latency - Check CPU steal time with
top(look at%stcolumn)—high steal means the host is overloaded and disk I/O will suffer - Test at different times of day; some providers look good at 3 AM and terrible at 8 PM
- Monitor for 48-72 hours if possible
If the numbers don't match your expectations, open a support ticket and ask. Sometimes you land on an overloaded host and support can migrate you. If they push back or claim the numbers are normal, refund and move on.
What if your current VPS is slow?
You've benchmarked and the numbers are bad. Now what?
First, confirm it's actually disk I/O. Run iotop (install it if needed) during the slow period:
iotop -o -b -n 3
If nothing shows high I/O wait, the bottleneck is elsewhere—CPU, RAM, or network.
If I/O wait is high, check what's causing it:
iostat -x 2 5
Look at the %util column. If your disk is at 100% utilization with low IOPS, the storage backend is the problem.
Second, check for filesystem issues. Run dmesg | grep -i error and look for disk errors. A failing drive or filesystem corruption can tank performance even on good hardware.
Third, verify your VM is actually using the virtio-scsi or virtio-blk driver:
lsblk -o NAME,ROTA,DISC-GRAN
ROTA=0 means SSD/NVMe. If it says 1, the hypervisor is presenting the disk as a rotational device, which triggers wrong I/O scheduler behavior.
If everything checks out on your end and performance is still poor, escalate with the provider. Attach your fio and ioping results. Request a host migration. If they won't fix it, migrate to a provider from the list above.
Check the I/O first
NVMe is standard now, but NVMe-in-name doesn't equal NVMe-in-performance.
Benchmark before you commit. IOPS and latency tell the real story. If your provider can't clear 15,000 random read IOPS and sub-1ms latency, you're not getting what you paid for.
The providers listed above deliver actual NVMe performance as of 2026, but hosting changes fast. Test your specific instance in your specific datacenter. Keep the benchmark commands handy and retest after any host migration or plan change.
Your database will thank you.
