PTS Results on Provisioned IOPS on AWS EBS, Part 2

More results running PTS with PIOPS 1000 and 2000

Continuing my evaluation of cloud hosted file-systems, I started looking at Provisioned IOPS as offered by AWS. This post is light on instructions and is basically just graphs of performance results.

test configurations

  • small-attached-ebs: m1.small EC2 instance, standard EBS volume (ext4)
  • small-attached-ebs-piops200: m1.small EC2 instance, EBS volume (ext4) provisioned for 200 IOPS
  • small-attached-ebs-piops400: m1.small EC2 instance, EBS volume (ext4) provisioned for 400 IOPS
  • 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

Note: there’s a 10:1 minimum ratio between the size of an AWS EBS volume and the IOPS you provision for it. As such, the smallest EBS volume that can be provisioned for 200 IOPS is 20GB, and the smallest volume with support for 400 IOPS is 40GB.

results

OpenBenchmarking.org

I ran these tests with the same test name, however PTS didn’t join the results together when it submitted them. There must be a trick to getting PTS to collect results from multiple machines.

Anyway, here are the separate result pages:

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
AIO-Stress v0.21: random write
configuration score error
→ MB/s, more is better
small-attached-ebs 15.87 ± 0.51
small-attached-ebs-piops200 8.43 ± 0.1
small-attached-ebs-piops400 15.75 ± 0.06
small-attached-ebs-piops1000 35.9 ± 0.47
small-attached-ebs-piops2000 40.95 ± 0.25
FLEXIBLE IO TESTER
Flexible IO Tester v1.57: Intel IOMeter File Server Access Pattern
configuration score error
← seconds, less is better
small-attached-ebs 1234.69 ± 286.56
small-attached-ebs-piops200 7123.3 ± 10.69
small-attached-ebs-piops400 3567.55 ± 5.0
small-attached-ebs-piops1000 1469.18 ± 2.64
small-attached-ebs-piops2000 802.62 ± 1.14
SQLITE
SQLite v3.7.3: 12,500 INSERTs
configuration score error
← seconds, less is better
small-attached-ebs 156.35 ± 3.04
small-attached-ebs-piops200 377.2 ± 0.1
small-attached-ebs-piops400 188.27 ± 0.03
small-attached-ebs-piops1000 75.76 ± 0.52
small-attached-ebs-piops2000 89.05 ± 2.02
FS-MARK
FS-Mark v3.3: 1000 Files, 1MB Size
configuration score error
→ files/s, more is better
small-attached-ebs 27.1 ± 1.12
small-attached-ebs-piops200 12.6 ± 0.0
small-attached-ebs-piops400 22.73 ± 0.03
small-attached-ebs-piops1000 31.7 ± 0.06
small-attached-ebs-piops2000 33.27 ± 0.09
DBENCH
Dbench v4.0: 1 Client
configuration score error
→ MB/s, more is better
small-attached-ebs 43.72 ± 0.46
small-attached-ebs-piops200 29.76 ± 0.01
small-attached-ebs-piops400 61.42 ± 0.11
small-attached-ebs-piops1000 82.46 ± 2.45
small-attached-ebs-piops2000 69.69 ± 1.49
Dbench v4.0: 12 Clients
configuration score error
→ MB/s, more is better
small-attached-ebs 128.37 ± 1.16
small-attached-ebs-piops200 60.67 ± 0.07
small-attached-ebs-piops400 107.33 ± 0.03
small-attached-ebs-piops1000 119.3 ± 0.03
small-attached-ebs-piops2000 126.7 ± 0.58
Dbench v4.0: 48 Clients
configuration score error
→ MB/s, more is better
small-attached-ebs 129.76 ± 1.18
small-attached-ebs-piops200 52.21 ± 0.22
small-attached-ebs-piops400 109.36 ± 1.53
small-attached-ebs-piops1000 120.72 ± 0.63
small-attached-ebs-piops2000 129.03 ± 0.97
Dbench v4.0: 128 Clients
configuration score error
→ MB/s, more is better
small-attached-ebs 115.54 ± 0.67
small-attached-ebs-piops200 21.06 ± 0.37
small-attached-ebs-piops400 55.91 ± 0.14
small-attached-ebs-piops1000 108.84 ± 0.25
small-attached-ebs-piops2000 123.01 ± 0.66
IOZONE
IOzone v3.405: 8GB Read Performance
configuration score error
→ MB/s, more is better
small-attached-ebs 34.89 ± 0.02
small-attached-ebs-piops200 12.77 ± 0.0
small-attached-ebs-piops400 25.57 ± 0.0
small-attached-ebs-piops1000 34.86 ± 0.2
small-attached-ebs-piops2000 34.73 ± 0.01
IOzone v3.405: 8GB Write Performance
configuration score error
→ MB/s, more is better
small-attached-ebs 33.73 ± 0.29
small-attached-ebs-piops200 11.57 ± 0.15
small-attached-ebs-piops400 22.85 ± 0.1
small-attached-ebs-piops1000 33.66 ± 0.0
small-attached-ebs-piops2000 34.26 ± 0.17
THREADED I/O TESTER

