EBS ボリュームのベンチマーク - Amazon EBS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

EBS ボリュームのベンチマーク

I/O ワークロードをシミュレートすることで、Amazon EBSボリュームのパフォーマンスをテストできます。手順は次のとおりです。

  1. にEBS最適化されたインスタンスを起動します。

  2. 新しいEBSボリュームを作成します。

  3. ボリュームを EBSに最適化されたインスタンスにアタッチします。

  4. ブロックデバイスを設定およびマウントします。

  5. ツールをインストールし、I/O パフォーマンスを評価する。

  6. ボリュームの I/O パフォーマンスを評価する。

  7. ボリュームを削除し、料金が発生しないようにインスタンスを終了する。

重要

一部の手順では、ベンチマークするEBSボリュームの既存のデータが破壊されます。ベンチマーク手順は、本番ボリュームではなく、テスト目的で特別に作成されたボリュームで使用するために用意されています。

インスタンスのセットアップ

EBS ボリュームから最適なパフォーマンスを得るには、 EBS最適化インスタンスを使用することをお勧めします。EBSに最適化されたインスタンスはEBS、インスタンスを使用して Amazon EC2 と Amazon の間で専用のスループットを提供します。EBSに最適化されたインスタンスは、Amazon EC2と Amazon の間で専用帯域幅を提供しEBS、インスタンスタイプに応じて仕様が異なります。

EBSに最適化されたインスタンスを作成するには、Amazon EC2コンソールを使用してインスタンスを起動するときに にEBS最適化されたインスタンスとして起動 を選択するか、コマンドラインを使用する--ebs-optimizedときに を指定します。このオプションをサポートするインスタンスタイプを必ず選択してください。

プロビジョンドボリュームIOPSSSDまたは汎用SSDボリュームのセットアップ

Amazon EC2コンソールを使用してプロビジョンド IOPS SSD (io1 および io2) ボリュームまたは汎用 SSD (gp2 および gp3) ボリュームを作成するには、ボリュームタイプ で、プロビジョンド IOPS SSD (io1)プロビジョンド IOPS SSD (io2)汎用 SSD (gp2)、または汎用 SSD (gp3) を選択します。コマンドラインの --volume-type パラメータには、io1io2gp2、または gp3 を指定します。io1io2、および gp3ボリュームの場合、 --iopsパラメータの 1 秒あたりの I/O オペレーションの数 (IOPS) を指定します。詳細については、「Amazon EBSボリュームタイプ」および「Amazon EBSボリュームを作成する」を参照してください。

Linux インスタンスのみ) サンプルテストでは、6 ボリュームの RAID 0 個の配列を作成することをお勧めします。これにより、高レベルのパフォーマンスが得られます。ボリューム数ではなく、プロビジョニングされたギガバイト数 (および io1、io2、gp3 ボリュームIOPS用にプロビジョニングされた数) で課金されるため、複数の小さなボリュームを作成してストライプセットを作成する場合、追加料金はかかりません。Oracle Orion を使用してボリュームのベンチマークを行う場合は、Oracle と同じ方法でストライピングをシミュレートできるためASM、Orion にストライピングを実行させることをお勧めします。別のベンチマークツールを使用する場合は、ボリュームのストライピングを自身で行う必要があります。

0 配列の作成方法の詳細については、RAID「」を参照してくださいRAID 0 アレイの作成

スループット最適化 HDD (st1) またはコールド HDD (sc1) ボリュームの設定

st1 ボリュームを作成するには、Amazon EC2コンソールを使用してボリュームを作成するときにスループット最適化 HDD を選択するか、コマンドラインを使用する--type st1ときに を指定します。sc1 ボリュームを作成するには、Amazon EC2コンソールを使用してボリュームを作成するHDDときに Cold を選択するか、コマンドラインを使用する--type sc1ときに を指定します。EBS ボリュームの作成については、「」を参照してくださいAmazon EBSボリュームを作成する。インスタンスへのこれらのボリュームのアタッチについては、Amazon EBSボリュームをインスタンスにアタッチするを参照してください。

