Amazon EBS は、gp2 または io1 ボリュームのパフォーマンスを改善するために使用する最適な I/O サイズをどのように計算していますか?

最終更新日: 2020 年 6 月 8 日

gp2 または io1 Amazon Elastic Block Store (Amazon EBS) ボリュームのスループットパフォーマンスを改善したいと考えています。Amazon EBS は、パフォーマンスを改善するために使用する I/O サイズをどのように計算していますか?

解決方法

gp2 および io1 EBS ボリュームの場合、Amazon EBS は、1 秒あたりの入力/出力 (IOPS) の観点からパフォーマンスを計算します。gp2 および io1 ボリュームは、256 KiB の最大 I/O を処理できます。

I/O 操作のサイズによって、EBS ボリュームが提供するスループットが決まります。Amazon EBS は、次の方程式を使用してスループットを計算します。スループット = IOPS の数 * I/O 操作あたりのサイズ

I/O 操作あたりのサイズは、ボリュームタイプによって異なります。

  • gp2 ボリューム
    最大 IOPS = 16,000
    最大スループット = 250 MiB
  • io1 ボリューム
    最大 IOPS = 64,000
    最大スループット = 1,000 MiB

注意: Amazon EBS では、Nitro ベースのインスタンスでのみ最大 1,000 MiB/秒のスループットが保証されます。他のインスタンスファミリーは、最大 500 MiB/秒が保証されます。古い io1 ボリュームでは、ModifyVolume アクションを実行するまで、完全なパフォーマンスが得られないことがあります。

Amazon EBS は、次の方程式を使用して最適な I/O サイズを計算します。スループット/IOPS の数 = 最適な I/O サイズ

  • gp2 ボリュームの最適な I/O サイズ: 250 MiB * 1024/16000 = 16 KiB
  • io1 ボリュームの最適な I/O サイズ: 1000 MiB * 1024/64000 = 16 KiB

Amazon EBS は、32 KiB 以上の小さなシーケンシャル I/O 操作をマージして、256 KiB の単一の I/O を形成してから、処理します。小さなシーケンシャル I/O 操作をより大きな 1 つの I/O 操作にマージすると、スループットが向上します。

たとえば、アプリケーションが 32 KiB の小さな I/O 操作を実行している場合:

  • シーケンシャル操作: Amazon EBS は、シーケンシャル (物理的に連続する) 操作を最大 I/O サイズである 256 KiB にマージします。このシナリオでは、オペレーティングシステムによって送信された 8 回の I/O 操作を実行するために、Amazon EBS は 1 つの IOPS のみをカウントします。
  • ランダム操作: Amazon EBS は、ランダム I/O 操作を個別にカウントします。32 KiB の単一のランダム I/O 操作は 1 回の IOPS としてカウントされます。このシナリオでは、Amazon EBS は、8 回のランダムな 32 KiB の I/O 操作を OS から送信された 8 回の IOPS としてカウントします。

Amazon EBS では、より小さい I/O 操作を、より多くの I/O 帯域幅を使用するより大きな I/O 操作にマージしようとすると、最大 IOPS を達成する前にスループット制限に達する可能性があります。これを回避するには、アプリケーションの I/O 操作は、Amazon EBS が 16 KiB の単一の IOPS としてカウントするのに十分なほどランダムである必要があります。

Amazon EBS は、最大 256 KiB を超える I/O 操作をより小さな操作に分割します。たとえば、I/O サイズが 500 KiB の場合、Amazon EBS は操作を 2 回の IOPS に分割します。1 つ目は 256 KiB で、2 つ目は 244 KiB です。

注意: 間接記述子をサポートしていないインスタンスまたはカーネルの平均 I/O サイズは、44 KiB かその前後です。Linux カーネル 3.8 以降は間接記述子をサポートしていないため、I/O サイズが 44 KiB に制限される場合があります。