すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:ブロックストレージのパフォーマンステスト

最終更新日:Aug 21, 2026

ブロックストレージのベンチマークは、その性能を評価し、パフォーマンスを最大限に引き出すための最適化に役立ちます。raw ディスクをテストすることで、最も正確なパフォーマンスメトリクスを取得できます。このトピックでは、Linux システム上でオープンソースツールの Fio を使用して、IOPS、スループット、レイテンシーなど、raw ディスクの主要なパフォーマンスメトリクスをベンチマークする方法について説明します。

説明

Fio (Flexible I/O Tester) は、ランダムまたはシーケンシャルの読み書きなど、さまざまなワークロードでストレージデバイスをベンチマークするために使用される、強力なオープンソースの I/O テストツールです。

操作手順

重要
  • raw ディスクをテストすることで、最も正確なブロックストレージのパフォーマンス結果が得られます。ただし、パーティション、ファイルシステム、またはその他のデータが含まれるブロックストレージデバイスに対して Fio を直接実行すると、ファイルシステムエラーやデータ損失が発生する可能性があります。開始する前に、スナップショットを作成してデータをバックアップしてください。詳細については、「手動でスナップショットを作成する」をご参照ください。

  • データ損失を防ぐため、システムディスクまたはデータを含むデータディスクはテストしないよう強く推奨します。テストには、新規作成した未初期化の空のデータディスクを使用することを推奨します。

  • パフォーマンステストの結果はテスト環境で取得されたものであり、参考値です。本番環境では、ネットワーク状況や同時アクセスなどの要因により、クラウドディスクのパフォーマンスが変動する場合があります。実際のパフォーマンスとは異なる場合があります。

  • テスト完了後、新しいクラウドディスクを次のように処理します。

