ストレージパフォーマンスの計測方法¶
IPVのストレージパフォーマンスを測定する方法を記載します。
ストレージのパフォーマンス基準は主に"IOPS"、"スループット"および"レイテンシ"となります。
- IOPS
1秒当たりにディスクが処理できるI/Oアクセス(書き込み/読み込み)の数となります。
データベースシステムは、"IOPS"の影響を受けます。
- スループット
1秒間に正常に転送されるデータサイズとなります。
大規模な読み込みまたは書き込み操作を必要とするアプリケーションは、"スループット"の影響を受けます。
- レイテンシ
I/Oリクエストを完了させるために必要な時間となります。
"IOPS"に影響を受けるシステムは、"レイテンシ"の影響を受けます。
スループットの影響を受けるアプリケーションは、あまり"レイテンシ"の影響は受けません。
パフォーマンスはストレージ容量[KiB (Kibibyte)、MiB (Mebibyte)、GiB (Gibibyte) または TiB (Tebibyte)]等のバイナリ単位で測定されます。
注釈
1KiBは1,024 bytes、1MiBは1,024 KiB、1GiBは1,024 MiB、1TiBは1,024 GiBとなります。
ストレージパフォーマンスの計測¶
本ガイドでは、ストレージパフォーマンス測定にオープンソースツールの FIO を使用してベンチマークを測定し、さまざまなワークロードのシミュレートを行います。
FIOは、Linux/ Windows のどちらのオペレーティングシステムへも導入できます。
FIOの導入に関しては、前述のリンクをご参照下さい。
本ガイドでは、Linuxにて"FIO"ツールを使用したストレージパフォーマンスの測定方法を記載します。
作業手順¶
1. ストレージパフォーマンスを測定する仮想マシンの準備¶
他チュートリアルを参考に仮想ネットワーク、および仮想マシンを作成します。
FIOの導入にあたり、インターネット接続が必要となる為、インターネットと接続するOvDCネットワークと疎通ができるようにします。
本ガイドにおける、パフォーマンス測定用仮想マシンのスペックは下記の通りです。
項目 | 設定内容 |
---|---|
OS | Ubuntu-21.0.4 |
ストレージのサイズ | 80GB |
2. ストレージパフォーマンスの計測¶
2.1. FIOの導入¶
FIOをインストールします。
Ubuntuは、OSにデフォルトで設定されているリポジトリでFIOが提供されています。
# パッケージの最新化を行います
apt update
# FIOを導入します
apt install -y fio
# apt処理完了後、導入確認を行います。
fio --version
2.2. ストレージパフォーマンス計測の為の環境設定¶
"FIO"によるストレージパフォーマンス測定の為の環境設定を行います。
# FIO実行用ディレクトリの生成
cd /
mkdir fio
# FIO実行用ディレクトリの確認
cd fio
pwd
## 出力結果
/fio
FIO計測に用いるジョブファイルを作成します。
ジョブファイルのパラメータは以下となります。
パラメータ | 概要 |
---|---|
ioengine | I/O発行に使用するエンジンの指定 |
direct | "true(1)"の場合、non-buffered I/Oで計測(Linuxキャッシュを使用しない) |
invalidate | "true(1)"の際、I/O計測前にキャッシュを使用しない様にする |
group_reporting | ジョブ事に纏まったレポート生成 |
directory | FIOで使用するファイルプレフィックス |
filename | I/Oをかけるファイル、デバイスを指定(:にて複数指定が可能) |
runtime | I/O性能測定時間 |
kb_base | キロバイト(KB)サイズを"1000" or "1024"かを指定 |
パラメータ | 概要 |
---|---|
[ジョブ名] | ジョブ名 |
rw | I/O種別 |
size | I/O測定にて利用する合計サイズ |
bs | 1回のI/O転送長 |
iodepth | I/O多重度 |
numjobs | I/O実行プロセス数の指定(thread=xの場合はforkではなくpthreadを使用) |
ジョブファイルを設定行います。
本ガイドでは、ブロックサイズ4KBとします。
注釈
ブロックサイズは、お客様が導入するアプリケーション要件等に適した値を設定して下さい。
vi Rand_Read_Testing.fio
# ランダムRead用ジョブファイル
[global]
ioengine=libaio
direct=1
invalidate=1
directory=/fio
filename=fio-test
runtime=1000
kb_base=1024
[Rand_Read_Testing_4k]
rw=randread
size=1GB
bs=4k
iodepth=128
vi Rand_Write_Testing.fio
# ランダムWrite用ジョブファイル
[global]
ioengine=libaio
direct=1
invalidate=1
directory=/fio
filename=fio-test
runtime=1000
kb_base=1024
[Rand_Write_Testing_4k]
rw=randwrite
size=1GB
bs=4k
iodepth=128
vi Rand_ReadWrite_Testing.fio
# ランダムRead/Write用ジョブファイル
[global]
ioengine=libaio
direct=1
invalidate=1
directory=/fio
filename=fio-test
runtime=1000
kb_base=1024
[Rand_ReadWrite_Testing_4k]
rw=randrw
size=1GB
bs=4k
iodepth=128
2.3. ストレージパフォーマンスの計測¶
"FIO"を実行しストレージパフォーマンスを計測します。
本ガイドでは、CSV(Terse)形式にて測定結果をファイル出力させます。
# ランダムRead用ジョブの実行
fio Rand_Read_Testing.fio --output {LOGファイル名} --output-format=terse --status-interval=1
# ランダムWrite用ジョブの実行
fio Rand_Write_Testing.fio --output {LOGファイル名} --output-format=terse --status-interval=1
# ランダムRead/Write用ジョブの実行
fio Rand_ReadWrite_Testing.fio --output {LOGファイル名} --output-format=terse --status-interval=1
Terse形式の出力例を以下に示します。
# Terse出力例
3;fio-3.25;Rand_Write_Testing_4k;0;0;0;0;0;0;0;0;0.000000;0.000000;0;0;0.000000;0.000000;1.000000%=0;5.000000%=0;10.000000%=0;20.000000%=0;30.000000%=0;40.000000%=0;50.000000%=0;60.000000%=0;70.000000%=0;80.000000%=0;90.000000%=0;95.000000%=0;99.000000%=0;99.500000%=0;99.900000%=0;99.950000%=0;99.990000%=0;0%=0;0%=0;0%=0;0;0;0.000000;0.000000;0;0;0.000000%;0.000000;0.000000;1048576;105980;26495;9894;1;54146;4.153152;105.822707;2261;66653;4810.555974;2388.224064;1.000000%=3391;5.000000%=3653;10.000000%=3817;20.000000%=4014;30.000000%=4177;40.000000%=4358;50.000000%=4489;60.000000%=4685;70.000000%=4882;80.000000%=5144;90.000000%=5734;95.000000%=6651;99.000000%=9109;99.500000%=11862;99.900000%=49020;99.950000%=60030;99.990000%=65798;0%=0;0%=0;0%=0;2264;66655;4814.801801;2390.321016;88632;120304;100.000000%;106047.578947;10144.941938;4.366724%;10.381078%;17278;0;10;0.1%;0.1%;0.1%;0.1%;0.1%;0.1%;100.0%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;18.81%;80.48%;0.49%;0.12%;0.10%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;sda;8;256099;0;121;2;1216259;1216261;98.50%
3;fio-3.25;Rand_Write_Testing_4k;0;0;0;0;0;0;0;0;0.000000;0.000000;0;0;0.000000;0.000000;1.000000%=0;5.000000%=0;10.000000%=0;20.000000%=0;30.000000%=0;40.000000%=0;50.000000%=0;60.000000%=0;70.000000%=0;80.000000%=0;90.000000%=0;95.000000%=0;99.000000%=0;99.500000%=0;99.900000%=0;99.950000%=0;99.990000%=0;0%=0;0%=0;0%=0;0;0;0.000000;0.000000;0;0;0.000000%;0.000000;0.000000;1048576;106314;26578;9863;1;54146;4.153152;105.822707;2261;66653;4810.555974;2388.224064;1.000000%=3391;5.000000%=3653;10.000000%=3817;20.000000%=4014;30.000000%=4177;40.000000%=4358;50.000000%=4489;60.000000%=4685;70.000000%=4882;80.000000%=5144;90.000000%=5734;95.000000%=6651;99.000000%=9109;99.500000%=11862;99.900000%=49020;99.950000%=60030;99.990000%=65798;0%=0;0%=0;0%=0;2264;66655;4814.801801;2390.321016;88632;120304;99.749402%;106047.578947;10144.941938;4.366724%;10.381078%;17278;0;10;0.1%;0.1%;0.1%;0.1%;0.1%;0.1%;100.0%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;18.81%;80.48%;0.49%;0.12%;0.10%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;sda;8;256099;0;121;2;1216259;1216261;98.50%
Terse出力の各項目は以下となります。
# Terse出力項目
"terse_version_3","fio_version","jobname","groupid","error","read_kb","read_bandwidth_kb","read_iops","read_runtime_ms","read_slat_min_us","read_slat_max_us","read_slat_mean_us","read_slat_dev_us","read_clat_min_us","read_clat_max_us","read_clat_mean_us","read_clat_dev_us","read_clat_pct01","read_clat_pct02","read_clat_pct03","read_clat_pct04","read_clat_pct05","read_clat_pct06","read_clat_pct07","read_clat_pct08","read_clat_pct09","read_clat_pct10","read_clat_pct11","read_clat_pct12","read_clat_pct13","read_clat_pct14","read_clat_pct15","read_clat_pct16","read_clat_pct17","read_clat_pct18","read_clat_pct19","read_clat_pct20","read_tlat_min_us","read_lat_max_us","read_lat_mean_us","read_lat_dev_us","read_bw_min_kb","read_bw_max_kb","read_bw_agg_pct","read_bw_mean_kb","read_bw_dev_kb","write_kb","write_bandwidth_kb","write_iops","write_runtime_ms","write_slat_min_us","write_slat_max_us","write_slat_mean_us","write_slat_dev_us","write_clat_min_us","write_clat_max_us","write_clat_mean_us","write_clat_dev_us","write_clat_pct01","write_clat_pct02","write_clat_pct03","write_clat_pct04","write_clat_pct05","write_clat_pct06","write_clat_pct07","write_clat_pct08","write_clat_pct09","write_clat_pct10","write_clat_pct11","write_clat_pct12","write_clat_pct13","write_clat_pct14","write_clat_pct15","write_clat_pct16","write_clat_pct17","write_clat_pct18","write_clat_pct19","write_clat_pct20","write_tlat_min_us","write_lat_max_us","write_lat_mean_us","write_lat_dev_us","write_bw_min_kb","write_bw_max_kb","write_bw_agg_pct","write_bw_mean_kb","write_bw_dev_kb","cpu_user","cpu_sys","cpu_csw","cpu_mjf","cpu_minf","iodepth_1","iodepth_2","iodepth_4","iodepth_8","iodepth_16","iodepth_32","iodepth_64","lat_2us","lat_4us","lat_10us","lat_20us","lat_50us","lat_100us","lat_250us","lat_500us","lat_750us","lat_1000us","lat_2ms","lat_4ms","lat_10ms","lat_20ms","lat_50ms","lat_100ms","lat_250ms","lat_500ms","lat_750ms","lat_1000ms","lat_2000ms","lat_over_2000ms","disk_name","disk_read_iops","disk_write_iops","disk_read_merges","disk_write_merges","disk_read_ticks","write_ticks","disk_queue_time","disk_util"
以上が、ストレージパフォーマンス計測手順となります。