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

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

最終更新日:Jan 10, 2024

このトピックでは、ESSD (enhanced SSD) のIOPSパフォーマンスをテストする方法について説明します。 ディスクの仕様とテスト条件がテスト結果に影響します。 マルチコアの同時実行性の高いシステムのパフォーマンスを最大化するために、次の例のようにテスト条件を設定した場合、ESSDでストレステストを実行すると、100万のIOPS値を得ることができます。

テスト条件

  • サンプル操作: ランダム書き込み (randwrite) 。

  • イメージ: Alibaba Cloudが提供する最新バージョンのLinuxパブリックイメージ (CentOS 7.4 64ビット、CentOS 7.3 64ビット、CentOS 7.2 64ビット、Alibaba Cloud Linux 2.1903 64ビットなど) を使用することを推奨します。

  • ツール: FIOを使用することを推奨します。

  • インスタンスタイプ: ecs.g7se.32xlargeの使用を推奨します。 詳細については、「g7se、ストレージ拡張汎用インスタンスファミリー」をご参照ください。

  • ESSD: パフォーマンスレベル3のESSD (PL3 ESSD) を使用することを推奨します。 この例では、ESSDのデバイス名として /dev/your_deviceが使用されます。 実際のデバイス名に置き換えます。 詳細については、「ESSD」をご参照ください。

注意事項

警告
  • 生ディスクをテストすることで、正確なテスト結果を得ることができます。 ただし、ディスクを直接テストすると、生のディスクのファイルシステム構造が破壊される可能性があります。 生のディスクをテストする前に、ディスクのスナップショットを作成してデータをバックアップすることをお勧めします。 詳細については、「ディスクのスナップショットの作成」をご参照ください。

  • オペレーティングシステムが存在するディスクや重要なデータが格納されているディスクはテストしないことをお勧めします。 データの損失を防ぐために、テスト用のデータを含まない新しいECS (Elastic Compute Service) インスタンスを使用することを推奨します。

手順

  1. ECSインスタンスに接続します。
    詳細については、「VNCを使用したインスタンスへの接続」をご参照ください。
  2. 次のコマンドを順番に実行して、libaioとFIOをインストールします。

    sudo yum install libaio -y
    sudo yum install libaio-devel -y
    sudo yumインストールfio -y 
  3. 次のコマンドを実行して、パスを切り替えます。

    cd /tmp
  4. 次のコマンドを実行して、test100w.shスクリプトを作成します。

    vim test100w.sh
  5. 次のコンテンツをtest100w.shスクリプトに貼り付けます。

    スクリプトの内容については、このトピックの「test100w.shスクリプトの詳細」をご参照ください。

    関数RunFio
    {
     numjobs=$1# テストスレッドの数。 この例では、値は10です。
     iodepth=$2# 同時I/Oリクエストの最大数。 この例では、値は64です。
     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
         エコー "Numjobsはcpuコア以上のものです、終了!
         exit -1
     fi
     let nu=$numjobs + 1
     cpulist=""
     for (((i=1;i<10;i ++)))
     do
         list='cat /sys/block/your_device/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 =${} -- time_based=1 -- direct=1 -- name=test -- group_reporting -- cpus_allow_policy=$
    }
    echo 2 > /sys/block/your_device/queue/rq_affinity
    睡眠5
    RunFio 10 128 4k randwrite 1024g /dev/your_device 
  6. 実際の条件に基づいてtest100w.shスクリプトのパラメーターを変更します。

    • _deviceをESSDの実際のデバイス名に置き換えます。 例: nvme1n1.

    • RunFio 10 64 4k randwrite /dev/your_device10644krandwrite、および /dev/your_deviceを実際の値に置き換えます。

    • ESSDのデータ損失がビジネスに影響しない場合は、filenameをデバイス名に設定できます。 例: filename=/dev/vdb。 それ以外の場合は、filenameをファイルディレクトリに設定します。 例: filename=/mnt/test.image

    警告
    • 生ディスクをテストすることで、正確なテスト結果を得ることができます。 ただし、ディスクを直接テストすると、生のディスクのファイルシステム構造が破壊される可能性があります。 生のディスクをテストする前に、ディスクのスナップショットを作成してデータをバックアップすることをお勧めします。 詳細については、「ディスクのスナップショットの作成」をご参照ください。

    • オペレーティングシステムが存在するディスクや重要なデータが格納されているディスクはテストしないことをお勧めします。 データの損失を防ぐために、テスト用のデータを含まない新しいECS (Elastic Compute Service) インスタンスを使用することを推奨します。

  7. 次のコマンドを実行して、ESSDのパフォーマンスをテストします。

    sh test100w.sh

    コマンド出力にIOPS=*** の結果が表示された場合、ESSDのパフォーマンスストレステストは完了です。ESSD云盘IOPS性能

test100w.shスクリプトの詳細

  • スクリプトでは、次のコマンドはrq_affinityパラメーターを2に設定します。

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

    rq_affinityの値

    説明

    1

    ブロックデバイスが、受け取ったI/O完了イベントを、対応するI/O要求を送信するvCPUのグループに配信することを示します。 複数のスレッドが同時に実行されるシナリオでは、I/O完了イベントが1つのvCPUにのみ配信され、パフォーマンスのボトルネックを引き起こす可能性があります。

    2

    ブロックデバイスが受け取ったI/O完了イベントを、対応するI/O要求を送信するvCPUに配信することを示します。 複数のスレッドが同時に実行されるシナリオでは、各vCPUが最大のパフォーマンスを発揮できます。

  • 次のコマンドは、ジョブを実行してキューを異なるCPUコアにバインドします。

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

    通常モードでは、デバイスは単一の要求キューを有する。 この要求キューは、複数のスレッドがI/O要求を同時に処理するときにパフォーマンスのボトルネックになります。 マルチキューモードでは、デバイスは複数のリクエストキューを使用してI/Oリクエストを処理し、最大のバックエンドストレージパフォーマンスを提供できます。 たとえば、4つのI/Oスレッドがあるとします。 マルチキューモードを最大限に活用し、ストレージパフォーマンスを向上させるには、これらのスレッドを、異なるリクエストキューに対応するCPUコアにバインドする必要があります。

    パラメーター

    説明

    numjobs

    I/O スレッドの数。

    10

    /dev/your_device

    ESSDのデバイス名。

    /dev/nvme1n1

    cpus_allowed_ポリシー

    vCPUをバインドするためにFIOによって提供されるパラメーター。 FIOは、vCPUをバインドするためのcpus_allowed_policyおよびcpus_allowedパラメーターを提供します。

    split

    上記のコマンドは、異なるキューIDを持つキューを異なるCPUコアにバインドするジョブを実行します。 キューがバインドされているCPUコアのIDを表示するには、次の手順を実行します。

    • ls /sys/block/your_device/mq/ コマンドを実行します。 このコマンドでは、_deviceを実際のデバイス名に置き換えます。 例: nvme1n1. このコマンドは、デバイス名が /dev/vd * 形式のESSDのキューのIDを返します。

    • cat /sys/block/your_device/mq // cpu_listコマンドを実行します。 このコマンドでは、_deviceを実際のデバイス名に置き換えます。 例: nvme1n1. このコマンドは、ESSDのキューがバインドされているCPUコアのIDを返します。 ESSDのデバイス名は /dev/vd * 形式です。