【AWS】EBSパフォーマンスを引き出すためのEC2インスタンスタイプ
こんにちは、菊池です。
先日の機能アップデートで、EBSのProvisioned IOPS SSD(io1)の最大パフォーマンスが、32,000 IOPS、500MB/sに向上されたとアナウンスがありました。詳しくは以下のエントリを参照ください。
【新機能】Amazon EBSのProvisioned IOPS SSD(io1)の最大IOPSが32,000に向上しました
データベースなど、定常的に高いIOパフォーマンスが必要な用途で利用している場合には、うれしいアップデートではないでしょうか。
早速、向上した上限にパフォーマンスに設定しようとする場合には、EC2のインスタンスタイプにもご注意ください。
EC2インスタンスのEBSパフォーマンス
EBSのIOパフォーマンスは、そのタイプ(IO1、GP2など)によって決定されます。一方で、EC2にもインスタンスタイプによって発揮できるEBSの最大パフォーマンスが設定されていることに注意が必要です。
以下の公式ドキュメントに記載の通り、CPU/メモリ/ネットワーク帯域と同様に、ストレージ性能も設定されています。
CPU/メモリが不要だからといって、小さいインスタンスタイプを利用していると、割り当てたEBSに対して十分な性能が発揮できないことがあります。
例えば、今回アップデートされた、IO1の最大性能である32,000 IOPS、500MB/sを発揮できるインスタンスタイプは以下のように、概ね各インスタンスファミリーの8xlarge以上です。
インスタンスタイプ | 最大スループット(MB/s,128KB I/O) | 最大IOPS(16KB I/O) |
---|---|---|
c4.8xlarge | 500 | 32,000 |
c5.9xlarge | 563 | 32,000 |
c5.18xlarge | 1,125 | 64,000 |
d2.8xlarge | 500 | 32,000 |
f1.16xlarge | 1,750 | 75,000 |
g3.8xlarge | 875 | 40,000 |
g3.16xlarge | 1,750 | 80,000 |
h1.8xlarge | 875 | 40,000 |
h1.16xlarge | 1,750 | 80,000 |
i3.8xlarge | 875 | 32,500 |
i3.16xlarge | 1,750 | 65,000 |
m4.10xlarge | 500 | 32,000 |
m4.16xlarge | 1,250 | 65,000 |
m5.12xlarge | 625 | 32,500 |
m5.24xlarge | 1,250 | 65,000 |
p3.8xlarge | 875 | 40,000 |
p3.16xlarge | 1,750 | 80,000 |
r4.8xlarge | 875 | 37,500 |
r4.16xlarge | 1,750 | 75,000 |
x1.16xlarge | 875 | 40,000 |
x1.32xlarge | 1,750 | 80,000 |
x1e.16xlarge | 875 | 40,000 |
x1e.32xlarge | 1,750 | 80,000 |
M5/C5のバーストIOパフォーマンス
また、最近登場したM5/C5の一部のインスタンスタイプでは、IOパフォーマンスもバースト可能になっています。
公式ドキュメントによると、c5.large、c5.xlarge、c5.2xlarge、m5.large、m5.xlarge、m5.2xlargeでは、24時間毎に最大30分間、以下のバーストパフォーマンスを発揮可能です。
インスタンスタイプ | 最大スループット(MB/s,128KB I/O) | 最大IOPS(16KB I/O) |
---|---|---|
c5.large/c5.xlarge/c5.2xlarge | 281 | 16,000 |
m5.large/m5.xlarge/m5.2xlarge | 265 | 16,000 |
バースト可能な時間を超過すると、それぞれのインスタンスタイプに応じたベースラインパフォーマンスになります。
試してみた
実際に、インスタンスタイプによってEBSパフォーマンスに差が出るのか、試してみました。
検証環境:
- OS:Windows Server 2016
- ツール:CrystalDiskMark 6.0.0
インスタンスは以下の2つのタイプで比較します。
インスタンスタイプ | 最大スループット(MB/s,128KB I/O) | 最大IOPS(16KB I/O) |
---|---|---|
c4.large | 62.5 | 4,000 |
c4.8xlarge | 500 | 32,000 |
EBSは、IO1 700GB、32,000IOPSを割り当てます。
結果:
- c4.large
- c4.8xlarge
シーケンシャルRead/Writeの結果がそれぞれ、インスタンスに設定されたスループットとほぼ同等になっていることがわかります。c4.largeではランダムRead/WriteについてもEC2スループットの限界で抑えられてしまっているようです。
最後に
EBSのパフォーマンスは、EBSのみではなく、EC2のインスタンスタイプによっても制限されることがあります。CPU/メモリが不要でも、高いIOを求める場合には、インスタンスタイプをあげてやる必要があります。EC2側の制限でEBSに割り当てたパフォーマンスが無駄になることがないよう、注意しましょう。