fioとは
fioと呼ばれるLinux用のディスクI/Oベンチマークツール(ディスク性能計測ツール)が有る。すげー適当に言うとCrystalDiskMarkのLinux版である。
このツール、hdparmコマンドやddコマンドで性能を測定するのに比べてかなり高機能なのだが、いかんせん結果が非常に分かりづらい
あのインテルがGUIビジュアライズツールを出しているぐらいといえばその辛さが伝わるはず。
でググってたら神シェルスクリプトを見つけてしまった。
fioでCrystalDiskMarkっぽい計測を行うコマンドを作った - ぶていのログでぶログ
が、悲しいことに↑のコマンドはfio 2.xにしか対応していない。3以降では出力のフォーマットが変わってしまい、うまく加工できなくなってしまったのである。。。
そこで自分でCrystalDiskMarkっぽい計測ができるように作った。
環境
- fio バージョン 2.x or 3.x
やり方
まずはfioをインストールする必要がある。Ubuntuの場合は以下
apt install fio
で、適当なところに以下のようなテキストファイルを作成する ここでは/tmp/fio.txtで保存した
[global] ioengine=libaio iodepth=1 size=1g direct=1 runtime=60 directory=${TARGET} stonewall [Seq-Read] bs=1m rw=read [Seq-Write] bs=1m rw=write [Rand-Read-512K] bs=512k rw=randread [Rand-Write-512K] bs=512k rw=randwrite [Rand-Read-4K] bs=4k rw=randread [Rand-Write-4K] bs=4k rw=randwrite [Rand-Read-4K-QD32] iodepth=32 bs=4k rw=randread [Rand-Write-4K-QD32] iodepth=32 bs=4k rw=randwrite
あとはコマンドを叩くだけ
TARGET=/tmp fio -f fio.txt --output-format=terse | awk -F ';' '{print $3, ($7+$48) / 1000}'
環境変数TARGETではディスク性能を計測したいディスクの存在するディレクトリを指定すること。/dev/sdaのようなディスクドライブを指定するわけではないので注意
暫く待つと以下のような結果が表示される。
Seq-Read 421.284 Seq-Write 64.062 Rand-Read-512K 173.289 Rand-Write-512K 57.149 Rand-Read-4K 21.874 Rand-Write-4K 23.228 Rand-Read-4K-QD32 24.096 Rand-Write-4K-QD32 26.229
結果の見方は「CrystalDiskMark 見方」でググろう(投げやり
CrystalDiskMarkの使い方と結果の見方 SSD徹底解説!
オプションについて
/tmp/fio.txtではグローバルオプションとしていくつかオプションを指定している
- ioengine=libaio とりあえずlibaioを指定
- iodepth=1 I/Oの多重度 デフォルト1だし無指定でもいいかも
- size=1g 各JobのI/Oサイズ
- direct=1 Linuxのキャッシュを使わないように
- runtime=60 各ジョブで性能測定をする時間
- directory=${TARGET} 環境変数TARGETで計測先を指定できるように
- stonewall 1ジョブがエラーで終了すると残りのジョブを実行せずに終了するように
蛇足
メモリ上(/dev/shm)でやったらめっちゃ速かった(当然)
Seq-Read 188.966 Seq-Write 959.355 Rand-Read-512K 1526.31 Rand-Write-512K 3167.9 Rand-Read-4K 1956.3 Rand-Write-4K 1792.44 Rand-Read-4K-QD32 1899.59 Rand-Write-4K-QD32 1753.47