Linux インスタンスのみ) AWS は、この設定手順を簡素化 AWS CloudFormation する JSON テンプレートを に提供します。テンプレートにアクセスしてJSONファイルとして保存します。 AWS CloudFormation では独自のSSHキーを設定でき、st1ボリュームを評価するパフォーマンステスト環境を簡単にセットアップできます。テンプレートを使用すると、現行世代のインスタンスと 2 TiB の st1 ボリュームが作成され、このボリュームが /dev/xvdf のインスタンスにアタッチされます。

Linux インスタンスのみ) テンプレートを使用してHDDボリュームを作成するには
  1. https://console.aws.amazon.com/cloudformation AWS CloudFormation でコンソールを開きます。

  2. [Create Stack] (スタックの作成) を選択します。

  3. Amazon S3 にテンプレートをアップロードを選択し、以前に取得したJSONテンプレートを選択します。

  4. スタックにebs-perf-testing「」のような名前を付け、インスタンスタイプ (デフォルトは r3.8xlarge) とSSHキーを選択します。

  5. [Next] を 2 回選択し、[Create Stack] を選択します。

  6. 新しいスタックのステータスが CREATE_IN_PROGRESS から に移動したらCOMPLETE出力 を選択して新しいインスタンスのパブリックDNSエントリを取得します。これには、2 TiB のst1ボリュームがアタッチされます。

  7. SSH を使用して、前のステップの DNSエントリから取得したホスト名を使用してec2-user、ユーザー として新しいスタックに接続します。

  8. ベンチマークツールのインストール に進みます。

ベンチマークツールのインストール

次の表に、EBSボリュームのパフォーマンスをベンチマークするために使用できるツールをいくつか示します。

ツール 説明

fio

I/O パフォーマンスを評価します (fiolibaio-devel に依存することに注意してください。)

fio を Amazon Linux にインストールするには、次のコマンドを実行します。

$ sudo yum install -y fio

Ubuntu に fio インストールするには、次のコマンドを実行します。

sudo apt-get install -y fio

Oracle Orion Calibration ツール

Oracle データベースで使用するストレージシステムの I/O パフォーマンスを調整します。

ツール 説明
DiskSpd

DiskSpd は、Microsoft の Windows、Windows Server、および Cloud Server インフラストラクチャエンジニアリングチームのストレージパフォーマンスツールです。これは https://github.com/Microsoft/diskspd/releases でダウンロードできます。

diskspd.exe 実行可能ファイルをダウンロードした後、管理者権限でコマンドプロンプトを開き (「管理者として実行を選択」)、diskspd.exe ファイルをコピーしたディレクトリに移動します。

適切な実行可能フォルダ (amd64frearmfre または x86fre)) から目的の diskspd.exe 実行可能ファイルを C:\DiskSpd などの短い、単純なパスにコピーします。ほとんどの場合、 amd64freフォルダ DiskSpd から の 64 ビットバージョンが必要です。

のソースコード DiskSpd は、https://github.com/Microsoft/diskspd GitHub でホストされます。

CrystalDiskMark

CrystalDiskMark はシンプルなディスクベンチマークソフトウェアです。https://crystalmark.info/en/software/crystaldiskmark/ でダウンロードできます。

これらのベンチマークツールは、さまざまなテストパラメータをサポートしています。使用するのは、ボリュームがサポートするワークロードを見積もるためのコマンドです。評価に必要な基本的なコマンドの例を以下に示します。

ボリュームキュー長の選択

ワークロードとボリュームタイプに基づいて最適なボリュームキュー長を選択します。

SSD-backed ボリュームのキューの長さ

SSD-backed ボリュームのワークロードに最適なキューの長さを決定するには、IOPS使用可能な 1000 個ごとにキューの長さを 1 個にすることをお勧めします (汎用SSDボリュームのベースラインとプロビジョニングされたIOPSSSDボリュームのプロビジョニングされた量)。その後、アプリケーションのパフォーマンスを監視して、アプリケーション要件に応じて値を調整することができます。

