PTS on AWS with m1.medium EC2 and EBS with Provisioned IOPS
More results running PTS with PIOPS 1000 and 2000
I took a look at AWS m1.medium EC2 instances with Provisioned IOPS. This post is light on instructions and is basically just graphs of performance results.
test configurations & results
-
medium-attached-ebs: m1.medium EC2 instance, standard EBS volume (ext4)
-
medium-attached-ebs-piops1000: m1.medium EC2 instance, EBS volume (ext4) provisioned for 1000 IOPS
-
medium-attached-ebs-piops2000: m1.medium EC2 instance, EBS volume (ext4) provisioned for 2000 IOPS
-
small-attached-ebs: m1.small EC2 instance, standard EBS volume (ext4)
-
small-attached-ebs-piops1000: m1.small EC2 instance, EBS volume (ext4) provisioned for 1000 IOPS
-
small-attached-ebs-piops2000: m1.small EC2 instance, EBS volume (ext4) provisioned for 2000 IOPS
comparison
Note: each test is actually run several times, with the below scores representing the average. The “error” column is the maximum deviation from the average by one or more test runs.
AIO-STRESS
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 1.1 |
medium-attached-ebs-piops1000 |
|
± 0.4 |
medium-attached-ebs-piops2000 |
|
± 0.67 |
small-attached-ebs |
|
± 0.51 |
small-attached-ebs-piops1000 |
|
± 0.47 |
small-attached-ebs-piops2000 |
|
± 0.25 |
FLEXIBLE IO TESTER
configuration | score | error |
---|---|---|
← seconds, less is better | ||
medium-attached-ebs |
|
± 78.95 |
medium-attached-ebs-piops1000 |
|
± 2.32 |
medium-attached-ebs-piops2000 |
|
± 0.47 |
small-attached-ebs |
|
± 286.56 |
small-attached-ebs-piops1000 |
|
± 2.64 |
small-attached-ebs-piops2000 |
|
± 1.14 |
This is one of the tests where m1.medium without PIOPS fared dramatically worse than m1.small without PIOPS. I re-ran these tests with the same results. If your application is similar to this benchmark, you may want to consider sticking with m1.small.
SQLITE
configuration | score | error |
---|---|---|
← seconds, less is better | ||
medium-attached-ebs |
|
± 4.61 |
medium-attached-ebs-piops1000 |
|
± 1.29 |
medium-attached-ebs-piops2000 |
|
± 6.34 |
small-attached-ebs |
|
± 3.04 |
small-attached-ebs-piops1000 |
|
± 0.52 |
small-attached-ebs-piops2000 |
|
± 2.02 |
I didn’t expect these results, but PIOPS 1000 and 2000 appear to test better on the m1.small than they do on the m1.medium.
FS-MARK
configuration | score | error |
---|---|---|
→ files/s, more is better | ||
medium-attached-ebs |
|
± 0.22 |
medium-attached-ebs-piops1000 |
|
± 0.09 |
medium-attached-ebs-piops2000 |
|
± 0.09 |
small-attached-ebs |
|
± 1.12 |
small-attached-ebs-piops1000 |
|
± 0.06 |
small-attached-ebs-piops2000 |
|
± 0.09 |
Here’s another benchmark where m1.small no-PIOPS beats m1.medium no-PIOPS. If your application deals with loads of small files, you’d be better off sticking with m1.small. PIOPS 1000 and PIOPS 2000 perform roughly the same, regardless of instance size.
DBENCH
The combination of the m1.medium’s CPU and Provisioned IOPS allows the 128-client test to produce the best results here. Without either of these, the 48-client and 12-client tests tend to be the sweet spot.
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 0.68 |
medium-attached-ebs-piops1000 |
|
± 1.58 |
medium-attached-ebs-piops2000 |
|
± 0.77 |
small-attached-ebs |
|
± 0.46 |
small-attached-ebs-piops1000 |
|
± 2.45 |
small-attached-ebs-piops2000 |
|
± 1.49 |
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 0.95 |
medium-attached-ebs-piops1000 |
|
± 0.25 |
medium-attached-ebs-piops2000 |
|
± 0.39 |
small-attached-ebs |
|
± 1.16 |
small-attached-ebs-piops1000 |
|
± 0.03 |
small-attached-ebs-piops2000 |
|
± 0.58 |
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 1.9 |
medium-attached-ebs-piops1000 |
|
± 0.39 |
medium-attached-ebs-piops2000 |
|
± 0.65 |
small-attached-ebs |
|
± 1.18 |
small-attached-ebs-piops1000 |
|
± 0.63 |
small-attached-ebs-piops2000 |
|
± 0.97 |
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 7.73 |
medium-attached-ebs-piops1000 |
|
± 0.84 |
medium-attached-ebs-piops2000 |
|
± 3.05 |
small-attached-ebs |
|
± 0.67 |
small-attached-ebs-piops1000 |
|
± 0.25 |
small-attached-ebs-piops2000 |
|
± 0.66 |
The m1.small results are fairly similar regardless of PIOPS. Meanwhile, the m1.medium results show performance scalining linearly with the level of PIOPS. This is a benchmark where PIOPS didn’t really shine on the m1.small, but clearly does on the m1.medium.
As usual, the results for 1-client are very different to the multi-user tests. As such, it’s only a mere curiousity that the m1.small beats m1.medium (with matching PIOPS).
IOZONE
The behaviour of m1.medium without PIOPS is very suspicious here, but I did run the PTS twice on different m1.medium EC2 instances with similar results. Of course, I provisioned them one after the other, so there is a chance I got the same aberant hardware twice in a row. :P
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 1.61 |
medium-attached-ebs-piops1000 |
|
± 0.0 |
medium-attached-ebs-piops2000 |
|
± 0.0 |
small-attached-ebs |
|
± 0.02 |
small-attached-ebs-piops1000 |
|
± 0.2 |
small-attached-ebs-piops2000 |
|
± 0.01 |
The CPU difference gives m1.medium the advantage in the read test.
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 0.27 |
medium-attached-ebs-piops1000 |
|
± 0.02 |
medium-attached-ebs-piops2000 |
|
± 0.02 |
small-attached-ebs |
|
± 0.29 |
small-attached-ebs-piops1000 |
|
± 0.0 |
small-attached-ebs-piops2000 |
|
± 0.17 |
All combinations perform the write test equally well here. The exception is m1.medium without PIOPS, which loses by a large margin.
THREADED I/O TESTER
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 1.28 |
medium-attached-ebs-piops1000 |
|
± 0.89 |
medium-attached-ebs-piops2000 |
|
± 0.2 |
small-attached-ebs |
|
± 3.14 |
small-attached-ebs-piops1000 |
|
± 0.04 |
small-attached-ebs-piops2000 |
|
± 0.15 |
The m1.medium’s CPU destroys the m1.small on the 32-thread read test.
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 0.27 |
medium-attached-ebs-piops1000 |
|
± 0.01 |
medium-attached-ebs-piops2000 |
|
± 0.01 |
small-attached-ebs |
|
± 0.41 |
small-attached-ebs-piops1000 |
|
± 0.0 |
small-attached-ebs-piops2000 |
|
± 0.02 |
Writing data is a different story. m1.small with no-PIOPS actually beats m1.medium by a descent margin.
COMPILE BENCH
For these tests, PIOPS 2000 doesn’t seem to have much advantage over PIOPS 1000. Predictably, m1.medium with PIOPS rules the roost here.
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 0.72 |
medium-attached-ebs-piops1000 |
|
± 0.77 |
medium-attached-ebs-piops2000 |
|
± 0.52 |
small-attached-ebs |
|
± 0.96 |
small-attached-ebs-piops1000 |
|
± 0.04 |
small-attached-ebs-piops2000 |
|
± 0.0 |
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 0.58 |
medium-attached-ebs-piops1000 |
|
± 0.2 |
medium-attached-ebs-piops2000 |
|
± 0.49 |
small-attached-ebs |
|
± 1.13 |
small-attached-ebs-piops1000 |
|
± 0.04 |
small-attached-ebs-piops2000 |
|
± 0.15 |
For the compile and create tests, m1.small matches m1.medium. That is, until you turn on PIOPS.
configuration | score | error |
---|---|---|
→ MB/s, more is better | ||
medium-attached-ebs |
|
± 0.5 |
medium-attached-ebs-piops1000 |
|
± 0.35 |
medium-attached-ebs-piops2000 |
|
± 0.76 |
small-attached-ebs |
|
± 5.14 |
small-attached-ebs-piops1000 |
|
± 0.64 |
small-attached-ebs-piops2000 |
|
± 0.54 |
UNPACKING THE LINUX KERNEL
configuration | score | error |
---|---|---|
← seconds, less is better | ||
medium-attached-ebs |
|
± 0.79 |
medium-attached-ebs-piops1000 |
|
± 0.32 |
medium-attached-ebs-piops2000 |
|
± 0.3 |
small-attached-ebs |
|
± 1.11 |
small-attached-ebs-piops1000 |
|
± 0.82 |
small-attached-ebs-piops2000 |
|
± 0.35 |
POSTMARK
configuration | score | error |
---|---|---|
→ TPS, more is better | ||
medium-attached-ebs |
|
± 10.82 |
medium-attached-ebs-piops1000 |
|
± 2.33 |
medium-attached-ebs-piops2000 |
|
± 3.0 |
small-attached-ebs |
|
± 5.36 |
small-attached-ebs-piops1000 |
|
± 1.45 |
small-attached-ebs-piops2000 |
|
± 2.33 |
GZIP COMPRESSION
configuration | score | error |
---|---|---|
← seconds, less is better | ||
medium-attached-ebs |
|
± 0.32 |
medium-attached-ebs-piops1000 |
|
± 0.34 |
medium-attached-ebs-piops2000 |
|
± 0.23 |
small-attached-ebs |
|
± 1.36 |
small-attached-ebs-piops1000 |
|
± 1.16 |
small-attached-ebs-piops2000 |
|
± 1.1 |
POSTGRESQL PGBENCH
configuration | score | error |
---|---|---|
→ TPS, more is better | ||
medium-attached-ebs |
|
± 3.55 |
medium-attached-ebs-piops1000 |
|
± 1.35 |
medium-attached-ebs-piops2000 |
|
± 3.26 |
small-attached-ebs |
|
± 3.3 |
small-attached-ebs-piops1000 |
|
± 4.62 |
small-attached-ebs-piops2000 |
|
± 17.91 |
APACHE BENCHMARK
configuration | score | error |
---|---|---|
→ Requests/s, more is better | ||
medium-attached-ebs |
|
± 33.94 |
medium-attached-ebs-piops1000 |
|
± 12.76 |
medium-attached-ebs-piops2000 |
|
± 6.83 |
small-attached-ebs |
|
± 2.23 |
small-attached-ebs-piops1000 |
|
± 4.5 |
small-attached-ebs-piops2000 |
|
± 9.55 |
observations
Now that I have some results from both m1.small and m1.medium EC2 instances, it’s clear exactly which tests are affected by CPU performance (although CPUs are not the focus of this series of articles).
These are the tests that were very CPU-bound, with little variation in results when only PIOPS differed:
- Compile Bench: Read Compiled Tree
- Unpacking the Linux Kernel
- PostMark
- Gzip Compression
- Apache Benchmark
There were a few tests where performance scaled with PIOPS rather than CPU horsepower:
- Flexible IO Tester
- FSMark
- IOZone
- PostgreSQL PGBench
PIOPS 2000 was over 10% better than PIOPS 1000 in the following cases:
- Flexible IO Tester
- SQLite
- Threaded IO Tester
- Compile Bench: Create & Read
- PostMark
It’s difficult to making more observations on the value of PIOPS with the following benchmarks producing anomolous results on m1.medium without PIOPS (i.e. m1.small being faster):
- Flexible IO Tester
- FSMark
- DBench: 1-client
- IOZone: write
- Threaded IO Tester: write
conclusions
It seems as though m1.medium EC2 instances have a regression (compared to m1.smalls) for cases where many smaller writes to EBS (without PIOPS) are being requested. Superficially, this seems illogical: m1.medium instances enjoy a better network interface, more RAM and a faster CPU.
Perhaps basic EBS becomes a major write bottleneck with a faster CPU?
In many cases, PIOPS 1000 was faster than no-PIOPS, particularly the cases with strange no-PIOPS results. If you are using m1.medium EC2 instances with applications that favour storage IO, then you really ought to consider PIOPS 1000 at least.
series
- Phoronix Test Suite on AWS
- PTS Results on Provisioned IOPS on AWS EBS
- PTS Results on Provisioned IOPS on AWS EBS, Part 2
- PTS on AWS with m1.medium EC2 and EBS with Provisioned IOPS
Ron -