ここでは、ブロックストレージのパフォーマンス基準、異なるブロックストレージデバイスのパフォーマンス、パフォーマンステスト方法、およびテスト結果の解釈方法を紹介します。

ブロックストレージのパフォーマンス基準

ストレージパフォーマンスの測定に関する主な基準は、IOPS、スループットおよびレイテンシです。

  • IOPS

    IOPS (1 秒ごとのインプット/アウトプット操作) は、1 秒間に実行することができる書き込み操作または読み込み操作の数を参照します。 データベースなどの、トランザクション集約型アプリケーションは IOPS に影響を受けます。

    測定される一般的なパフォーマンス特性は、以下のようになります。

    IOPS のパフォーマンス特性 説明
    IOPS の合計 1 秒あたりの I/O 操作の合計数
    ランダムリード IOPS 1 秒あたりのランダムリード I/O 操作の平均回数 ストレージデバイスへのランダムアクセス
    ランダムライト IOPS 1 秒あたりのランダムライト I/O 操作の平均回数
    シーケンシャルリード IOPS 1 秒あたりの平均シーケンシャルリード I/O 操作数 ストレージデバイスへのシーケンシャルアクセス
    シーケンシャルライト IOPS 1 秒あたりの平均シーケンシャルライト I/O 操作数
  • スループット

    スループットは、 1 秒間に正常に転送されるデータサイズを測定します。

    大規模な読み込みまたは書き込み操作を必要とするアプリケーション (Hadoop オフラインコンピューティングアプリケーションなど) はスループットの影響を受けます。

  • レイテンシ

    レイテンシは、 I/O リクエストを完了させるために必要な時間です。

    レイテンシに影響を受けるアプリケーション (データベースなど) は、高レイテンシによりパフォーマンスの低下やアプリケーションでのエラー報告が発生するため、SSD ディスク、SSD 共有ブロックストレージまたはローカル SSD ディスクの使用を推奨します。

    スループットに影響を受けるアプリケーション (Hadoop オフラインコンピューティングなど) はあまりレイテンシの影響は受けません。"d1" または "d1ne" インスタンスタイプファミリーのインスタンスなどの、ローカル HDD を持った ECS インスタンスの使用を推奨します。

パフォーマンス

このセクションでは、さまざまなブロックストレージプロダクトのパフォーマンスについて説明します。