キューの長さを増やすと、プロビジョニングされた IOPS、スループット、または現在 32 に設定されている最適なシステムキューの長さの値が得られるまでは便利です。例えば、プロビジョニングされたボリュームが 3,000 の場合、キューの長さは 3 IOPSにする必要があります。アプリケーションに最適な値を確認するには、これらの値を増減して調整してください。

HDD-backed ボリュームのキューの長さ

HDD-backed ボリュームのワークロードに最適なキュー長を決定するには、1MiB のシーケンシャル I/O を実行しながら、キュー長を 4 以上に設定することをお勧めします。その後、アプリケーションのパフォーマンスを監視して、アプリケーション要件に応じて値を調整することができます。例えば、バーストスループットが 500 MiB /秒、500 IOPSの 2 TiB st1ボリュームは、それぞれ 1,024 KiBKiBになるようにする必要があります。 KiB アプリケーションに最適な値を確認するには、これらの値を増減して調整してください。

C ステートの無効化

ベンチマークを実行する前に、プロセッサの C ステートを無効にする必要があります。サポートされている の一時的にアイドル状態のコアは、電力を節約するために C ステートに入るCPUことができます。コアが処理を再開するために呼び出されると、コアが再び完全に動作するまで一定の時間が経過します。このレイテンシーは、プロセッサのベンチマークルーチンを妨げる可能性があります。C ステートとそれらをサポートするEC2インスタンスタイプの詳細については、「インスタンスのプロセッサ状態制御」を参照してくださいEC2

Amazon Linux、、および CentOS の C ステートはRHEL、次のように無効にできます。

  1. C ステートの数を取得します。

    $ cpupower idle-info | grep "Number of idle states:"
  2. C ステート c1 から cN にして無効にします。理想的には、コアは c0 ステートにある必要があります。

    $ for i in `seq 1 $((N-1))`; do cpupower idle-set -d $i; done

次のようにして、Windows システムで C ステートを無効にできます。

  1. で PowerShell、現在のアクティブな電源スキームを取得します。

    $current_scheme = powercfg /getactivescheme
  2. 電源スキーム を取得しますGUID。

    (Get-WmiObject -class Win32_PowerPlan -Namespace "root\cimv2\power" -Filter "ElementName='High performance'").InstanceID
  3. 電源設定 を取得しますGUID。

    (Get-WmiObject -class Win32_PowerSetting -Namespace "root\cimv2\power" -Filter "ElementName='Processor idle disable'").InstanceID
  4. 電力設定サブグループ を取得しますGUID。

    (Get-WmiObject -class Win32_PowerSettingSubgroup -Namespace "root\cimv2\power" -Filter "ElementName='Processor power management'").InstanceID
  5. インデックスの値を 1 に設定して、C ステートを無効にします。値 0 は、C ステートが無効であることを示します。

    powercfg /setacvalueindex <power_scheme_guid> <power_setting_subgroup_guid> <power_setting_guid> 1
  6. アクティブなスキームを設定して、設定が保存されるようにします。

    powercfg /setactive <power_scheme_guid>

ベンチマークテストを実行する

次の手順では、さまざまなEBSボリュームタイプのベンチマークコマンドについて説明します。

EBS ボリュームがアタッチされた EBSに最適化されたインスタンスで、次のコマンドを実行します。EBS ボリュームがスナップショットから作成された場合は、ベンチマークの前にボリュームを初期化してください。詳細については、「Amazon EBSボリュームの初期化」を参照してください。

ボリュームのテストが完了したら、クリーンアップに関する次のトピックの Amazon EBSボリュームを削除する および「インスタンスの終了」を参照してください。

プロビジョンドボリュームIOPSSSDと汎用SSDボリュームのベンチマーク

作成した 0 RAID 個の配列fioで を実行します。

次のコマンドは、16 KB のランダム書き込みオペレーションを実行します。

