ブロックストレージのベンチマークは、その性能を評価し、パフォーマンスを最大限に引き出すための最適化に役立ちます。raw ディスクをテストすることで、最も正確なパフォーマンスメトリクスを取得できます。このトピックでは、Linux システム上でオープンソースツールの Fio を使用して、IOPS、スループット、レイテンシーなど、raw ディスクの主要なパフォーマンスメトリクスをベンチマークする方法について説明します。
Fio (Flexible I/O Tester) は、ランダムまたはシーケンシャルの読み書きなど、さまざまなワークロードでストレージデバイスをベンチマークするために使用される、強力なオープンソースの I/O テストツールです。
操作手順
raw ディスクをテストすることで、最も正確なブロックストレージのパフォーマンス結果が得られます。ただし、パーティション、ファイルシステム、またはその他のデータが含まれるブロックストレージデバイスに対して Fio を直接実行すると、ファイルシステムエラーやデータ損失が発生する可能性があります。開始する前に、スナップショットを作成してデータをバックアップしてください。詳細については、「手動でスナップショットを作成する」をご参照ください。
データ損失を防ぐため、システムディスクまたはデータを含むデータディスクはテストしないよう強く推奨します。テストには、新規作成した未初期化の空のデータディスクを使用することを推奨します。
パフォーマンステストの結果はテスト環境で取得されたものであり、参考値です。本番環境では、ネットワーク状況や同時アクセスなどの要因により、クラウドディスクのパフォーマンスが変動する場合があります。実際のパフォーマンスとは異なる場合があります。
テスト完了後、新しいクラウドディスクを次のように処理します。
ディスクを保持する場合は、直接使用しないでください。データディスクを再初期化する必要があります。
ディスクが不要な場合は、データディスクをデタッチしてから、クラウドディスクをリリースします。
このトピックでは、Alibaba Cloud Linux 3.2104 LTS 64-bit のパブリックイメージを例に説明します。手順は OS によって異なる場合があります。
ECS インスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して、ブロックストレージのデバイス名を確認します。
sudo fdisk -luコマンド出力では、
/dev/vdaはシステムディスク、/dev/vdbと/dev/vdcはデータディスクです。/dev/vdcにはパーティションがありません。[ecs-a ]$ sudo fdisk -lu Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: F51132A7-67B1-4650-806D-FD0DE6E1210C Device Start End Sectors Size Type /dev/vda1 2048 6143 4096 2M BIOS boot /dev/vda2 6144 415743 409600 200M EFI System /dev/vda3 415744 83886046 83470303 39.8G Linux filesystem Disk /dev/vdb: 30 GiB, 32212254720 bytes, 62914560 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: C36DF120-8650-4188-8043-AEF9C85F31EF Device Start End Sectors Size Type /dev/vdb1 2048 62912511 62910464 30G Linux filesystem Disk /dev/vdc: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytesコマンドの出力に示すように、このインスタンスには 3 つのブロックストレージデバイスがあります。システムディスクの /dev/vda と、データディスクの /dev/vdb および /dev/vdc です。
次のコマンドを実行して、ブロックストレージデバイスにパーティションまたはファイルシステムがあるかどうかを確認します。
sudo blkid[ecs-a ]$ sudo blkid /dev/vdb1: UUID="9c32c24f-d2b8-4aa8-8" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="4bd66635-f5f4-4dc0-9bdd-664fd5b8d2fb" /dev/vda2: SEC_TYPE="msdos" UUID="7E" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="82a50cd6-9899-41eb-91fe-7027bf257086" /dev/vda3: LABEL="root" UUID="beef9d8d-ba84-46d9-8" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="e0d4fa20-912d-4e86-943e-6b0368xxxxxx" /dev/vda1: PARTUUID="d083a7cd-a7ea-4898-89d5-8e1510bed584"出力から、デバイス /dev/vda と /dev/vdb にはパーティションとファイルシステムがあることがわかります。/dev/vdc に関する情報は返されていないため、/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) しています。ECS インスタンスが Debian 9 または Debian 10 を実行している場合は、先にリポジトリのアドレスを変更してください。詳細については、「EOL 後の CentOS および Debian のリポジトリアドレスの変更」をご参照ください。
sudo apt-get update sudo apt-get install libaio* fio -y-
/tmp ディレクトリに移動します。
cd /tmp パフォーマンステストコマンドを実行します。特定のコマンドについては、以降のセクションをご参照ください。
クラウドディスクについては、「クラウドディスクのパフォーマンステストコマンド」をご参照ください。
ローカルディスクについては、「ローカルディスクのパフォーマンステストコマンド」をご参照ください。
テスト結果を確認します。値はクラウドディスクによって異なる場合があります。次のコードブロック内の値は参考値です。
IOPS 関連のテスト結果については、
IOPS=***フィールドをご参照ください。 次の Fio 出力サンプルは、ランダム書き込み (Rand_Write) テストの結果を示しています。 書き込み行では、IOPS=2301 がランダム書き込みの主要な性能指標です:Starting 1 process Jobs: 1 (f=0): [f(1)][100.0%][w=9061KiB/s][w=2265 IOPS][eta 00m:00s] Rand_Write Testing: (groupid=0, jobs=1): err= 0: pid=15900: Tue Nov 19 11:28:24 2024 write: IOPS=2301, BW=9206KiB/s (9427kB/s)(1024MiB/113896msec); 0 zone resets slat (usec): min=2, max=1718, avg= 5.43, stdev= 7.98 clat (usec): min=382, max=119809, avg=55606.05, stdev=7040.12 lat (usec): min=394, max=119812, avg=55611.49, stdev=7039.41 clat percentiles (msec): | 1.00th=[ 9], 5.00th=[ 51], 10.00th=[ 51], 20.00th=[ 51], | 30.00th=[ 51], 40.00th=[ 57], 50.00th=[ 60], 60.00th=[ 61], | 70.00th=[ 61], 80.00th=[ 61], 90.00th=[ 61], 95.00th=[ 61], | 99.00th=[ 63], 99.50th=[ 65], 99.90th=[ 67], 99.95th=[ 77], | 99.99th=[ 101] bw ( KiB/s): min= 9000, max=28976, per=100.00%, avg=9213.14, stdev=1317.97, samples=227 iops : min= 2250, max= 7244, avg=2303.28, stdev=329.49, samples=227 lat (usec) : 500=0.01%, 750=0.01%, 1000=0.01% lat (msec) : 2=0.03%, 4=0.45%, 10=0.52%, 20=0.04%, 50=0.82% lat (msec) : 100=98.11%, 250=0.01%スループット関連のテスト結果については、次の出力に示すように、
BW=***フィールドをご参照ください:Jobs: 1 (f=1): [W(1)][100.0%][w=85.0MiB/s][w=85 IOPS][eta 00m:00s] Write_PPS_Testing: (groupid=0, jobs=1): err= 0: pid=17934: Tue Nov 19 11:32:19 2024 write: IOPS=124, BW=124MiB/s (130MB/s)(1024MiB/8229msec); 0 zone resets slat (usec): min=27, max=4026, avg=94.51, stdev=125.97 clat (msec): min=4, max=1154, avg=513.48, stdev=208.14 lat (msec): min=4, max=1154, avg=513.57, stdev=208.15 clat percentiles (msec): | 1.00th=[ 17], 5.00th=[ 75], 10.00th=[ 93], 20.00th=[ 567], | 30.00th=[ 584], 40.00th=[ 584], 50.00th=[ 584], 60.00th=[ 584], | 70.00th=[ 584], 80.00th=[ 584], 90.00th=[ 592], 95.00th=[ 693], | 99.00th=[ 1062], 99.50th=[ 1099], 99.90th=[ 1133], 99.95th=[ 1150], | 99.99th=[ 1150] bw ( KiB/s): min=30720, max=356352, per=96.43%, avg=122881.25, stdev=65548.59, samples=16 iops : min= 30, max= 348, avg=120.00, stdev=64.01, samples=16 lat (msec) : 10=0.49%, 20=0.68%, 50=2.15%, 100=10.74%, 250=1.86% lat (msec) : 500=3.22%, 750=76.46%, 1000=2.73%, 2000=1.66% cpu : usr=0.89%, sys=0.45%, ctx=1025, majf=0, minf=10 IO depths : 1=0.1%, 2=0.2%, 4=0.4%, 8=0.8%, 16=1.6%, 32=3.1%, >=64=93.8% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=99.9%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% issued rwts: total=0 1024 0 0 short=0 0 0 0 dropped=0 0 0 0レイテンシー関連のテスト結果については、lat (usec) フィールドをご参照ください。合計レイテンシー統計行
lat (usec): min=254, max=169188, avg=432.25, stdev=487.95では、平均レイテンシーは約 432 マイクロ秒です。Jobs: 1 (f=1): [w(1)][100.0%][w=9169KiB/s][w=2292 IOPS][eta 00m:00s] Rand_Write_Latency_Testing: (groupid=0, jobs=1): err= 0: pid=19530: Tue Nov 19 11:38:31 2024 write: IOPS=2301, BW=9206KiB/s (9427kB/s)(1024MiB/113903msec); 0 zone resets slat (usec): min=2, max=19160, avg= 8.68, stdev=40.53 clat (usec): min=3, max=169175, avg=423.57, stdev=486.23 lat (usec): min=254, max=169188, avg=432.25, stdev=487.95 clat percentiles (usec): | 1.00th=[ 334], 5.00th=[ 343], 10.00th=[ 347], 20.00th=[ 351], | 30.00th=[ 355], 40.00th=[ 359], 50.00th=[ 367], 60.00th=[ 371], | 70.00th=[ 379], 80.00th=[ 396], 90.00th=[ 465], 95.00th=[ 562], | 99.00th=[ 1614], 99.50th=[ 2671], 99.90th=[ 5735], 99.95th=[ 6194], | 99.99th=[ 7439] bw ( KiB/s): min= 5840, max=10416, per=100.00%, avg=9211.26, stdev=495.72, samples=227 iops : min= 1460, max= 2604, avg=2302.80, stdev=123.94, samples=227 lat (usec) : 4=0.01%, 10=0.01%, 50=0.01%, 100=0.01%, 250=0.01% lat (usec) : 500=93.01%, 750=4.06%, 1000=0.97% lat (msec) : 2=1.23%, 4=0.42%, 10=0.30%, 20=0.01%, 50=0.01% lat (msec) : 250=0.01% cpu : usr=0.84%, sys=3.00%, ctx=262469, majf=0, minf=10
クラウドディスクのパフォーマンステストコマンド
テスト対象のデバイスにパーティション、ファイルシステム、またはデータが含まれている場合、そのデバイスに対して Fio を直接実行すると、ファイルシステムエラーやデータ損失が発生する可能性があります。データディスクにパーティションとファイルシステムが含まれている場合は、テスト用に新しい空のデータディスクを作成することを推奨します。
同一構成の従量課金クラウドディスクを作成し、インスタンスにアタッチしてテストできます。詳細については、「データディスクを作成する」をご参照ください。
テスト完了後:
ディスクを保持する場合は、データディスクを再初期化します。
ディスクが不要な場合は、デタッチしてからクラウドディスクをリリースします。
以下のコマンドのパラメーター値は参考用です。/dev/your_device を、ステップ 2 で特定したブロックストレージデバイスの名前に置き換えてください。例えば、テスト対象のクラウドディスクのデバイス名が /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 エンジンです。 |
bs | 各 I/O ユニットのブロックサイズです。デフォルト値:4 KiB。 |
size | テストファイルのサイズです。 Fio は、指定された量のデータの読み取りまたは書き込みが完了すると停止しますが、 |
numjobs | テストの同時スレッド数です。デフォルト値:1。 |
runtime | テスト時間 (秒) です。 このパラメータを指定しない場合、FIO は size で指定したサイズのファイルに対し、bs で指定したサイズの I/O ブロックを使用して読み取り/書き込みを完了します。 |
group_reporting | テスト結果の表示モードです。 指定した場合、ジョブ単位ではなくグループ単位で結果を集計します。 |
filename | テスト対象へのパスには、デバイス名またはファイルパスを指定します。このトピックでは、すべての Fio テストで、ファイルシステムのないディスク全体 (raw ディスク) を対象とします。間違ったディスクをテストして誤ってデータを破壊しないように、コマンド例ではプレースホルダー /dev/your_device が使用されています。忘れずに実際のデバイスパスに置き換えてください。 |
name | 例の Rand_Write_Testing のような、テストジョブのユーザー定義名です。 |
パラメータの詳細については、「fio(1) man page」をご参照ください。