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

Elastic Compute Service:ESSD の IOPS パフォーマンステスト

最終更新日:Apr 28, 2026

fio を使用し、25GE および RDMA で最大 1,000,000 のランダム読み取り/書き込み IOPS をサポートする raw ESSD の IOPS をベンチマークします。

前提条件

  • テストツール: fio (flexible I/O tester)。

    説明

    fio はオープンソースの I/O ベンチマークツールであり、ランダムおよびシーケンシャルな読み取り/書き込み操作などのブロックストレージパフォーマンスメトリックをテストできます。

  • インスタンスタイプ: ecs.g7se.32xlarge (推奨)。 詳細については、「汎用インスタンスファミリー (gシリーズ)」をご参照ください。

  • イメージ: 最新の Alibaba Cloud Linux パブリックイメージ。 以下の例では、Alibaba Cloud Linux 3 を使用します。

    説明

    ESSD は、特定の Linux ディストリビューションでは期待される IOPS を達成できない場合があります。 Alibaba Cloud Linux 3 イメージを使用する Elastic Compute Service (ECS) インスタンスに ESSD をアタッチしてください。

  • ESSD:

    • fio を使用して raw ディスクをテストし、実際のディスクパフォーマンスを取得します。

    • PL3 ESSD を使用します。 詳細については、「ESSD」をご参照ください。

    重要
    • ブロックストレージデバイスにパーティション、ファイルシステム、またはデータが含まれている場合、fio によってファイルシステムが破損し、データ損失が発生する可能性があります。テスト前にスナップショットを作成してください。詳細については、「スナップショットの手動作成」をご参照ください。

    • システムディスクまたはデータが含まれるデータディスクではテストを行わないでください。代わりに、新しく作成された未初期化の空のデータディスクを使用します。

    • テスト結果はテスト環境で取得したものであり、参考情報としてのみご利用ください。本番環境では、ネットワーク条件や同時アクセスなどの要因により、クラウドディスクのパフォーマンスが異なる場合があります。

    • 新しいディスクのテスト後:

