Linux の Elastic Compute Service (ECS) インスタンス上で fio を使用し、ブロックストレージのパフォーマンスチューニングのために生ディスクの IOPS、スループット、レイテンシを測定します。
fio はオープンソースの I/O ベンチマークツールであり、ランダムおよびシーケンシャルな読み取り/書き込み操作などのブロックストレージパフォーマンスメトリックをテストできます。
操作手順
-
ブロックストレージデバイスにパーティション、ファイルシステム、またはデータが含まれている場合、fio によってファイルシステムが破損し、データ損失が発生する可能性があります。テスト前にスナップショットを作成してください。詳細については、「スナップショットの手動作成」をご参照ください。
-
システムディスクまたはデータが含まれるデータディスクではテストを行わないでください。代わりに、新しく作成された未初期化の空のデータディスクを使用します。
-
テスト結果はテスト環境で取得したものであり、参考情報としてのみご利用ください。本番環境では、ネットワーク条件や同時アクセスなどの要因により、クラウドディスクのパフォーマンスが異なる場合があります。
-
新しいディスクのテスト後:
-
この項目は予約済みであり、直接使用できません。詳細については、「データディスクの再初期化」をご参照ください。
-
以下の例では、Alibaba Cloud Linux 3.2104 LTS 64 ビットのパブリックイメージを使用しています。ご利用のインスタンスイメージによっては、操作が異なる場合があります。
-
ECS インスタンスに接続します。
詳細については、「Workbench を使用した Linux インスタンスへのログイン」をご参照ください。
-
ブロックストレージデバイス名を照会します。
sudo fdisk -lu
インスタンスには 3 つのブロックストレージデバイスがあります。システムディスク /dev/vda と 2 つのデータディスク /dev/vdb、/dev/vdc です。 -
デバイス上のパーティションおよびファイルシステムを確認します。
sudo blkid
デバイス /dev/vda および /dev/vdb にはパーティションとファイルシステムがあります。一方、デバイス /dev/vdc は一覧に表示されておらず、パーティションやファイルシステムが存在しないことを示しています。警告テスト対象にパーティション、ファイルシステム、またはデータが含まれている場合、fio によってファイルシステムが破損し、データ損失が発生する可能性があります。データディスクにパーティションとファイルシステムがある場合は、テスト用に空のデータディスクを作成してください。
-
同一仕様の従量課金ディスクを作成し、インスタンスにアタッチします。詳細については、「データディスクの作成」をご参照ください。
-
テスト後、従量課金ディスクをリリースします。詳細については、「クラウドディスクのリリース」をご参照ください。
-
-
テスト前にデバイス上のデータをバックアップします。詳細については、「スナップショットの手動作成」をご参照ください。
説明スナップショットには料金が発生します。詳細については、「スナップショットの課金」をご参照ください。
-
オペレーティングシステムに応じて 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 を実行している場合は、リポジトリアドレスを変更してください。詳細については、「CentOS または Debian の保守終了後のリポジトリアドレス変更」をご参照ください。
sudo apt-get update sudo apt-get install libaio* fio -y -
/tmp ディレクトリに移動します。
cd /tmp -
テストコマンドを実行します。
-
クラウドディスクのテストコマンドについては、「クラウドディスクのテストコマンド」セクションをご参照ください。
-
ローカルディスクのテストコマンドについては、「ローカルディスクのテストコマンド」セクションをご参照ください。
-
-
テスト結果を確認します。メトリック値はクラウドディスクのカテゴリによって異なります。以下の図の値は参考情報としてのみご利用ください。
-
IOPS値は IOPS テスト結果を示します。
-
BW値はスループットテスト結果を示します。
-
lat (usec) 値はレイテンシテスト結果を示します。

クラウドディスクのテストコマンド
パーティション、ファイルシステム、またはデータが含まれるディスク上で fio を実行すると、ファイルシステムエラーおよびデータ損失が発生する可能性があります。データディスクにパーティションおよびファイルシステムがある場合は、テスト用に新しい空のデータディスクを作成してください。
-
同一構成の従量課金ディスクを作成し、インスタンスにアタッチします。詳細については、「データディスクの作成」をご参照ください。
-
テスト完了後:
-
ディスクを保持する場合は、「データディスクの再初期化」をご参照ください。
-
以下のコマンドのパラメーター値は参考情報としてのみご利用ください。「操作手順」セクションの手順 2 で取得したブロックストレージデバイス名に /dev/your_device を置き換えてください。たとえば、/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 を実行すると、ファイルシステムエラーおよびデータ損失が発生する可能性があります。データディスクにパーティションおよびファイルシステムがある場合は、ローカルディスクを搭載した新しいインスタンスを作成してテストを行ってください。
-
ローカルディスクはインスタンス作成時のみ作成可能です。テスト用に同一構成の新しいインスタンスを作成します。詳細については、「ECS インスタンスのカスタム起動」をご参照ください。
-
テスト完了後:
-
インスタンスを保持する場合は、「データディスクの再初期化」をご参照ください。
-
以下のコマンドはローカル NVMe SSD およびローカル SATA HDD に適用されます。パラメーター値は参考情報としてのみご利用ください。「操作手順」セクションの手順 2 で取得したブロックストレージデバイス名に /dev/your_device を置き換えてください。たとえば、/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 |
I/O エンジンです。ほとんどの場合、libaio が使用されます。その他のエンジンについては、fio のドキュメントをご参照ください。 |
|
bs |
I/O 単位のブロックサイズです。デフォルト値:4k。読み取り/書き込みの値を個別に指定する場合は <read>,<write> の形式で記述します。 |
|
size |
テストファイルサイズです。 fio は、指定されたサイズの読み取りまたは書き込みが完了するとテストを終了します(ランタイムで制限されない限り)。指定しない場合、fio は指定されたファイルまたはデバイスの全サイズを使用します。パーセント (1~100) で指定することも可能です。たとえば、size=20% はファイルまたはデバイスの総サイズの 20% を使用します。 |
|
numjobs |
並行スレッド数です。デフォルト値:1。 |
|
runtime |
テスト持続時間(秒単位)です。 指定しない場合、テストは size で指定されたファイルが bs で指定されたブロックサイズで完全に読み取られるか書き込まれるまで実行されます。 |
|
group_reporting |
結果の表示モードです。 指定すると、結果はタスクごとではなくプロセスごとに集計されます。 |
|
filename |
テスト対象パス(デバイス名またはファイルパス)です。本トピックでは、ファイルシステムのない生ディスクを対象としています。/dev/your_device を実際のデバイスパスに置き換えてください。 |
|
name |
テスト名です。必要に応じて指定します。前述の例では、Rand_Write_Testing が使用されています。 |
完全なパラメーターのリファレンスについては、「fio(1) - Linux man page」をご参照ください。