ブロックストレージデバイスのパフォーマンスをテストして、ストレージデバイスの機能を監視し、最適なパフォーマンスを確保するためにブロックストレージデバイスのパフォーマンスを最適化および調整できます。 このトピックでは、Linux Elastic Compute Service (ECS) インスタンスでフレキシブルI/Oテスター (fio) を使用して、IOPS、スループット (データ伝送速度) 、レイテンシ (応答時間) など、Linuxインスタンス上のブロックストレージデバイスの主要なパフォーマンスメトリックを測定する方法について説明します。
fioはオープンソースの強力なI/Oパフォーマンスベンチマークツールで、ランダムな読み書き操作やシーケンシャルな読み書き操作など、ブロックストレージデバイスのパフォーマンス指標をテストできます。
手順
生ディスクをテストすると、正確なテスト結果が得られますが、生ディスクのファイルシステム構造が破壊される可能性があります。 上記の問題を防ぐために、ディスクのスナップショットを作成してディスクデータをバックアップすることを推奨します。 詳細については「スナップショットの作成」をご参照ください。
データの損失を防ぐために、オペレーティングシステムが存在するシステムディスクまたは重要なデータを含むディスクをテストオブジェクトとして使用しないことを強くお勧めします。 ツールを使用して、重要なデータがない新しいデータディスクまたは一時ディスクのブロックストレージパフォーマンスをテストすることをお勧めします。
システムディスクに対して生のディスクストレステストを実行する場合は、サービスを展開する前に、ストレステストを完了してオペレーティングシステムをリセットすることをお勧めします。 これはストレステストによって引き起こされる潜在的な問題を防ぎ、システムの長期安定した操作を保障するのを助けます。
パフォーマンステストの結果はテスト環境で得られ、参照用です。 実際の本番環境では、ネットワーク環境や同時実行アクセスなどの要因により、クラウドディスクのパフォーマンスが異なる場合があります。
ECS インスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
ブロックストレージデバイスをテストする前に、デバイスが4 KiB整列されていることを確認してください。
説明ブロックストレージデバイスでの4 KiBアライメントは、データ転送のオーバーヘッドを削減し、I/Oパフォーマンスを向上させるのに役立ちます。
sudo fdisk -lu
コマンド出力のStartの値が8で割り切れる場合、デバイスは4 KiBに揃えられます。 それ以外の場合は、テストを続行する前に4 KiBアライメントを実行します。
Device Boot Start End Sectors Size Id Type /dev/vda1 * 2048 83886046 83883999 40G 83 Linux
次のコマンドを実行して、libaioライブラリとfioツールをインストールします。
sudo yum install libaio libaio-devel fio -y
次のコマンドを実行して、パスを変更します。
cd /tmp
テストコマンドを実行します。 コマンドの詳細については、次のセクションを参照してください。
クラウドディスクのパフォーマンスのテストに使用されるコマンドの詳細については、このトピックの「クラウドディスクのパフォーマンスのテストに使用されるコマンド」をご参照ください。
ローカルディスクのパフォーマンスのテストに使用されるコマンドの詳細については、このトピックの「ローカルディスクのパフォーマンスのテストに使用されるコマンド」をご参照ください。
クラウドディスクのパフォーマンスのテストに使用するコマンド
サンプルコマンドのパラメーターの値は参照用です。 値を実際の値に置き換えます。 たとえば、テストするクラウドディスクのデバイス名が /dev/vdbの場合、次のサンプルコマンドで /dev/your_device
を /dev/vdb
に置き換えます。 パラメーターの詳細については、このトピックの「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パフォーマンスのテスト」をご参照ください。.
ローカルディスクのパフォーマンステストに使用するコマンド
次のサンプルコマンドは、ローカルのNVMe (Non-Volatile Memory Express) SSDおよびローカルのSATA (Serial Advanced Technology Attachment) HDDに適用できます。
サンプルコマンドのパラメーターの値は参照用です。 値を実際の値に置き換えます。 たとえば、テストするクラウドディスクのデバイス名が /dev/vdbの場合、次のサンプルコマンドで /dev/your_device
を /dev/vdb
に置き換えます。 パラメーターの詳細については、このトピックの「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
i4pインスタンスのローカルディスクのパフォーマンスをテストする方法については、「i4pインスタンスのローカルディスクのパフォーマンスのテスト」をご参照ください。
fioパラメータ
次の表に、ディスクのパフォーマンスをテストするために使用される上記のfioコマンドのパラメーターを示します。
パラメーター | 説明 |
直接 | 直接I/Oを使用するかどうかを指定します。 デフォルト値は 1 です。 有効な値:
|
iodepth | テスト中のI/Oキューの深さ。 たとえば、 |
rw | テスト中に使用される読み取り /書き込みポリシー。 有効な値:
|
ioengine | fioがディスクのパフォーマンスをテストするために使用するI/Oエンジン。 ほとんどの場合、libaioが使用されます。 その他の利用可能なI/Oエンジンについては、fioのドキュメントを参照してください。 |
bs | I/Oユニットのブロックサイズ。 デフォルト値: 4 k。4 KiBを示します。 読み取りと書き込みの値は、<読み取りの値 >,< 書き込みの値> 形式で指定できます。 値を指定しない場合は、デフォルト値が使用されます。 |
size | テストファイルのサイズ。 fioは、実行時などの特定の要因によって制限されない限り、指定されたサイズのファイルの読み取りまたは書き込みが行われた後にのみテストを終了します。 パラメーターが指定されていない場合、fioは指定されたすべてのファイルまたはデバイスのサイズを使用します。 有効な値は、1〜100の範囲のパーセントであってもよい。 たとえば、sizeパラメーターが20% に設定されている場合、fioはすべてのファイルまたはデバイスのサイズの20% を使用します。 |
numjobs | テスト中に使用される同時スレッドの数。 デフォルト値は 1 です。 |
runtime | テストの期間。これは、fioが実行される期間を示します。 このパラメーターが指定されていない場合、sizeパラメーターで指定されたサイズのファイルがbsパラメーターで指定されたブロックサイズで読み書きされるまでテストは終了しません。 |
group_reporting | テスト結果の表示モード。 このパラメーターを指定すると、タスクごとの統計ではなく、プロセスごとの統計が表示されます。 |
filename | テストするオブジェクトのパス。 パスには、ディスクのデバイス名またはファイルアドレスを指定できます。 このトピックでは、fioのテストオブジェクトは、ファイルシステムを持たないディスク全体 (生のディスク) です。 他のディスクのデータが破損しないようにするには、上記のコマンドの /dev/your_deviceを実際のパスに置き換えます。 |
name | テストの名前。 必要に応じてパラメーターを指定できます。 上記の例では、Rand_Write_Testingが使用されています。 |
パラメーターの詳細については、「fio (1) - Linux man page」をご参照ください。