ブロックデバイスのベンチマークを取りたいと思いました。
ぱぱっとやる方法だと、 dd
hdparm
等があるのですが、キャッシュなどいろいろ考えることも多いいので。今回は fio を試してみました。
まぁ普段の速度測定は dd でやっちゃうんだけどね。。。ネットワークは dd + ssh で。。。
fio のインストール
debian だと apt で一発ですね。さすがdebian
sudo apt install fio
fio の確認
無事インストールされていることがわかる。
takuya@:~$ which fio /usr/bin/fio
fio でテストする方法
fio でテストするためには、同じ条件でディスクを変えてテストすることになります。
このために、条件を一致させるための「ジョブファイル」というのを作るようです。
fio のジョブファイルのサンプル
takuya@:~$ cat myjob.fio [Sequential-Read] # jobの名前 rw=read # シーケンシャルでreadする directory=/home/takuya/mnt/ # ベンチマークで使うディレクトリ size=100m # ベンチマークで使用するデータサイズ。キャッシュサイズを考慮して決める。 ioengine=libaio # 非同期I/Oでテストする。指定しないとsync(同期I/O)になる。 [Sequential-Write] rw=write # シーケンシャルでwriteする directory=/home/takuya/mnt/ size=100m ioengine=libaio [Random-Read] rw=randread # ランダムでreadする directory=/home/takuya/mnt/ size=100m ioengine=libaio [Random-Write] rw=randwrite # ランダムでwriteする directory=/home/takuya/mnt/ size=100m ioengine=libaio
あとは実行
ジョブファイルを作ったら、コレを実行する。
takuya@:~$ fio myjob.fio
出力結果
結構あれこれ出力されるが、bw
さえ見ておけば比較できると思う。
Sequential-Read: (groupid=0, jobs=1): err= 0: pid=19749: Wed Jan 4 20:35:30 2017 read : io=102400KB, bw=48393KB/s, iops=12098, runt= 2116msec Sequential-Write: (groupid=0, jobs=1): err= 0: pid=19750: Wed Jan 4 20:35:30 2017 write: io=102400KB, bw=291738KB/s, iops=72934, runt= 351msec Random-Read: (groupid=0, jobs=1): err= 0: pid=19751: Wed Jan 4 20:35:30 2017 read : io=102400KB, bw=736685B/s, iops=179, runt=142337msec Random-Write: (groupid=0, jobs=1): err= 0: pid=19752: Wed Jan 4 20:35:30 2017 write: io=102400KB, bw=256000KB/s, iops=64000, runt= 400msec
読みづらい・・・出力単位をMB にしたい・・・unit を調べてみたけどkb_unit 設定しかなかった・・・
複数HDDのベンチマークを取って比較するジョブ・ファイルの構成
[HDD-A-Random-Write] rw=randwrite # ランダムでwriteする directory=/home/takuya/mnt/ size=100m ioengine=libaio [HDD-B-Random-Write] rw=randwrite # ランダムでwriteする directory=/tmp size=100m ioengine=libaio
こんな感じに複数作れば一回で終わる。