Scenario / Questions

Which is faster for read access on an EC2 instance; the “local” drive or an attached EBS volume?

I have some data that needs to be persisted so have placed this on an EBS volume. I’m using OpenSolaris, so this volume has been attached as a ZFS pool. However, I have a large chunk of EC2 disk space that’s going to go unused, so I’m considering re-purposing this as a ZFS cache volume but I don’t want to do this if the disk access is going to be slower than that of the EBS volume as it would potentially have a detrimental effect.

Find below all possible solutions or suggestions for the above questions..

Suggestion: 1

Just to add a little to the consensus that is EBS faster…

An important point to understand here is that instance storage speed is unpredictable – Amazon makes no guarantees about it.

This information comes from the book Cloud Application Architectures by George Reese (which seems pretty good from what I’ve skimmed it so far.) It includes a table titled Comparison of EC2 data storage options (p. 41); here’s a snippet of that table (in the book there are several other characteristics compared):

               S3              Instance          EBS

Speed          Low             Unpredictable     High
Reliability    Medium          High              High
Durability     Super high      Super low         High

So, instance storage might outperform EBS in read access sometimes, but if you want constant high speed, you indeed need to go with EBS. As Reese puts it in his book:

Another issue is the unpredictability of performance in the instance storage. You might actually think that it should be faster than the other options, and sometimes it is. Sometimes, however, it is unbelievably slow – slower than an NFS mount over a 10bT Ethernet connection. EBS, on the other hand, consistently gives you the performance of a SAN over a GB Ethernet connection.

Suggestion: 2

We ran up roughly $1000 in AWS charges in a systematic exploration of this and related questions, and posted an extensive analysis.

For random (small) reads, we found “local” (EC2 instance) storage and EBS to have similar performance, but local storage has a better latency tail.

For sequential (bulk) reads, EBS is faster on m1.small, but local is faster on m1.large. We didn’t directly compare local vs. EBS on other instance types, but we did find that increasing instance size has much more effect on local-store performance than on EBS performance.

There’s also a cost question. By shifting I/O from EBS to the local disk, you’ll reduce your AWS fees.

Suggestion: 3

If you’re after database performance in Amazon, you may find this article useful:
http://www.mysqlperformanceblog.com/2009/08/06/ec2ebs-single-and-raid-volumes-io-bencmark/

The general vibe from my own research (have been reading about this for a few weeks) is that EBS is the faster option.

Suggestion: 4

Amazon has made vague claims that EBS will generally outperform the “local” scratch partition on an EC2 instance. I know that I’ve experienced higher throughput on an EBS volume in my own use, but I had not bothered to measure latency.

If you’re curious about performance in a particular use, your best bet is probably to set up a test instance. I know that I would.

Suggestion: 5

I’ve run MySQL instances on EBS volumes and have been pleased with their performance. I don’t have any hard data on it either, but it performed just fine.