一 何为fio
见官网:http://freshmeat.net/projects/fio/
总之就是一个磁盘io的测试工具,支持多引擎和多系统测试,非常灵活和强大。
二 安装
Linux:yum install libaio-devel 依赖包安装 解压tar包 然后make && make install
Windows:https://bluestop.org/fio/下载windows 安装包 .msi 结尾的
直接安装 下一步 下一步 就行。 安装完成后,cmd :fio –version 会有版本号
三 测试
先说下我测试的目的,mysql数据库有个参数需要知道磁盘的iops。主要目的就要准确的知道磁盘的iops。
什么是iops
即每秒进行读写(I/O)操作的次数Iops越高表示磁盘读(写)数据越快。不能设置,是出厂就已经定了的
Linux :centos7 虚拟机iSCSI 硬盘 (真实硬盘是希捷 移动硬盘)
测试命令:
fio -filename=a.txt -direct=1 -iodepth 1-thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10-group_reporting -name=test
filename参数指定某个要测试的裸设备(硬盘或分区),不要在有数据的磁盘测试,linux一切接文件,设备也是文件表示。-filename=a.txt 大小500m 发现iops很高5000多
fio -directory=/test/ -direct=1 -iodepth 1-thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10-group_reporting -name=test
若一定要测试系统分区较为安全的方法是:在根目录下创建一个空目录,在测试命令中使用directory参数指定该目录,而不使用filename参数 -directory=/test/ 大小还是500m 结果变成了2700左右
fio -filename=/dev/sdb1 -direct=1 -iodepth1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10-group_reporting -name=test
拿出一个真正的磁盘/dev/sdb1 测试iops 400多,这个才是比较准确的值。因为我测试的硬盘是机性硬盘,一般都是几百。上面两个有的扯,不能准确反映磁盘的读写能力。至于原因,我认为Linux一切皆文件,fio 可能把我给的a.txt /test 当成一个磁盘了。
Windows:server 2008
r2 虚拟机 硬盘同上
命令:
E:\>fio -filename=a.txt -direct=1-iodepth=1 -thread -rw=randrw -ioengine=window
saio -bs=16k -size=5g -numjobs=10 -runtime=1000-group_reporting -name=test
E:\>fio -filename=E: -direct=1-iodepth=1 -thread -rw=randrw -ioengine=windowsai
o -bs=16k -size=500m -numjobs=10-runtime=1000 -group_reporting -name=mytest
在Windows 测试中测试fio 版本较新fio-3.13,发现-directory参数不能使用,每次测试都会生成一个-filename=$filename 文件名,并不毁坏数据,并且测试结果两次测试结果相差不多。平均都是500多。(分别是5g和500m)
另外,不论Linux合适Windows,测试完后不要忘了删除测试文件。