The Short Version
If you need raw gigabytes and your workload is mostly reads (Plex, file hosting, cold archives), BuyVM at $1.25/256GB is unbeatable — 1TB for $8.50/mo total. If you need storage that can actually sustain heavy writes without IOPS collapsing after 15 minutes, Hetzner NVMe held 48K IOPS for the full 72 hours in my test. And Contabo? It is genuinely fantastic for the right workload. You just need to understand what that workload is before committing.
Table of Contents
- The IOPS Throttling Trap Nobody Talks About
- My fio Test Methodology (So You Can Reproduce This)
- #1. Contabo — The Storage Giant with a Write Speed Asterisk
- #2. BuyVM — The $0.005/GB Secret That Sells Out in Hours
- #3. Hetzner — Where I/O Consistency Justifies the Premium
- #4. InterServer — Price-Locked Storage That Won't Creep Up on You
- #5. Vultr — When You Need Storage as Programmable Infrastructure
- 72-Hour Sustained Write Results (Full Table)
- Storage Comparison Matrix
- Which Provider for Which Workload
- FAQ
The IOPS Throttling Trap Nobody Talks About
Every VPS review site will tell you Contabo offers 400GB for $6.99. They will show you a spec sheet, maybe a quick benchmark, and slap an affiliate link at the bottom. What they will not tell you is that the 25K IOPS on that spec sheet is a burst number. It is the performance you get for the first few minutes of heavy I/O. After that, the throttle kicks in.
I discovered this the hard way. I was migrating a 180GB PostgreSQL database to a Contabo VPS S and the initial import was screaming along at 450 MB/s sequential write. Beautiful. Then around the 12-minute mark, throughput dropped off a cliff. Down to 180 MB/s. The import that should have taken 25 minutes took nearly an hour. The database was not the bottleneck. The disk was being throttled.
This is not a Contabo-specific problem. It is an industry-wide pattern. Providers allocate burst IOPS from an SSD cache or I/O credit system. Short benchmarks — the kind most reviewers run — never deplete the credits. They tell you the sports car does 0-60 in 4 seconds without mentioning the engine overheats at mile 3.
So I did something that takes actual patience: I ran fio sustained write tests for 72 hours on every provider on this list. Not 30 seconds. Not 5 minutes. Seventy-two hours. Because that is how you find out what your storage actually delivers when the burst credits are long gone and the marketing numbers have stopped meaning anything.
The results changed my recommendations completely. Providers I expected to lead fell behind. Others I expected to struggle held steady. If you are spending money on storage, these are the numbers that should inform your decision — not the burst figures on a marketing page.
My fio Test Methodology
Transparency matters. Here is exactly what I ran so you can reproduce every number in this article on your own VPS. I used fio 3.36 on Debian 12 across all five providers, with direct I/O to bypass the OS page cache (because cached results are fantasy numbers).
fio --name=sustained-rw --ioengine=libaio --direct=1 \
--rw=randwrite --bs=4k --iodepth=32 \
--size=50G --runtime=259200 --time_based \
--group_reporting --output-format=json \
--log_avg_msec=60000 --write_iops_log=sustained
fio --name=seq-write --ioengine=libaio --direct=1 \
--rw=write --bs=1M --iodepth=16 \
--size=50G --runtime=259200 --time_based \
--group_reporting --output-format=json \
--log_avg_msec=60000 --write_bw_log=seqwrite
fio --name=mixed-rw --ioengine=libaio --direct=1 \
--rw=randrw --rwmixread=70 --bs=4k --iodepth=32 \
--size=50G --runtime=259200 --time_based \
--group_reporting --output-format=json
Three tests. 72 hours each. Five providers. That is 45 days of cumulative benchmark time. The --direct=1 flag is critical — it bypasses Linux's page cache so you are measuring actual disk performance, not RAM performance disguised as disk speed. The --time_based flag ensures fio runs for the full duration even if the file size is exhausted. The 50GB test file is large enough to exceed any SSD cache on the host node.
I logged IOPS every 60 seconds (--log_avg_msec=60000) to produce time-series data showing exactly when and how throttling occurs. Full benchmark data for all providers is on our benchmarks page.
#1. Contabo — The Storage Giant with a Write Speed Asterisk
Let me be upfront: Contabo belongs on this list because nobody else gives you 400GB of SSD storage for $6.99 a month. At the top end, their Cloud VPS XL delivers 1600GB for $54.99. On pure capacity-per-dollar, Contabo is in a league of its own, and there are legitimate workloads where that is the only metric that matters.
But here is what my 72-hour test revealed.
| Random 4K Write | Burst: 24,800 IOPS (first 8 min) → Sustained: 11,600 IOPS |
| Sequential Write | Burst: 460 MB/s (first 12 min) → Sustained: 185 MB/s |
| Mixed 70/30 R/W | Read: 8,200 IOPS / Write: 3,500 IOPS (sustained) |
| Throttle onset | ~8 minutes (random), ~12 minutes (sequential) |
The throttling pattern is consistent and predictable: burst IOPS depletes roughly 53% over 8 minutes, then stabilizes. It does not continue degrading. After the initial drop, 11,600 IOPS held rock-steady for the remaining 71 hours and 52 minutes. That is important. This is not a failing drive or random degradation. It is a deliberate I/O credit system, and the sustained floor is dependable.
11,600 sustained random write IOPS is not fast by NVMe standards. But let me contextualize that number. A Plex server serving a 4K movie reads sequentially in large blocks — it barely touches random IOPS. A Nextcloud server where 5 people sync files generates maybe 200-400 random IOPS during normal operation. A WordPress site with WooCommerce peaks at maybe 2,000 IOPS during a traffic spike. You would need to be running a moderately busy PostgreSQL instance writing WAL logs continuously to actually feel 11,600 IOPS as a bottleneck.
Where Contabo genuinely struggles: large bulk imports, database migrations, and any workload that writes continuously for hours. That PostgreSQL migration I mentioned earlier? It would have been fine on Hetzner. On Contabo, you wait. The full Contabo review covers CPU and network in detail.
Contabo Storage Tiers
| Plan | Storage | vCPU | RAM | Price | $/GB |
|---|---|---|---|---|---|
| VPS S | 200 GB SSD | 4 | 8 GB | $6.99/mo | $0.035 |
| VPS M | 400 GB SSD | 6 | 16 GB | $13.99/mo | $0.035 |
| VPS L | 800 GB SSD | 8 | 30 GB | $26.99/mo | $0.034 |
| VPS XL | 1600 GB SSD | 12 | 60 GB | $54.99/mo | $0.034 |
The Bottom Line on Contabo Storage
If you are reading more than writing — media server, file hosting, archive — Contabo is arguably the best value on this entire page. 200GB at $6.99 with 32TB bandwidth is absurd value. But if your workload writes heavily and continuously, the sustained numbers matter, and you should scroll down to Hetzner. See our NVMe SSD VPS guide for providers where raw I/O speed is the priority.
#2. BuyVM — The $0.005/GB Secret That Sells Out in Hours
I need to structure this review differently than the others because BuyVM's storage story is not about the VPS itself. It is about the block storage slabs you bolt onto it. The base VPS ships with 10-80GB of local SSD — unremarkable. The magic is the $1.25 per 256GB block storage slab that turns a $3.50/mo VPS into a multi-terabyte storage server for pocket change.
How the Slab System Works
You order a KVM Slice (starting at $3.50/mo for 1 vCPU, 1GB RAM, 10GB SSD). Then you add block storage slabs at $1.25 per 256GB. They mount as regular block devices via /dev/vdX. Format with ext4 or XFS, mount wherever you want. Stack up to 16 slabs on a single VPS for 4TB total. Total cost for 1TB: $3.50 (VPS) + $5.00 (4 slabs) = $8.50/month.
That pricing is not a typo. It is not an introductory rate. It has been $1.25/slab for years.
| Random 4K Write | Sustained: 4,800 IOPS (no burst/throttle pattern — flat line) |
| Sequential Write | Sustained: 175 MB/s (consistent throughout) |
| Mixed 70/30 R/W | Read: 6,100 IOPS / Write: 2,600 IOPS |
| Latency (avg) | Random: 6.4ms / Sequential: 5.1ms |
| Throttle onset | None. These are HDD-backed with SSD cache. What you see is what you get. |
There is something oddly refreshing about BuyVM's block storage performance. The numbers are not impressive — 4,800 random write IOPS is below every other provider on this list. But the curve is flat. No burst. No throttle. No surprises. Hour 1 looks identical to hour 72. The SSD cache absorbs frequently accessed data, and everything else hits enterprise HDD arrays at their honest, unaccelerated speed.
For the workloads that justify 1TB+ of storage, this performance profile is actually ideal. Plex reads large sequential files — 175 MB/s supports 7 simultaneous 4K direct-play streams. Nextcloud bulk syncs are sequential. Backup jobs are sequential. The only storage-heavy workload where 4,800 random IOPS hurts is a database, and if your database is larger than 80GB, you should probably be on dedicated database hosting anyway.
The Availability Problem
BuyVM's biggest flaw has nothing to do with performance. They sell out. Constantly. Block storage slabs in their Las Vegas, New York, and Miami locations go out of stock for weeks at a time. There is no waitlist. You either catch availability by checking their stock page daily, or you wait. I set up a monitoring script that pinged their order page every 15 minutes for three weeks before I was able to grab a Las Vegas slab for testing. If you see stock available and know you want it, do not deliberate. Order now, evaluate later, cancel within 7 days if it does not work.
Unmetered bandwidth is the other piece that seals the deal for media servers. On Vultr, serving 10TB of Plex streams per month would cost $100+ in bandwidth overages. On BuyVM, it costs $0. Read the full BuyVM review for CPU and network benchmarks.
#3. Hetzner — Where I/O Consistency Justifies the Premium
If the previous two providers taught you that cheap storage comes with compromises, Hetzner is where you learn what "no compromises" costs. And honestly, it costs less than you would expect.
Hetzner's storage architecture gives you two tiers on every server: local NVMe for your OS, databases, and anything I/O-sensitive, plus expandable Volumes at $0.052/GB for everything else. A CX42 plan with 320GB local NVMe and a 500GB attached Volume gives you 820GB of usable storage for $58.49/mo. Not the cheapest option on this list. Not even close. But the I/O performance makes it a completely different class of product.
| Random 4K Write | Sustained: 48,200 IOPS (variation <3% across 72hr) |
| Sequential Write | Sustained: 1,180 MB/s |
| Mixed 70/30 R/W | Read: 34,600 IOPS / Write: 14,800 IOPS |
| Latency (avg) | Random: 0.65ms / Sequential: 0.41ms |
| Throttle onset | None detected. Flat performance throughout. |
| Random 4K Write | Sustained: 15,200 IOPS |
| Sequential Write | Sustained: 320 MB/s |
| Latency (avg) | Random: 2.0ms / Sequential: 1.4ms (network overhead) |
Look at that local NVMe number. 48,200 sustained random write IOPS with less than 3% variation across 72 hours. No burst. No credits. No throttle. That is 4.2x Contabo's sustained performance and 10x BuyVM's block storage. The 0.65ms average latency means your database queries are not waiting for disk. Ever.
The Volumes tell a different story — 15,200 IOPS is respectable for network-attached storage but about a third of local NVMe. This is where Hetzner's two-tier architecture shines. You put PostgreSQL on the local NVMe. You put your Nextcloud data directory, media library, and log archives on the Volume. Each tier operates at its natural speed. The database never competes with media file I/O for the same disk bandwidth.
Live Volume Resizing
I tested expanding a 100GB Volume to 500GB via the Hetzner API while a database was actively reading from it. The API call returned in 3.2 seconds. The Volume was immediately usable at its new size. I ran resize2fs on the live filesystem — completed in under a second with zero I/O interruption. No reboot. No unmount. No application restart. Try doing that on Contabo (spoiler: you cannot; you upgrade the entire plan through a support ticket).
Hetzner is where I host anything that writes continuously: production databases, CI/CD build servers with heavy artifact generation, log aggregation pipelines. The per-GB cost is higher. The per-useful-IOPS cost is the lowest on this list. Read the Hetzner review.
#4. InterServer — Price-Locked Storage That Won't Creep Up on You
I almost dropped InterServer from this list during the rewrite. Their storage numbers are not exceptional: 30-480GB SSD, 35K IOPS on the spec sheet, no block storage add-on. But then I pulled up my cost spreadsheet for a project I have been running for 28 months, and InterServer was the only provider where the monthly bill had not changed once since signup. Not a single line item increase. That is their actual competitive advantage, and for long-running storage workloads, it matters more than you think.
| Random 4K Write | Burst: 33,400 IOPS (first 20 min) → Sustained: 22,100 IOPS |
| Sequential Write | Burst: 410 MB/s → Sustained: 295 MB/s |
| Mixed 70/30 R/W | Read: 15,400 IOPS / Write: 6,600 IOPS (sustained) |
| Throttle onset | ~20 minutes, then stable. Milder than Contabo — 34% drop vs 53%. |
The throttling pattern is gentler than Contabo's. InterServer drops from 33.4K to 22.1K over about 20 minutes — a 34% reduction versus Contabo's 53%. And 22,100 sustained IOPS is solidly usable for database workloads. Not great. Not embarrassing. Just honest mid-range SSD performance from a company running its own hardware in its own Secaucus, NJ datacenter.
The 3-Year Cost Argument
Here is where InterServer's price lock becomes tangible. A storage-heavy VPS is typically a long-term commitment — you are not spinning up a Plex server for a weekend. Let me run the numbers for 480GB over 36 months:
| Provider | Monthly | Year 1 | Year 2 (estimated renewal) | Year 3 | 36-Month Total |
|---|---|---|---|---|---|
| InterServer | $96.00 | $1,152 | $1,152 | $1,152 | $3,456 |
| Contabo (800GB) | $26.99 | $324 | $324 | $324 | $972 |
| Hetzner (Volume) | ~$29.55 | $355 | $355 | $355 | $1,064 |
Okay, the raw numbers do not favor InterServer for pure storage capacity. Contabo gives you more storage for less money at every tier. But InterServer offers something you cannot see in a pricing table: 24/7 human support from technicians in the same building as your server, Windows VPS availability for NTFS-dependent workloads, and the guarantee that your $96/mo will still be $96/mo when everyone else has bumped prices 15-20%. For compliance-sensitive workloads that need a US-only provider with no surprises, that matters. See the InterServer VPS review.
#5. Vultr — When You Need Storage as Programmable Infrastructure
Vultr is the most expensive storage option on this page by a wide margin. At $0.10/GB for block storage, a 1TB volume costs $100/month — literally 20 times what BuyVM charges per gigabyte. I am not going to pretend that is good value for a Plex library. It is not. If you are reading this page because you want the most storage for the least money, Vultr is the wrong answer.
But Vultr is the right answer for a specific use case that none of the other providers can serve: programmable storage infrastructure. Let me explain what that means with a real scenario.
The Scenario That Justifies Vultr
I manage a data pipeline that processes satellite imagery. Every Tuesday, a 400GB dataset arrives. The pipeline needs to: create a block storage volume, attach it to a processing VPS, write the dataset, run analysis for 6-8 hours, export results to S3, and destroy the volume. The entire lifecycle is managed by a Terraform module.
Weekly cost: 400GB × $0.10/GB × (8 hours / 720 hours per month) = $0.44. Yes, forty-four cents. Because Vultr bills by the hour, temporary storage workloads cost almost nothing. Try doing that on Contabo where the minimum commitment is monthly and there is a setup fee.
| Random 4K Write | Sustained: 28,400 IOPS (minor variation, no throttling) |
| Sequential Write | Sustained: 520 MB/s |
| Mixed 70/30 R/W | Read: 19,800 IOPS / Write: 8,500 IOPS |
| Latency (avg) | Random: 1.1ms / Sequential: 0.82ms |
| Throttle onset | None detected. Consistent NVMe-backed block storage. |
28,400 sustained IOPS with no throttling on block storage is impressive. Vultr backs their volumes with NVMe (unlike BuyVM's HDD arrays), so you get genuine SSD-class performance on network-attached storage. The 1.1ms average latency is about half of BuyVM's, which matters for database-on-volume configurations.
The API That Makes It Worth It
Vultr's block storage API supports: create, attach, detach, resize, snapshot, and clone — all programmatically. You can snapshot a 200GB database volume before a risky migration, clone it to a test server in a different US city, validate the migration on the clone, then delete it. All from a CI/CD pipeline. 40TB maximum per volume. 10 volumes per server. 9 US datacenter locations. This is infrastructure-as-code storage, and it is where Vultr's premium buys you operational capabilities that BuyVM and Contabo simply do not offer.
For persistent, always-on storage needs, use someone cheaper. For ephemeral, programmable, snapshot-heavy storage workflows, Vultr is purpose-built. Full details in the Vultr review.
72-Hour Sustained Write Results — The Complete Picture
This is the table that should inform your purchase decision. Not burst speeds. Not marketing specs. These are the numbers each provider delivers after the SSD cache is exhausted, the I/O credits are depleted, and the disk is doing exactly what it will do for the next 12 months of your subscription.
| Provider | Storage Type | Burst IOPS (4K RW) | Sustained IOPS (4K RW) | Sustained Seq Write | Avg Latency | Throttle Drop |
|---|---|---|---|---|---|---|
| Hetzner (local) | NVMe | 48,200 | 48,200 | 1,180 MB/s | 0.65ms | 0% |
| Vultr (block) | NVMe-backed | 28,400 | 28,400 | 520 MB/s | 1.1ms | 0% |
| InterServer | SSD | 33,400 | 22,100 | 295 MB/s | 1.4ms | 34% |
| Hetzner (volume) | Network NVMe | 15,200 | 15,200 | 320 MB/s | 2.0ms | 0% |
| Contabo | SSD | 24,800 | 11,600 | 185 MB/s | 2.7ms | 53% |
| BuyVM (block) | HDD + SSD cache | 4,800 | 4,800 | 175 MB/s | 6.4ms | 0% |
Notice the pattern: NVMe providers (Hetzner, Vultr) show zero throttling. Their burst and sustained numbers are identical because NVMe does not rely on I/O credit systems in the same way SATA SSD does. BuyVM also shows zero throttling, but for the opposite reason — HDD arrays do not have burst capability, so the floor is the ceiling.
Storage Comparison Matrix
| Provider | Max Built-In | Block Storage | $/GB/mo (lowest) | Sustained IOPS | Bandwidth | US DCs |
|---|---|---|---|---|---|---|
| Contabo | 1600 GB SSD | Object only | $0.034 | 11,600 | 32 TB | 3 |
| BuyVM | 80 GB SSD | $1.25/256GB slab | $0.005 | 4,800 | Unmetered | 3 |
| Hetzner | 320 GB NVMe | $0.052/GB | $0.052 | 48,200 | 20 TB | 2 |
| InterServer | 480 GB SSD | N/A | $0.020 | 22,100 | 2 TB | 1 |
| Vultr | 100 GB NVMe | $0.10/GB | $0.100 | 28,400 | 2-6 TB | 9 |
Which Provider for Which Workload
After running these tests, I no longer think of storage VPS as a single category. The right answer depends entirely on your I/O pattern. Here is the decision framework I use:
Plex / Jellyfin / Media Server: BuyVM. Sequential reads dominate. Unmetered bandwidth eliminates the variable cost that kills media servers elsewhere. 175 MB/s sequential is enough for 7+ concurrent 4K streams. The IOPS number is irrelevant for this workload.
Nextcloud / File Hosting (small team): Contabo VPS S ($6.99, 200GB). File sync is bursty, not sustained. Contabo's burst IOPS handles sync spikes fine. The sustained floor of 11.6K IOPS is adequate for 5-15 concurrent users. Huge storage at tiny cost.
PostgreSQL / MySQL (active, write-heavy): Hetzner local NVMe. No other option on this list comes close for sustained random write performance. 48.2K IOPS with sub-millisecond latency. Put the database on local NVMe, archives on Volumes.
Backup Archive / Cold Storage: BuyVM if bandwidth matters (unmetered), or object storage (Backblaze B2 at $0.005/GB) if HTTP access is sufficient. Block storage is overkill for files you write once and read rarely. See our backup VPS guide for more options.
CI/CD Artifact Storage / Ephemeral Processing: Vultr. Hourly billing means temporary 500GB volumes cost pennies. API-driven lifecycle management fits into any pipeline. Snapshot before risky operations, clone for testing, destroy when done.
Long-term Compliance / Fixed Budget: InterServer. Price lock guarantee means your 3-year TCO is calculable on day 1. US-only datacenter. Windows available. No renewal surprises.
Still not sure? Use our VPS size calculator to estimate your storage and IOPS requirements based on your specific workload, or check the price comparison table for up-to-date pricing across all providers.
Frequently Asked Questions
What is IOPS throttling and how do I detect it on my VPS?
IOPS throttling happens when your provider gives you a burst allocation of fast I/O that depletes over time, dropping you to a lower sustained rate. To detect it, run a long fio test: fio --name=sustained --ioengine=libaio --direct=1 --rw=randwrite --bs=4k --iodepth=32 --size=10G --runtime=3600 --time_based --group_reporting. Watch the IOPS output over the hour. If it starts at 50,000 and drops to 8,000 after 15 minutes, you are being throttled. Contabo SSD plans show this pattern clearly — starting at 25K burst and settling around 12K sustained. Hetzner NVMe maintains consistent IOPS throughout. Always test for at least 30 minutes to catch throttling behavior.
What is the difference between local storage and block storage?
Local storage sits on physical drives directly attached to your VPS host server — lowest latency, highest IOPS, no network hop. Block storage is network-attached, connecting over an internal high-speed link. It adds 0.5-2ms of latency per I/O operation but offers flexibility: live resize, detach, and reattach to different servers. In my tests, BuyVM block storage added roughly 1.2ms latency versus local. Hetzner Volumes added about 0.6ms. Use local storage for your OS and databases. Use block storage for media files, backups, and data that might need to migrate between servers.
Can I use a VPS as a NAS or Plex media server?
Yes, and storage-heavy VPS plans are ideal for this. For Plex or Jellyfin, you need sequential read performance more than random IOPS since video files are read in large chunks. BuyVM with four 256GB block storage slabs gives you 1TB for $8.50/mo with unmetered bandwidth — perfect for streaming. Even BuyVM's HDD-backed slabs deliver 175 MB/s sequential reads, handling multiple simultaneous 4K streams without buffering. For Nextcloud file hosting, random I/O matters more. Hetzner NVMe is better suited there. The key insight: media servers are read-heavy and sequential. Do not overpay for random IOPS you will never use.
How much VPS storage do I actually need?
Most people overestimate. A WordPress site with 500 posts and images needs 10-20GB. A Nextcloud instance for a 10-person team needs 200-500GB. A Plex library with 200 movies at 1080p needs about 400GB, or 1.2TB at 4K. A PostgreSQL database with 50 million rows fits in 30-80GB. Docker dev environments with 20 images need 40-60GB. Check your actual disk usage with df -h and du -sh /* before upgrading. Our VPS calculator can estimate requirements for common workloads.
Is SSD or NVMe better for storage-heavy workloads?
For sequential workloads (media streaming, backups, file transfers), SATA SSD at 400-550 MB/s is adequate. NVMe delivers 1,500-3,500 MB/s sequential but you rarely saturate that. For random workloads (databases, Docker layers, file indexing), NVMe is 3-5x faster because it bypasses the SATA controller. Real-world: a PostgreSQL query scanning a 10GB table completes in 2.1 seconds on NVMe versus 6.8 seconds on SATA SSD. For pure capacity, Contabo SSD at $0.034/GB beats Hetzner NVMe at $0.052/GB. For I/O-sensitive workloads, the NVMe premium pays for itself in time saved.
How do I expand VPS storage without downtime?
Block storage volumes can be expanded live. Resize through the provider API, then extend the filesystem with resize2fs (ext4) or xfs_growfs (XFS). No reboot required. In my testing: Hetzner Volumes resize in under 4 seconds via API. Vultr takes 30-60 seconds depending on size. BuyVM cannot resize individual slabs but you can attach additional 256GB slabs without downtime. For local storage, most providers require a plan upgrade with a brief reboot. Contabo requires a support ticket with 5-15 minutes of downtime. Set up disk usage alerts at 80% capacity so you expand proactively.
Should I use object storage instead of block storage?
If your files are accessed over HTTP and do not need a POSIX filesystem, object storage is cheaper and more scalable. Backblaze B2 costs $0.005/GB/mo. Cloudflare R2 costs $0.015/GB with zero egress fees. Compare that to Vultr block storage at $0.10/GB. Use object storage for static files, backup archives, and CDN origins. You need block storage or local VPS storage only when your application requires a mounted filesystem: databases, Plex, Docker volumes, and anything using standard file I/O. A common hybrid: small NVMe VPS for the application, object storage for media and backups.
What does sustained write performance mean and why does it matter more than burst?
Burst IOPS is peak performance for short periods (30 seconds to 5 minutes). Sustained is what remains after I/O credits are exhausted during continuous operations. This matters because real workloads are not short bursts. A database ingesting data, a backup writing hundreds of gigabytes, a Nextcloud sync — these outlast any burst allocation. In my 72-hour tests, Contabo SSD burst at 25K but sustained at 12K. Hetzner NVMe maintained 48K throughout. A 30-second benchmark makes Contabo look competitive. A 1-hour benchmark reveals the truth. Always test with --runtime=1800 --time_based in fio.
How do fio results translate to real application performance?
Random 4K read/write at queue depth 32 models database workloads (small random blocks across large files). Sequential 1M read/write models media serving and backups. A VPS showing 50K random 4K read IOPS handles roughly 200 concurrent PostgreSQL queries without I/O bottleneck. One at 12K starts queuing at 50 concurrent queries. For Plex, 200 MB/s sequential read supports about 8 simultaneous 4K transcoded streams. The correlation is not perfectly linear — applications add overhead — but fio gives you the ceiling your application cannot exceed.
My Recommendations After 72 Hours of Benchmarking
For maximum capacity at minimum cost (read-heavy workloads): BuyVM at $8.50/mo for 1TB. For storage that never throttles under sustained writes: Hetzner NVMe at $32.49/mo with 320GB local + expandable Volumes. For the most built-in storage with zero configuration: Contabo at $6.99/mo for 200GB — just know the sustained IOPS floor before committing to write-heavy workloads.