$ sudo fio --directory=/mnt/p_iops_vol0 --ioengine=psync --name fio_test_file --direct=1 --rw=randwrite --bs=16k --size=1G --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap

次のコマンドは、16 KB のランダム読み取りオペレーションを実行します。

$ sudo fio --directory=/mnt/p_iops_vol0 --name fio_test_file --direct=1 --rw=randread --bs=16k --size=1G --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap

結果の読み方については、チュートリアルfio のディスク IO パフォーマンスの確認を参照してください。

作成したボリュームで DiskSpd を実行します。

次のコマンドは、C: ドライブ上にある 20 GB のテストファイルを使用して、30 秒のランダム I/O テストを実行します。書き込み率 25%、読み取り率 75%、ブロックサイズは 8 K です。これは、それぞれ 4 つの未処理の I/O を持ち、1 GB の書き込みエントロピー値シードを持つ 8 つのワーカースレッドを使用します。テストの結果は、DiskSpeedResults.txt というテキストファイルに保存されます。これらのパラメータは、SQLサーバーOLTPワークロードをシミュレートします。

diskspd -b8K -d30 -o4 -t8 -h -r -w25 -L -Z1G -c20G C:\iotest.dat > DiskSpeedResults.txt

結果の解釈の詳細については、「D によるディスク IO パフォーマンスの検査iskSPd」のチュートリアルを参照してください。

st1 および sc1 ボリュームのベンチマーク (Linux インスタンス)

st1 ボリュームまたは sc1 ボリュームで fio を実行します。

注記

これらのテストを実行する前に、st1 および sc1 (Linux インスタンスインスタンスのみ) で高いスループットの読み取りが多いワークロードに先読みを増やすの説明に従って、バッファ付き I/O をインスタンスに設定してください。

次のコマンドでは、アタッチされた st1 ブロックデバイス (例: /dev/xvdf) に対して、1 MiB のシーケンシャル読み取り操作を実行します。

$ sudo fio --filename=/dev/<device> --direct=1 --rw=read --randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180 --name=fio_direct_read_test

次のコマンドでは、アタッチされた st1 ブロックデバイスに対して、1 MiB のシーケンシャル書き込み操作を実行します。

$ sudo fio --filename=/dev/<device> --direct=1 --rw=write --randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180 --name=fio_direct_write_test

ワークロードによっては、ブロックデバイスの異なる部分に対してシーケンシャル読み取りとシーケンシャル書き込みの組み合わせを実行するケースがあります。このようなワークロードを評価する場合は、読み取りと書き込みに対して別々の fio ジョブを同時に実行し、fio offset_increment オプションを使用して、ブロックデバイスの別々の場所を各ジョブに割り当てることをお勧めします。

このワークロードの実行は、シーケンシャル書き込みまたはシーケンシャル読み取りのワークロードの場合より、少し複雑になります。テキストエディターを使用して、次の内容を含む fio ジョブファイル (この例では fio_rw_mix.cfg) を作成します。

[global] clocksource=clock_gettime randrepeat=0 runtime=180 [sequential-write] bs=1M ioengine=libaio direct=1 iodepth=8 filename=/dev/<device> do_verify=0 rw=write rwmixread=0 rwmixwrite=100 [sequential-read] bs=1M ioengine=libaio direct=1 iodepth=8 filename=/dev/<device> do_verify=0 rw=read rwmixread=100 rwmixwrite=0 offset=100g

次に、以下のコマンドを実行します。

$ sudo fio fio_rw_mix.cfg

結果の読み方については、チュートリアルfio のディスク I/O パフォーマンスの確認を参照してください。

シーケンシャルの読み取りまたは書き込みの操作を使用しても、ダイレクト I/O の fio ジョブを複数実行した場合は、st1 および sc1 ボリュームで予測を下回るスループットになります。単一のダイレクト I/O ジョブを使用し、iodepth パラメータを指定して、I/O 操作の同時実行数を制御することをお勧めします。