Having recently concluded a multi-cloud storage performance validation for a financial services client, I've compiled some concrete latency data comparing Azure Premium SSD v2 and AWS io2 Block Express. The requirement was for sub-millisecond latency on random 4K writes for a critical trading ledger database. While both services advertise single-digit millisecond latency, the devil is in the deployment details and the consistency under load.
My test harness was a controlled environment using Fio (Flexible I/O Tester) on similarly sized compute instances (Azure Ddsv5-series vs AWS EC2 R5b), running the same workload profile. The key was isolating the storage performance from network and compute bottlenecks.
**Summary of 4K Random Write Latency (p99) at 16,000 IOPS:**
* **Azure Premium SSD v2 (P80 - 32,000 Max IOPS):** Average latency hovered around **1.2 ms**, with p99 peaking at **2.8 ms** during sustained 30-minute tests. Performance was remarkably consistent once provisioned.
* **AWS io2 Block Express (32,000 IOPS, 4,000 MB/s throughput):** Average latency was slightly lower at **0.9 ms**, but the p99 was more impressive, consistently at **1.5 ms**. The key differentiator was the latency stability at the 99th percentile, which showed less deviation under variable load.
**Critical Configuration Observations:**
* **IOPS-to-Throughput Ratio:** With io2 Block Express, you provision IOPS and throughput independently. For low-latency, high-IOPS workloads, you must ensure your provisioned throughput (in MiB/s) is sufficient to avoid throttling. The formula is crucial: `Throughput (MiB/s) >= (IOPS * I/O size (KiB)) / 1024`. For 16K IOPS at 4K I/O size, you need at least 64 MiB/s.
* **Azure's Simpler Model:** Premium SSD v2 ties IOPS and throughput to the disk tier (P80, etc.). This reduces configuration complexity but offers less granularity. You're paying for the maximum capabilities of that tier even if you don't use them.
* **Attached Instance Type:** The low-latency promise of io2 Block Express is only realized when attached to supported instance families (R5b, C7i, M5d, etc.). Attaching it to a non-optimized instance introduces a significant latency penalty, which I've seen exceed 4 ms p99.
For our specific use case, the predictable p99 of AWS io2 Block Express won out, justifying its approximately 18% higher cost-per-provisioned-IOPS in that configuration. However, for workloads where average latency is acceptable and cost is a heavier factor, Azure Premium SSD v2 presents a compelling, less operationally complex option. I'm interested if others have conducted similar comparative tests, particularly around latency "tailing" during failover events or under mixed read/write profiles.
- Mike
Mike
I'm a platform engineer at a midsize payment processor, and we run both Azure and AWS in production for regional redundancy. Our main transaction database runs on AWS io2 Block Express, while our reporting and analytics use Azure Premium SSD v2.
Here are the four most practical differences I'd add to your latency data:
1. **Provisioning and Scaling Speed:** Azure P-SSD v2 can resize (increase IOPS/throughput) without a VM restart in about 90% of cases in my experience. AWS io2 Block Express requires a stop-start of the EC2 instance for any provisioning change, which adds at least 5-7 minutes of downtime to your change window.
2. **Cost Predictability:** Azure's cost is purely based on the disk size and provisioned performance tier. With AWS, you pay for provisioned IOPS and throughput separately from storage capacity. For a 1 TiB volume at 32,000 IOPS, our AWS bill runs about 15-20% higher than the equivalent Azure P80 disk.
3. **Instance Compatibility Gotcha:** AWS io2 Block Express *only* works with R5b, X2idn, and X2iedn instances. If your architecture is locked into another instance family, you're stuck with standard io2. Azure P-SSD v2 works with any generation that supports Premium SSDs, which is almost all of them now.
4. **Baseline vs. Burst Behavior:** Azure P-SSD v2 gives you your provisioned performance 100% of the time. AWS io2 Block Express uses a throughput credit system for its provisioned specs; if you exhaust your credits under sustained load, your throughput can dip, though latency typically stays stable. We've seen this happen during multi-hour batch processing.
I'd recommend AWS io2 Block Express if your absolute, non-negotiable requirement is the tightest possible p99 latency for a stateful, performance-sensitive workload like your trading ledger. For almost everything else where sub-2ms p99 is acceptable, especially if you value operational flexibility and cost, Azure Premium SSD v2 is the simpler choice. To make a clean call, tell us your VM instance flexibility and if your workload has sustained throughput spikes over 4+ hours.
Interesting data point. I've run similar Fio tests, but my focus is on the burst behavior after provisioning changes.
> Performance was remarkably consistent once provisioned.
This matches my experience with Premium SSD v2, but I've observed a brief 30-60 second latency spike (p99 jumps to ~4-5ms) immediately after a live resize operation, even when increasing IOPS. It stabilizes quickly, but it's something to note for zero-downtime scaling scenarios.
For AWS io2 Block Express, the consistency is excellent, but you're locked into that stop-start for any provisioning change, as user74 mentioned. It's a trade-off between operational agility and absolute baseline stability.
Numbers don't lie