Elastic Block Storage のパフォーマンスをテストすることで、ストレージデバイスの性能を理解し、最適なパフォーマンスが得られるように最適化できます。raw ディスクをテストすると、そのパフォーマンスを現実的に測定できます。この Topic では、オープンソースツール FIO を Linux システムで使用して、1 秒あたりの I/O 操作 (IOPS)、スループット、レイテンシなど、raw ディスクの主要なパフォーマンスメトリックをテストする方法について説明します。
FIO (Flexible I/O Tester) は、強力なオープンソースの I/O パフォーマンステストツールです。これを使用して、ストレージデバイスでランダムおよびシーケンシャルの読み取り/書き込みなどの負荷テストを実行できます。
操作手順
raw ディスクをテストすると、そのパフォーマンスを最も現実的に測定できます。ただし、パーティション、ファイルシステム、またはその他のデータを含むデバイスで FIO を使用して直接ストレステストを実行すると、ファイルシステムのエラーやデータ損失が発生する可能性があります。テストを開始する前に、スナップショットを作成してデータをバックアップしてください。詳細については、「スナップショットの作成」をご参照ください。
データ損失を防ぐため、システムディスクやデータを含むデータディスクはテストしないでください。ストレージのパフォーマンスは、新しく、初期化されておらず、空のデータディスクでテストしてください。
パフォーマンスのテスト結果はステージング環境のものであり、参考用です。本番環境では、ディスクのパフォーマンスはネットワーク環境や同時アクセスなどの要因によって異なる場合があります。
テスト完了後、新しいディスクを次のように管理します。
ディスクを保持する場合は、使用する前にデータディスクを再初期化してください。
ディスクが不要な場合は、データディスクをデタッチし、次にディスクをリリースします。
この Topic では、Alibaba Cloud Linux 3.2104 LTS 64 ビットのパブリックイメージを例として使用します。手順はご利用の環境によって異なる場合があります。
ECS インスタンスに接続します。
詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。
次のコマンドを実行して、Elastic Block Storage デバイスのデバイス名を取得します。
sudo fdisk -lu
上の図は、インスタンスに 3 つの Elastic Block Storage デバイスがあることを示しています:システムディスク /dev/vda、およびデータディスク /dev/vdb と /dev/vdc です。次のコマンドを実行して、Elastic Block Storage デバイス上のパーティションとファイルシステムを確認します。
sudo blkid
上の図は、Elastic Block Storage デバイス /dev/vda と /dev/vdb にパーティションとファイルシステムがあることを示しています。コマンドの出力には /dev/vdc に関する情報が含まれていないため、パーティションやファイルシステムがないことがわかります。
警告パーティション、ファイルシステム、またはその他のデータを含むデバイスで FIO を使用して直接ストレステストを実行すると、ファイルシステムのエラーやデータ損失が発生する可能性があります。データディスクにパーティションとファイルシステムがある場合は、テスト用に新しく空のデータディスクを作成してください:
同じ構成の従量課金ディスクを作成し、テスト用にインスタンスにアタッチします。詳細については、「空のデータディスクの作成」をご参照ください。
テスト完了後、インスタンスをリリースできます。詳細については、「インスタンスのリリース」をご参照ください。
Elastic Block Storage デバイスのパフォーマンスをテストする前に、データ損失を防ぐためにデータをバックアップしてください。詳細については、「スナップショットの作成」をご参照ください。
説明スナップショットは有料サービスです。詳細については、「スナップショットの課金」をご参照ください。
次のコマンドを実行して、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 -yDebian 9 以降、Ubuntu 14 以降
重要Debian 9 と Debian 10 はサポート終了 (EOL) となったため、Debian 9 または Debian 10 を実行する ECS インスタンスを使用している場合は、まずソースアドレスを切り替える必要があります。詳細については、「EOL 後のオペレーティングシステムのソースアドレスの切り替え」をご参照ください。
sudo apt-get update sudo apt-get install libaio* fio -yパスを変更します:
cd /tmpパフォーマンスのテストコマンドを実行します。詳細については、次のセクションをご参照ください:
ディスクをテストするコマンドについては、「ディスクのパフォーマンスのテストコマンド」をご参照ください。
ローカルディスクをテストするコマンドについては、「ローカルディスクのパフォーマンスのテストコマンド」をご参照ください。
テスト結果を分析します。値はディスクによって異なります。次の図の値は参考用です。
IOPS の結果については、次の図に示すように
IOPS=***の値を確認してください:
スループットの結果については、次の図に示すように
BW=***の値を確認してください:
レイテンシの結果については、次の図に示すように lat (usec) の値を確認してください:

ディスクのパフォーマンスのテストコマンド
パーティション、ファイルシステム、またはその他のデータを含むデバイスで FIO を使用して直接ストレステストを実行すると、ファイルシステムのエラーやデータ損失が発生する可能性があります。データディスクにパーティションとファイルシステムがある場合は、テスト用に新しく空のデータディスクを作成してください:
同じ構成の従量課金ディスクを作成し、テスト用にインスタンスにアタッチします。詳細については、「空のデータディスクの作成」をご参照ください。
テスト完了後:
ディスクを保持する場合は、データディスクを再初期化してください。
次のサンプルコマンドのパラメーター値は参考用です。/dev/your_device を、ステップ 2 で取得したテスト対象の Elastic Block Storage デバイスの名前に置き換えてください。たとえば、テストするディスクのデバイス名が /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 を使用して直接ストレステストを実行すると、ファイルシステムのエラーやデータ損失が発生する可能性があります。データディスクにパーティションとファイルシステムがある場合は、テスト用にローカルディスクを備えた新しいインスタンスを作成してください。
ローカルディスクはインスタンスと一緒にのみ作成できます。ローカルディスクをテストするには、同じ構成の新しいインスタンスを作成します。詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。
テスト完了後、インスタンスが不要になった場合はリリースしてください。詳細については、「インスタンスのリリース」をご参照ください。
次のテストコマンドは、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 です。
|
iodepth | テストの I/O キュー深度です。たとえば、 |
rw | テストの読み取りおよび書き込みポリシーです。このパラメーターには、次のいずれかの値を設定できます:
|
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 パラメーターで指定されたサイズのブロックで読み書きし終えるまで実行を続けます。 |
group_reporting | テスト結果の表示モードです。 このパラメーターを指定すると、結果は各タスクごとではなく、各プロセスの集計統計を表示します。 |
filename | テスト対象のオブジェクトのパスです。パスはディスクのデバイス名またはファイルパスにすることができます。この Topic では、FIO テストはファイルシステムのないディスク全体 (raw ディスク) で実行されます。他のディスク上のデータが破損するのを防ぐため、サンプルパスは /dev/your_device となっています。実際のパスに置き換えてください。 |
name | テストタスクの名前です。任意の名前に設定できます。たとえば、Rand_Write_Testing です。 |
パラメーターの詳細については、FIO man ページをご参照ください。