Initial results running the Phoronix Test Suite with Provision IOPS…
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)
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.
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.
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
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
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
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
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
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
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
With 48 clients, we see one of those rare moments when performance variance with
Provisioned IOPS is higher than without. Strange.
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
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
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
THREADED I/O TESTER
This benchmark highlights a specific case where provisioning 200-400 IOPS performs
abysmally compared to no-PIOPS.
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
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
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
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
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
Here’s one of the few cases where provisioning only 200 IOPS still managed to
perform significantly better than without.
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
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
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
Here’s another use case where Provisioned IOPS (at least at the 200 and 400 level)
actually has greater performance variance than without.
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
Not sure why this benchmark didn’t run for the Provisioned IOPS cases. It may simply
have been disabled in the version of PTS I used.
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
Here’s the last case where Provisioned IOPS (at least at the 200 and 400 level)
actually has greater performance variance than without.
observations
For almost every benchmark, EBS with Provisioned IOPS had a lower variance between
test runs, often drastically lower. This is the stated value proposition for this feature:
you pay more, but you get a guaranteed level of performance. Without Provisioned IOPS,
EBS performance varies quite a bit with spikes and valleys. If your application depends
on consistent storage performance, then you really ought to turn Provisioned IOPS on.
That said, provisioning only 200 IOPS tended to worsen performance in almost every
benchmark. While it’s the cheapest option, the compromise here may not be suitable for all
applications: trading spikey but decent performance for consistently poor performance.
Provisioning 400 IOPS tended to performance somewhere between no-PIOPS and 200 PIOPS.
conclusions
I chose to examine the Provisioned IOPS feature for 200 IOPS and 400 IOPS. While the
results are interesting, I did not find the point where paying for PIOPS brings
consistently better performance than not.
According to Amazon’s documentation on EC2 Instance Types, m1.small instances only
have a “low” network performance rating. This is likely to affect my test results,
as EC2 instances must communicate with EBS volumes over their network interface.
I will have to follow-up these results with a wider range of Provisioned IOPS levels,
and perhaps a wider range of instances sizes.