ブロックストレージ容量は、KiB (Kibibyte)、MiB (Mebibyte)、GiB (Gibibyte) または TiB (Tebibyte) などのバイナリ単位で測定されます。
1 KiB は 1,024 bytes となります。 1MiB は 1,024 KiB となります。 1GiB は 1,024 MiB となります。 1TiB は 1,024 GiB となります。
  • クラウドディスク

    さまざまなタイプのクラウドディスクの機能と一般的なシナリオは、以下のようになります。
    パラメーター ESSD クラウドディスク SSD クラウドディスク Ultra クラウドディスク ベーシッククラウドディスク
    ディスク 1 つの容量 32,768 GiB 32,768 GiB 32,768 GiB 2,000 GiB
    最大 IOPS 1,000,000 25,000* 5,000 数千
    最大スループット 4,000 MBps 300 MBps* 140 MBps 30−40 MBps
    1 つのディスクのパフォーマンスを計算する式** IOPS = min{1,800 + 50 × 容量, 1,000,000} IOPS = min{1,800 + 30 × 容量, 25,000} IOPS = min{1,800 + 8 × 容量, 5,000} N/A
    スループット = min{120 + 0.5 × 容量, 4,000} MBps スループット = min{120 + 0.5 × 容量, 300} MBps スループット = min{100 + 0.15 × 容量, 140} MBps N/A
    データ信頼性 99.9999999% 99.9999999% 99.9999999% 99.9999999%
    API 名 cloud_essd cloud_ssd cloud_efficiency cloud
    シナリオ
    • OLTP データベース: MySQL、PostgreSQL、Oracle および SQL Server などのリレーショナルデータベース
    • NoSQL データベース: MongoDB、HBase および Cassandra などの非リレーショナルデータベース
    • ElasticSearch 分散ログ: Elasticsearch、Logstash および Kibana (ELK) ログ解析
    • MySQL、SQL Server、PostgreSQL および Oracle などの大規模および中規模なリレーショナルデータベース
    • 高いデータ信頼性を必要とする大規模および中規模な開発またはテストアプリケーション
    • MySQL、SQL Server、PostgreSQL などの小規模および中規模のリレーショナルデータベース
    • 高いデータ信頼性および中程度のパフォーマンスを必要とする大規模および中規模な開発またはテストアプリケーション
    • 少ない頻度のアクセス、または低 I/O を伴うアプリケーション 高い I/O パフォーマンスを必要とする場合、SSD ディスクの利用を推奨します。
    • 低コストおよびランダムな読み書き I/O 操作を必要とするアプリケーション

    * SSD クラウドディスクのパフォーマンスはデータブロックサイズにより異なります。 データブロックサイズが小さくなるほど、低いスループットおよび高い IOPS という結果になります。以下の表のようになります。 SSD クラウドディスクは、I/O 最適化インスタンスに接続された場合のみ想定されるパフォーマンスを達成できます。 言い換えると、SSD クラウドディスクは、I/O 最適化インスタンスに接続されなければ想定されるパフォーマンスを達成できません。

    データブロックサイズ 最大 IOPS スループット
    4 KiB 約 25,000 300 MBps を大幅に下回る
    16 KiB 約 17,200 約 300 MBps
    32 KiB 約 9,600
    64 KiB 約 4,800

    ** SSD クラウドディスクを例にとり、1 つのディスクのパフォーマンスを解説します。

    • 最大 IOPS: ベースラインは 1,800 IOPSです。 ストレージ 1 GiB あたり 30 IOPS まで増加します。 最大 IOPS は 25,000 です。
    • 最大スループット: ベースラインは 120 MBps です。 ストレージ 1 GiB あたり 0.5 MBps まで増加します。 最大スループットは 300 MBps です。

    ランダム書き込みレイテンシはディスクカテゴリーによって異なり、以下のようになります。

    • ESSD ディスク: 0.1−0.2 ms
    • SSD ディスク: 0.5−2 ms
    • Ultra クラウドディスク: 1−3 ms
    • ベーシッククラウドディスク: 5−10 ms
  • 共有ブロックストレージ

    さまざまなタイプの共有ブロックストレージの機能と一般的なシナリオは、以下の表のようになります。

    パラメーター SSD 共有ブロックストレージ Ultra 共有ブロックストレージ
    容量
    • シングルディスク: 32,768 GiB
    • シングルインスタンス: 128 TiB
    • シングルディスク: 32,768 GiB
    • シングルインスタンス: 128 TiB
    最大ランダムリード/ライト IOPS* 30,000 5,000
    最大シーケンシャルリード/ライトスループット* 512 MBps 160 MBps
    1 つのディスクのパフォーマンスを計算する式** IOPS = min{1,600 + 40 * 容量, 30,000} IOPS = min{1,000 + 6 * 容量, 5,000}
    スループット = min{100 + 0.5 * 容量, 512} MBps スループット = min{50 + 0.15 * 容量, 160} MBps
    シナリオ
    • Oracle RAC
    • SQL Server
    • フェールオーバークラスター
    • サーバーの高可用性アーキテクチャ
    • サーバーの高可用性アーキテクチャ
    • 開発およびテストデータベースの高可用性アーキテクチャ

    *上記の表に記載されている最大 IOPS およびスループットは、ストレステスト中に同時に 2 つ以上のインスタンスに接続された空の共有ブロックストレージデバイスの最大パフォーマンスです。

    ** SSD 共有ブロックストレージデバイスを例にとり、1 つのディスクのパフォーマンスを解説します。

    • 最大 IOPS: ペースライン 1,600 IOPS です。 ストレージ 1 GiB ごとに 40 IOPS まで増加します。 最大 IOPS は 30,000 です。
    • 最大スループット: ベースラインは 100 MBps です。 ストレージ 1 GiB あたり 0.5 MBps まで増加します。 最大スループットは 512 MBps です。

    レイテンシは共有ブロックストレージのカテゴリーによって異なり、以下のようになります。

    • SSD 共有ブロックストレージ: 0.5−2 ms
    • Ultra 共有ブロックストレージ: 1−3 ms
  • ローカルディスク

    ローカルディスクのパフォーマンスについては、『ローカルディスク』をご参照ください。