このトピックでは、Alibaba Cloud Linux 3.2104 LTS 64-bit のパブリックイメージを例に説明します。手順は OS によって異なる場合があります。

  1. ECS インスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. 次のコマンドを実行して、ブロックストレージのデバイス名を確認します。

    sudo fdisk -lu

    コマンド出力では、/dev/vda はシステムディスク、/dev/vdb と /dev/vdc はデータディスクです。/dev/vdc にはパーティションがありません。

    [ecs-a                          ]$ sudo fdisk -lu
    Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: F51132A7-67B1-4650-806D-FD0DE6E1210C
    Device      Start      End  Sectors  Size Type
    /dev/vda1    2048     6143     4096    2M BIOS boot
    /dev/vda2    6144   415743   409600  200M EFI System
    /dev/vda3  415744 83886046 83470303 39.8G Linux filesystem
    Disk /dev/vdb: 30 GiB, 32212254720 bytes, 62914560 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: C36DF120-8650-4188-8043-AEF9C85F31EF
    Device     Start      End  Sectors Size Type
    /dev/vdb1   2048 62912511 62910464  30G Linux filesystem
    Disk /dev/vdc: 40 GiB, 42949672960 bytes, 83886080 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

    コマンドの出力に示すように、このインスタンスには 3 つのブロックストレージデバイスがあります。システムディスクの /dev/vda と、データディスクの /dev/vdb および /dev/vdc です。

  3. 次のコマンドを実行して、ブロックストレージデバイスにパーティションまたはファイルシステムがあるかどうかを確認します。

    sudo blkid
    [ecs-a                          ]$ sudo blkid
    /dev/vdb1: UUID="9c32c24f-d2b8-4aa8-8" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="4bd66635-f5f4-4dc0-9bdd-664fd5b8d2fb"
    /dev/vda2: SEC_TYPE="msdos" UUID="7E" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="82a50cd6-9899-41eb-91fe-7027bf257086"
    /dev/vda3: LABEL="root" UUID="beef9d8d-ba84-46d9-8" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="e0d4fa20-912d-4e86-943e-6b0368xxxxxx"
    /dev/vda1: PARTUUID="d083a7cd-a7ea-4898-89d5-8e1510bed584"

    出力から、デバイス /dev/vda と /dev/vdb にはパーティションとファイルシステムがあることがわかります。/dev/vdc に関する情報は返されていないため、/dev/vdc にはパーティションまたはファイルシステムがないと判断できます。

    警告

    テスト対象のデバイスにパーティション、ファイルシステム、またはデータが含まれている場合、そのデバイスに対して Fio を直接実行すると、ファイルシステムエラーやデータ損失が発生する可能性があります。データディスクにパーティションとファイルシステムが含まれている場合は、テスト用に新しい空のデータディスクを作成することを推奨します。

    1. 同一構成の従量課金クラウドディスクを作成し、インスタンスにアタッチしてテストできます。詳細については、「データディスクを作成する」をご参照ください。

    2. テスト完了後、必要に応じてインスタンスをリリースできます。詳細については、「インスタンスをリリースする」をご参照ください。

  4. ブロックストレージのパフォーマンスをベンチマークする前に、データ損失を防ぐため、テスト対象デバイス上のデータをバックアップしてください。詳細については、「手動でスナップショットを作成する」をご参照ください。

    説明

    スナップショットの使用には課金されます。詳細については、「スナップショットの課金」をご参照ください。

  5. 次のコマンドを実行して、libaio ライブラリと Fio ツールをインストールします。お使いのオペレーティングシステムに応じてコマンドを選択してください。

    Alibaba Cloud Linux 2/3、CentOS 6 以降

    説明

    CentOS 6は寿命 (EOL) に達しました。 Linuxコミュニティルールに従って、すべてのコンテンツが次のCentOS 6リポジトリアドレスから削除され http://mirror.centos.org/centos-6/ た。 Alibaba CloudでデフォルトのCentOS 6リポジトリを引き続き使用すると、エラーが報告されます。 CentOS 6の特定のインストールパッケージを使用するには、CentOS 6リポジトリアドレスを変更します。 詳細については、「CentOS 6ソースアドレスの変更」をご参照ください。

    sudo yum install libaio libaio-devel fio -y

    Debian 9 以降、Ubuntu 14 以降

    重要

    Debian 9 と Debian 10 はサポートが終了 (EOL) しています。ECS インスタンスが Debian 9 または Debian 10 を実行している場合は、先にリポジトリのアドレスを変更してください。詳細については、「EOL 後の CentOS および Debian のリポジトリアドレスの変更」をご参照ください。

    sudo apt-get update
    sudo apt-get install libaio* fio -y
  6. /tmp ディレクトリに移動します。

    cd /tmp
  7. パフォーマンステストコマンドを実行します。特定のコマンドについては、以降のセクションをご参照ください。

  8. テスト結果を確認します。値はクラウドディスクによって異なる場合があります。次のコードブロック内の値は参考値です。

  • IOPS 関連のテスト結果については、IOPS=*** フィールドをご参照ください。 次の Fio 出力サンプルは、ランダム書き込み (Rand_Write) テストの結果を示しています。 書き込み行では、IOPS=2301 がランダム書き込みの主要な性能指標です:

    Starting 1 process
    Jobs: 1 (f=0): [f(1)][100.0%][w=9061KiB/s][w=2265 IOPS][eta 00m:00s]
    Rand_Write Testing: (groupid=0, jobs=1): err= 0: pid=15900: Tue Nov 19 11:28:24 2024
      write: IOPS=2301, BW=9206KiB/s (9427kB/s)(1024MiB/113896msec); 0 zone resets
        slat (usec): min=2, max=1718, avg= 5.43, stdev= 7.98
        clat (usec): min=382, max=119809, avg=55606.05, stdev=7040.12
        lat (usec): min=394, max=119812, avg=55611.49, stdev=7039.41
        clat percentiles (msec):
         |  1.00th=[    9],  5.00th=[   51], 10.00th=[   51], 20.00th=[   51],
         | 30.00th=[   51], 40.00th=[   57], 50.00th=[   60], 60.00th=[   61],
         | 70.00th=[   61], 80.00th=[   61], 90.00th=[   61], 95.00th=[   61],
         | 99.00th=[   63], 99.50th=[   65], 99.90th=[   67], 99.95th=[   77],
         | 99.99th=[  101]
       bw (  KiB/s): min= 9000, max=28976, per=100.00%, avg=9213.14, stdev=1317.97, samples=227
       iops        : min= 2250, max= 7244, avg=2303.28, stdev=329.49, samples=227
      lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
      lat (msec)   : 2=0.03%, 4=0.45%, 10=0.52%, 20=0.04%, 50=0.82%
      lat (msec)   : 100=98.11%, 250=0.01%
  • スループット関連のテスト結果については、次の出力に示すように、BW=*** フィールドをご参照ください:

    Jobs: 1 (f=1): [W(1)][100.0%][w=85.0MiB/s][w=85 IOPS][eta 00m:00s]
    Write_PPS_Testing: (groupid=0, jobs=1): err= 0: pid=17934: Tue Nov 19 11:32:19 2024
      write: IOPS=124, BW=124MiB/s (130MB/s)(1024MiB/8229msec); 0 zone resets
        slat (usec): min=27, max=4026, avg=94.51, stdev=125.97
        clat (msec): min=4, max=1154, avg=513.48, stdev=208.14
         lat (msec): min=4, max=1154, avg=513.57, stdev=208.15
        clat percentiles (msec):
         |  1.00th=[   17],  5.00th=[   75], 10.00th=[   93], 20.00th=[  567],
         | 30.00th=[  584], 40.00th=[  584], 50.00th=[  584], 60.00th=[  584],
         | 70.00th=[  584], 80.00th=[  584], 90.00th=[  592], 95.00th=[  693],
         | 99.00th=[ 1062], 99.50th=[ 1099], 99.90th=[ 1133], 99.95th=[ 1150],
         | 99.99th=[ 1150]
       bw (  KiB/s): min=30720, max=356352, per=96.43%, avg=122881.25, stdev=65548.59, samples=16
       iops        : min=   30, max=  348, avg=120.00, stdev=64.01, samples=16
      lat (msec)   : 10=0.49%, 20=0.68%, 50=2.15%, 100=10.74%, 250=1.86%
      lat (msec)   : 500=3.22%, 750=76.46%, 1000=2.73%, 2000=1.66%
      cpu          : usr=0.89%, sys=0.45%, ctx=1025, majf=0, minf=10
      IO depths    : 1=0.1%, 2=0.2%, 4=0.4%, 8=0.8%, 16=1.6%, 32=3.1%, >=64=93.8%
         submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
         complete  : 0=0.0%, 4=99.9%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
         issued rwts: total=0 1024 0 0 short=0 0 0 0 dropped=0 0 0 0
  • レイテンシー関連のテスト結果については、lat (usec) フィールドをご参照ください。合計レイテンシー統計行 lat (usec): min=254, max=169188, avg=432.25, stdev=487.95 では、平均レイテンシーは約 432 マイクロ秒です。

    Jobs: 1 (f=1): [w(1)][100.0%][w=9169KiB/s][w=2292 IOPS][eta 00m:00s]
    Rand_Write_Latency_Testing: (groupid=0, jobs=1): err= 0: pid=19530: Tue Nov 19 11:38:31 2024
      write: IOPS=2301, BW=9206KiB/s (9427kB/s)(1024MiB/113903msec); 0 zone resets
        slat (usec): min=2, max=19160, avg= 8.68, stdev=40.53
        clat (usec): min=3, max=169175, avg=423.57, stdev=486.23
         lat (usec): min=254, max=169188, avg=432.25, stdev=487.95
        clat percentiles (usec):
         |  1.00th=[  334],  5.00th=[  343], 10.00th=[  347], 20.00th=[  351],
         | 30.00th=[  355], 40.00th=[  359], 50.00th=[  367], 60.00th=[  371],
         | 70.00th=[  379], 80.00th=[  396], 90.00th=[  465], 95.00th=[  562],
         | 99.00th=[ 1614], 99.50th=[ 2671], 99.90th=[ 5735], 99.95th=[ 6194],
         | 99.99th=[ 7439]
       bw (  KiB/s): min= 5840, max=10416, per=100.00%, avg=9211.26, stdev=495.72, samples=227
       iops        : min= 1460, max= 2604, avg=2302.80, stdev=123.94, samples=227
      lat (usec)   : 4=0.01%, 10=0.01%, 50=0.01%, 100=0.01%, 250=0.01%
      lat (usec)   : 500=93.01%, 750=4.06%, 1000=0.97%
      lat (msec)   : 2=1.23%, 4=0.42%, 10=0.30%, 20=0.01%, 50=0.01%
      lat (msec)   : 250=0.01%
      cpu          : usr=0.84%, sys=3.00%, ctx=262469, majf=0, minf=10