操作手順

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

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

  2. ブロックストレージデバイス名を照会します。

    sudo fdisk -lu

    fdisk output出力には、システムディスク /dev/vda と 2 つのデータディスク /dev/vdb および /dev/vdc の 3 つのブロックストレージデバイスが表示されます。

  3. ブロックストレージデバイスにパーティションとファイルシステムがあるかどうかを確認します。

    sudo blkid

    blkid output出力は、/dev/vda/dev/vdb にパーティションとファイルシステムがあることを示します。 /dev/vdc は出力に含まれていないため、パーティションやファイルシステムがないことを示します。

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

    説明

    スナップショットには料金が発生します。 詳細については、「スナップショットの課金」をご参照ください。

  5. お使いのオペレーティングシステムに応じて、libaio ライブラリと fio をインストールしてください。

    Alibaba Cloud Linux 2、Alibaba Cloud Linux 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) となりました。 インスタンスが Debian 9 または Debian 10 を実行している場合は、リポジトリアドレスを変更してください

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

    cd /tmp
  7. test100w.sh スクリプトを作成します。

    sudo vim test100w.sh
  8. 次の内容を test100w.sh スクリプトに貼り付けます。

    スクリプトの詳細: test100w.sh」セクションをご参照ください。

    #!/bin/bash
    
    DEV_NODE=your_device
    DEV_NAME=/dev/$DEV_NODE
    
    function CheckHasFS
    {
        local device=$1 # デバイスパス。
    
        # デバイスが存在するかどうかを確認します。
        if [ !  -b "$device" ]; then
            echo "Error: The $device device does not exist."
            exit 1
        fi
    
        # blkid コマンドを実行して、パーティションテーブルとファイルシステムのタイプを確認します。
        local pt_type=$(sudo blkid -o value -s PTTYPE "$device")
        local fs_type=$(sudo blkid -o value -s TYPE "$device")
    
        if [ -n "$pt_type" ] || [ -n "$fs_type" ]; then
            return 1
        else
            return 0
        fi
    }
    
    CheckHasFS "$DEV_NAME"
    if [ $?  -eq 1 ]; then
        echo "The $DEV_NAME device contains a partition table or a file system. The fio script is stopped."
        exit 1
    fi
    
    function RunFio
    {
     numjobs=$1   # テストスレッド数。この例では 10 です。
     iodepth=$2   # 同時I/Oリクエストの最大数。この例では 128 です。
     bs=$3        # I/O あたりのデータブロックサイズ。この例では 4k です。
     rw=$4        # 読み取り/書き込みポリシー。この例では randwrite です。
     size=$5
     filename=$6  # テストファイル名。この例では /dev/your_device です。
     nr_cpus=`cat /proc/cpuinfo |grep "processor" |wc -l`
     if [ $nr_cpus -lt $numjobs ]; then
         echo "The value of the numjobs parameter is greater than the number of CPU cores. The test is stopped."
         exit -1
     fi
     let nu=$numjobs+1
     cpulist=""
     for ((i=1;i<10;i++))
     do
         list=`cat /sys/block/$DEV_NODE/mq/*/cpu_list | awk '{if(i<=NF) print $i;}' i="$i" | tr -d ',' | tr '\n' ','`
         if [ -z $list ]; then
             break
         fi
         cpulist=${cpulist}${list}
     done
     spincpu=`echo $cpulist | cut -d ',' -f 2-${nu}`
     echo $spincpu
     fio --ioengine=libaio --runtime=30s --numjobs=${numjobs} --iodepth=${iodepth} --bs=${bs} --size=${size} --rw=${rw} --filename=${filename} --time_based=1 --direct=1 --name=test --group_reporting --cpus_allowed=$spincpu --cpus_allowed_policy=split
    }
    echo 2 > /sys/block/$DEV_NODE/queue/rq_affinity
    sleep 5
    RunFio 10 128 4k randwrite 1024g $DEV_NAME
  9. お使いの環境に合わせてスクリプトパラメーターを変更してください。

    • your_devicenvme1n1 などの実際のデバイス名に置き換えてください。

    • RunFio 10 64 4k randwrite /dev/your_device 行の 10 (numjobs)、64 (iodepth)、4k (bs)、randwrite (rw)、および /dev/your_device を実際の値に置き換えます。

    • numjobs の値は CPU コアの数を超えてはなりません。 CPU コア数を照会するには、次のコマンドを実行します。

      cat /proc/cpuinfo |grep "processor" |wc -l
  10. ESSD のパフォーマンスをテストします。

    sudo sh test100w.sh
    • 出力の IOPS=*** は、ESSD の IOPS を示します。image

    • 次の出力が表示された場合、テスト対象のディスクにはパーティションまたはファイルシステムが含まれています。 fio スクリプトはデータを保護するために停止します。 テストには空のデータディスクを使用してください。

      [[ecs-user@ecs tmp]$ sudo sh test100w.sh
      The /dev/vdb device contains a partition table or a file system. The fio script is stopped.
      警告

      パーティション、ファイルシステム、またはデータを含むディスクで fio を実行すると、ファイルシステムが破損し、データが失われる可能性があります。 データディスクにパーティションとファイルシステムがある場合は、テスト用に空のデータディスクを作成してください。

スクリプトの詳細: test100w.sh

  • 次のコマンドは、rq_affinity2 に設定します。

    echo 2 > /sys/block/your_device/queue/rq_affinity

    rq_affinity の値

    説明

    1

    I/O 完了イベントを、I/O リクエストを送信した vCPU グループに配信します。 マルチスレッド同時実行時には、イベントが単一の vCPU にキューイングされ、ボトルネックが発生する可能性があります。

    2

    I/O 完了イベントを、各リクエストを送信した vCPU に直接配信します。 これにより、各 vCPU はマルチスレッド同時実行時に最大のパフォーマンスを発揮できます。

  • 次のコマンドは、jobs を使用してキューを異なる CPU コアにバインドします。

    fio -ioengine=libaio -runtime=30s -numjobs=${numjobs} -iodepth=${iodepth} -bs=${bs} -rw=${rw} -filename=${filename} -time_based=1 -direct=1 -name=test -group_reporting -cpus_allowed=$spincpu -cpus_allowed_policy=split
    説明

    通常モードでは、デバイスには 1 つのリクエストキューがあり、同時 I/O 時にボトルネックになります。 マルチキューモードでは、複数のリクエストキューが有効になります。 たとえば、4 つの I/O スレッドがある場合、各スレッドを異なるリクエストキューにマッピングされた CPU コアにバインドすることで、ストレージパフォーマンスを最大化します。

    パラメーター

    説明

    値の例

    numjobs

    I/O スレッドの数。

    10

    /dev/your_device

    ESSD のデバイス名。

    /dev/nvme1n1

    cpus_allowed_policy

    vCPU をバインドするための fio パラメーターです。 cpus_allowed_policycpus_allowed を一緒に使用して vCPU をバインドします。

    split

    このコマンドは jobs を実行して、異なる ID のキューを異なる CPU コアにバインドします。 各キューにバインドされている CPU コアを表示するには、次のコマンドを実行します。

    • ls /sys/block/your_device/mq/ を実行します。 your_device を実際のデバイス名 (例: nvme1n1) に置き換えます。 これにより、指定されたデバイスのキュー ID が返されます。

    • cat /sys/block/your_device/mq/cpu_list を実行します。 your_device を実際のデバイス名 (例: nvme1n1) に置き換えます。 これにより、指定されたデバイスの各キューにバインドされている CPU コア ID が返されます。