This is one benchmark where PIOPS 2000 performance was actually double that of PIOPS 1000. Now that we have 4 data points for PIOPS levels, it looks like this test scales linearly with the PIOPS level.

Threaded I/O Tester v0.3.3: 64MB Random Read - 32 Threads
configuration score error
→ MB/s, more is better
small-attached-ebs 122.08 ± 3.14
small-attached-ebs-piops200 2.23 ± 0.01
small-attached-ebs-piops400 4.53 ± 0.02
small-attached-ebs-piops1000 11.54 ± 0.04
small-attached-ebs-piops2000 23.64 ± 0.15
Threaded I/O Tester v0.3.3: 64MB Random Write - 32 Threads
configuration score error
→ MB/s, more is better
small-attached-ebs 13.03 ± 0.41
small-attached-ebs-piops200 0.87 ± 0.0
small-attached-ebs-piops400 1.75 ± 0.0
small-attached-ebs-piops1000 4.4 ± 0.0
small-attached-ebs-piops2000 8.88 ± 0.02

With a bit of napkin math, we can see that PIOPS 2000 is roughly 5 time slower than no-PIOPS for random reads, and PIOPS 1000 is roughly 3 times slower than no-PIOPS for random writes. So, for this test, it would take PIOPS 10k to match no-PIOPS read performance, and PIOPS 3k to match its write performance.

COMPILE BENCH
Compile Bench v0.6: Test: Compile
configuration score error
→ MB/s, more is better
small-attached-ebs 27.87 ± 0.96
small-attached-ebs-piops200 9.1 ± 0.03
small-attached-ebs-piops400 18.27 ± 0.05
small-attached-ebs-piops1000 35.36 ± 0.04
small-attached-ebs-piops2000 35.35 ± 0.0
Compile Bench v0.6: Test: Initial Create
configuration score error
→ MB/s, more is better
small-attached-ebs 24.17 ± 1.13
small-attached-ebs-piops200 8.41 ± 0.37
small-attached-ebs-piops400 14.38 ± 0.17
small-attached-ebs-piops1000 28.68 ± 0.04
small-attached-ebs-piops2000 28.75 ± 0.15
Compile Bench v0.6: Test: Read Compiled Tree
configuration score error
→ MB/s, more is better
small-attached-ebs 46.82 ± 5.14
small-attached-ebs-piops200 100.15 ± 0.63
small-attached-ebs-piops400 102.61 ± 1.25
small-attached-ebs-piops1000 47.89 ± 0.64
small-attached-ebs-piops2000 49.1 ± 0.54
UNPACKING THE LINUX KERNEL
Unpacking The Linux Kernel: linux-2.6.32.tar.bz2
configuration score error
← seconds, less is better
small-attached-ebs 48.8 ± 1.11
small-attached-ebs-piops200 56.25 ± 2.95
small-attached-ebs-piops400 54.11 ± 1.02
small-attached-ebs-piops1000 51.0 ± 0.82
small-attached-ebs-piops2000 46.48 ± 0.35
POSTMARK
PostMark v1.51: Disk Transaction Performance
configuration score error
→ TPS, more is better
small-attached-ebs 614 ± 5.36
small-attached-ebs-piops200 210 ± 1.96
small-attached-ebs-piops400 403 ± 2.6
small-attached-ebs-piops1000 606 ± 1.45
small-attached-ebs-piops2000 634 ± 2.33
GZIP COMPRESSION
Gzip Compression: 2GB File Compression
configuration score error
← seconds, less is better
small-attached-ebs 55.39 ± 1.36
small-attached-ebs-piops200 279.83 ± 4.93
small-attached-ebs-piops400 138.04 ± 2.55
small-attached-ebs-piops1000 60.36 ± 1.16
small-attached-ebs-piops2000 56.85 ± 1.1
POSTGRESQL PGBENCH
PostgreSQL pgbench v8.4.11: TPC-B Transactions Per Second
configuration score error
→ TPS, more is better
small-attached-ebs 250.39 ± 3.3
small-attached-ebs-piops1000 301.47 ± 4.62
small-attached-ebs-piops2000 335.26 ± 17.91