クラウドディスクのパフォーマンステストコマンド

警告

テスト対象のデバイスにパーティション、ファイルシステム、またはデータが含まれている場合、そのデバイスに対して Fio を直接実行すると、ファイルシステムエラーやデータ損失が発生する可能性があります。データディスクにパーティションとファイルシステムが含まれている場合は、テスト用に新しい空のデータディスクを作成することを推奨します。

  1. 同一構成の従量課金クラウドディスクを作成し、インスタンスにアタッチしてテストできます。詳細については、「データディスクを作成する」をご参照ください。

  2. テスト完了後:

以下のコマンドのパラメーター値は参考用です。/dev/your_device を、ステップ 2 で特定したブロックストレージデバイスの名前に置き換えてください。例えば、テスト対象のクラウドディスクのデバイス名が /dev/vdb の場合、コマンド内の /dev/your_device を /dev/vdb に置き換える必要があります。Fio パラメーターの詳細については、「Fio パラメーター」をご参照ください。

  • クラウドディスクのランダム書き込みIOPSのテスト:

    sudo fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Write_Testing
  • クラウドディスクのランダム読み取りIOPSのテスト:

    sudo fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Read_Testing
  • クラウドディスクのシーケンシャル書き込みスループットのテスト:

    sudo fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Write_PPS_Testing
  • クラウドディスクのシーケンシャル読み取りスループットのテスト:

    sudo fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Read_PPS_Testing
  • クラウドディスクのランダム書き込みレイテンシーのテスト:

    sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Write_Latency_Testing
  • クラウドディスクのランダム読み取りレイテンシーのテスト:

    sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Read_Latency_Testing

