Azure IO performance

Solution 1:

Azure VMs are sized based on their RAM and CPU cores, but all sizes are conspicuously lacking in storage performance, which always becomes the main culprit regardless of how many cores and memory you throw at a VM.

Two solutions:

  • For normal usage, just attach as many data disks as possible to your VM and configure them in RAID 0 in the guest system; I/O is capped at the disk level, thus more disks = more I/O. Use those disks for actual work, don't put anything other than the O.S. on the system disk (which is a best practice anyway). This strategy has no additional costs, because Azure storage is billed based on the actual space used: the number of virtual disks and their apparent size don't matter at all. (*)
  • If you really need disk performance, use premium storage.

(*) If you are concerned about using RAID 0, don't be so. Those are virtual disks, and their integrity is already guaranteed by the underlying storage layer. RAID 0 is only used to group them in a single logical volume with better performance.

Solution 2:

Azure is a shared service. You should expect random performance variations based on the load on the hypervisor you're running on (which you have absolutely no control over), and a literally infinite array of other factors (which you also have no control over).

If performance (and consistency) is critical host your own environment, on your own hardware.

Solution 3:

You shouldn't use your c drive for applications:

http://blogs.msdn.com/b/igorpag/archive/2014/10/23/azure-storage-secrets-and-linux-i-o-optimizations.aspx

The C drive is optimized for boot time, not for high IO.

As each disk is IOPS-throttled (normally 500/disk), you can either use many of them (up to 8 on A3) or us a machine from the d-series with SSD (D3: 12000IOPS). Note that you have to use the d-drive which doesn't guarantee to persist data to have SSD speed:

http://azure.microsoft.com/blog/2014/10/06/d-series-performance-expectations

Or you can pay $$$ and use a premium storage blob (~100$/Month for 5000 IOPS) to have a persistent storage.