So apparently this benchmark ran as expected with PIOPS 1000 and 2000. At some point, I’ll need to go back and re-run with 200 and 400 to see what really happened here. :S

APACHE BENCHMARK
Apache Benchmark v2.4.3: Static Web Page Serving
configuration score error
→ Requests/s, more is better
small-attached-ebs 1233.63 ± 2.23
small-attached-ebs-piops200 1112.21 ± 5.52
small-attached-ebs-piops400 1118.26 ± 3.25
small-attached-ebs-piops1000 1135.76 ± 4.5
small-attached-ebs-piops2000 1233.82 ± 9.55

This is a pretty dull benchmark. It doesn’t look like PIOPS 200 through to 2000 makes much of a difference in performance.

observations

PIOPS 1000 and 2000 tend to out-perform PIOPS 400, which in turn out-performs PIOPS 200.

Cases where PIOPS 1000 clearly out-performed no-PIOPS:

  • AIO-Stress
  • SQLite
  • FS-Mark
  • Dbench with 1 client
  • Compile Bench: Compile
  • PostgreSQL pgbench

Cases where PIOPS 1000 performed about the same as no-PIOPS (± 10%):

  • Flexible IO Tester
  • Dbench with 12, 48 and 128 clients
  • IOzone
  • Compile Bench: Initial Create and Read Compiled Tree
  • Unpacking The Linux Kernel
  • PostMark
  • Gzip Compression
  • Apache Benchmark

Cases where PIOPS 1000 and 2000 were out-classed by no-PIOPS:

  • Threaded I/O Tester with 32 threads

conclusions

For most cases, it seems that PIOPS 1000 is sufficient to smooth out the spikey performance of no-PIOPS without sacrificing performance.

PIOPS 2000 was not anywhere near double the performance of PIOPS 1000, except for the Threaded I/O Tester benchmark. This may be due to the “low” performance rating of the network interface on the m1.small EC2 instance. If you’re going to be using m1.small instances, it does not seem worth going past PIOPS 1000.

If you actually care about EBS performance and can afford it, then you’ll probably be using an “EBS-optimized” size (e.g. m1.large) that offers additional network bandwidth and EBS performance. The tests I’ve been running so far cover cases where capacity and cost-effectiveness are more important than performance, but I will be testing with different sizes in future articles.

series

  1. Phoronix Test Suite on AWS
  2. PTS Results on Provisioned IOPS on AWS EBS
  3. PTS Results on Provisioned IOPS on AWS EBS, Part 2
  4. PTS on AWS with m1.medium EC2 and EBS with Provisioned IOPS

Ron -