特定の種類のクラウドディスクをテストする手順の詳細については、「ESSD の IOPS パフォーマンスのベンチマーク」をご参照ください。

ローカルディスクのパフォーマンステストコマンド

警告

テスト対象のデバイスにパーティション、ファイルシステム、またはデータが含まれている場合、そのデバイスに対して Fio を直接実行すると、ファイルシステムエラーやデータ損失が発生する可能性があります。データディスクにパーティションとファイルシステムが含まれている場合は、テスト用にローカルディスクを備えた新しいインスタンスを作成することを推奨します。

  1. ローカルディスクは、インスタンス作成時にのみ作成できます。テストを実行するには、同一構成の新しいインスタンスを作成してください。詳細については、「ウィザードを使用してインスタンスを作成する」をご参照ください。

  2. テスト完了後、不要であればインスタンスをリリースします。

以下のテストコマンドは、NVMe SSD ローカルディスクおよび SATA HDD ローカルディスクに適用されます。コマンド内のパラメーター値は参考用です。/dev/your_device を、ステップ 2 で特定したブロックストレージデバイスの名前に置き換えてください。たとえば、テスト対象のローカルディスクのデバイス名が /dev/vdb の場合、コマンド内の /dev/your_device を /dev/vdb に置き換える必要があります。Fio パラメーターの詳細については、「Fio パラメーター」をご参照ください。

  • ローカルディスクのランダム書き込みIOPSのテスト:

    sudo fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • ローカルディスクのランダム読み取りIOPSのテスト:

    sudo fio -direct=1 -iodepth=32 -rw=randread -ioengine=libaio -bs=4k -numjobs=4 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • ローカルディスクのシーケンシャル書き込みスループットのテスト:

    sudo fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • ローカルディスクのシーケンシャル読み取りスループットのテスト:

    sudo fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=128k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • ローカルディスクのランダム書き込みレイテンシーのテスト:

    sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • ローカルディスクのランダム読み取りレイテンシーのテスト:

    sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • ローカルディスクのシーケンシャル書き込みレイテンシーのテスト:

    sudo fio -direct=1 -iodepth=1 -rw=write -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test
  • ローカルディスクのシーケンシャル読み取りレイテンシーのテスト:

    sudo fio -direct=1 -iodepth=1 -rw=read -ioengine=libaio -bs=4k -numjobs=1 -time_based=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=test

