【AWS】EBSパフォーマンスを引き出すためのEC2インスタンスタイプ

こんにちは、菊池です。

先日の機能アップデートで、EBSのProvisioned IOPS SSD(io1)の最大パフォーマンスが、32,000 IOPS500MB/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に割り当てたパフォーマンスが無駄になることがないよう、注意しましょう。