パフォーマンステスト

Linux インスタンスおよび Windows インスタンスの両方で、ブロックストレージパフォーマンスのテストには "FIO" ツールを推奨します。

ブロックストレージパフォーマンスのテストには他のツールも使用できますが、ベンチマークパフォーマンスが異なります。 たとえば、"dd"、"sysbench" および "iometer" などのツールは、テストパラメーターおよびファイルシステムに影響され、実際のディスクパフォーマンスを反映できません。 このトピックでのパフォーマンス結果は、"FIO" によりテストされた Linux インスタンスのもので、共有ブロックストレージプロダクトのパフォーマンスリファレンスとして使用されています。

このセクションでは、例として、Linux インスタンスで "FIO" ツールを使用したディスクパフォーマンステストの方法を解説します。 ディスクテストの前に、ディスクが 4 Kib 単位に揃えられていることを確認します。

警告 空のディスクをテストし、より正確なパフォーマンスデータを取得できますが、ファイルシステムの構造は損傷します。 テスト前にお使いのデータをバックアップするようにしてください。 データ損失を防ぐため、データのない新しい ECS インスタンスを使用しディスクテストを行うことを推奨します。
  • ランダムライト IOPS のテスト

    fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing
  • ランダムリード IOPS のテスト

    fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing
  • ライトスループットのテスト

    fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Write_PPS_Testing
  • リードスループットのテスト

    fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Read_PPS_Testing

ランダムライト IOPS テスト用コマンドを例にとり、"FIO" コマンドのパラメーターの意味を解説します。以下の表のようになります。

パラメーター 説明
-direct=1 テスト時に I/O バッファを無視します。 データは直接書き込まれます。
-iodepth=128 AIO 使用時に、128 I/O リクエストまで同時に行うことができることを示しています。
-rw=randwrite 読み書きポリシーがランダムライトであることを示しています。 他のオプションは以下のようになります。
  • randread (ランダムリード)
  • read (シーケンシャルリード)
  • write (シーケンシャルライト)
  • randrw (ランダムリードおよびランダムライト)
-ioengine=libaio テスト方法として "libaio" を利用します (Linux AIO, 非同期 I/O)。 通常、I/O を利用するアプリケーションには 2 つの方法があります。
  • 同期

    同期 I/O は、一度に 1 つの I/O リクエストのみを送信し、カーネルが完了した後にのみ返します。 この場合、"iodepth" は 1 つのジョブに対して常に 1 未満ですが、複数の同時ジョブに解決されます。 通常、"iodepth" により、16 から 32 の同時ジョブで処理されます。

  • 非同期

    非同期メソッドは、 "libaio" を使用し、毎回 I/O リクエストのバッチを送信します。これにより、相互動作時間が短縮され、相互動作がより効果的になります。

-bs=4k

1つの I/O に対するそれぞれのブロックサイズは 4 KiB であることを示しています。 指定しない場合、デフォルト値は 4 KiB が使用されます。

IOPS テスト時に、bs を小さな値、たとえばこの例のコマンドの "4k" などに設定することを推奨します。

スループットテスト時に、bs に大きな値、この例のコマンドの 1,024k などの大きな値に設定することを推奨します。

-size=1G テストファイルのサイズが 1 GiB であることを示しています。
-numjobs=1 テストジョブの数は 1 です。
-runtime=1000 テスト時間は 1,000 秒です。 指定しない場合、テストでは、-bs により指定されたデータブロックサイズで、ブロックごとに -sizeブロックで指定されたファイルサイズのデータを書き込みます。
-group_reporting テスト結果の表示モードです。 Group_reporting は、それぞれのジョブのすべての統計を表示する代わりに、それぞれのジョブの統計が集計されたことを意味します。
-filename=iotest テストファイル名です。たとえば、"iotest" となります。 空のディスクをテストし、より正確なパフォーマンスデータを取得できますが、テストによりファイルシステムの構造は損傷します。 テスト前にお使いのデータをバックアップすることを確認してください。
-name=Rand_Write_Testing テストタスクの名前です。