Fioパラメータ

次の表では、テストコマンドで使用する Fio パラメータについて説明します。

パラメータ

説明

direct

ダイレクト I/O を使用するかどうかを指定します。デフォルト値:1。

  • 1:ダイレクト I/O を使用します。I/O キャッシュをバイパスし、データをストレージデバイスに直接書き込みます。

  • 0:ダイレクト I/O を使用しません。

iodepth

テストの I/O キュー深度です。たとえば、-iodepth=128 は、Fio が最大 128 個の未完了の I/O リクエストを保持できることを示します。

rw

テストの読み取り/書き込みポリシーです。有効な値:

  • randwrite:ランダム書き込み。

  • randread:ランダム読み取り。

  • read:シーケンシャル読み取り。

  • write:シーケンシャル書き込み。

  • randrw:ランダム読み取り/書き込みの混在。

ioengine

テストで Fio が使用する I/O エンジンです。libaio は日常的なアプリケーションの動作パターンに近いため、一般的に使用されます。その他の選択肢については、Fio の公式ドキュメントをご参照ください。

bs

各 I/O ユニットのブロックサイズです。デフォルト値:4 KiB。read,write 形式で、読み取りと書き込みに別々の値を指定できます。いずれかの値を空にした場合、デフォルト値が使用されます。

size

テストファイルのサイズです。

Fio は、指定された量のデータの読み取りまたは書き込みが完了すると停止しますが、runtime などの他のオプションで制限される場合があります。このパラメータを指定しない場合、Fio は指定されたファイルまたはデバイスのフルサイズを使用します。また、サイズを 1~100 のパーセンテージで指定することもできます。たとえば、size=20% を指定すると、Fio はファイルまたはデバイスのフルサイズの 20% を使用します。

numjobs

テストの同時スレッド数です。デフォルト値:1。

runtime

テスト時間 (秒) です。

このパラメータを指定しない場合、FIO は size で指定したサイズのファイルに対し、bs で指定したサイズの I/O ブロックを使用して読み取り/書き込みを完了します。

group_reporting

テスト結果の表示モードです。

指定した場合、ジョブ単位ではなくグループ単位で結果を集計します。

filename

テスト対象へのパスには、デバイス名またはファイルパスを指定します。このトピックでは、すべての Fio テストで、ファイルシステムのないディスク全体 (raw ディスク) を対象とします。間違ったディスクをテストして誤ってデータを破壊しないように、コマンド例ではプレースホルダー /dev/your_device が使用されています。忘れずに実際のデバイスパスに置き換えてください。

name

例の Rand_Write_Testing のような、テストジョブのユーザー定義名です。

パラメータの詳細については、「fio(1) man page」をご参照ください。