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)
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
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.