#+SETUPFILE: ~/Dropbox/Doc/Org_Templates/level-1.org
FIO 是对硬件进行性能测试和压力测试非常好用的工具, 我常常用它来测试虚拟机的 IOPS. 它支持各种引擎(sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio, 等). 而且它能像测试文件文件一样的对磁盘块设备进行测试. 更多的功能请参考它的 说明文档.
由于 FIO 提供了丰富的配置选项(块大小, 引擎, cache 方式, 文件读写方式, 测试文件 的大小分布, 等等等等), 用来做 IO 的测试是最好不过了.
安装
Install on linux
各大发行版一般都有 FIO 的支持, 所以安装很简单, 比如在我的 gentoo 上:
$ sudo emerge sys-block/fio
在没有 FIO 支持的发行版上安装也很简单, 比如在 CentOS-6 上:
$ sudo yum install gcc libaio-devel librdmacm-devel numactl-devel make # 安装依赖包
$ wget http://brick.kernel.dk/snaps/fio-2.0.14.tar.bz2 # 地址可能会变
$ ./configure && make && sudo make install
Install on windows
直接在 这里 下载 windows 的安装包.
使用
我非常喜欢 FIO 的使用和配置方式(默认能很好的工作, 提供了额外强大的扩展, 典型的 kiss + expand).
关于详细的使用文档, 可以在安装目录下找到, 比如在我的 gentoo 上位于
/usr/share/doc/fio-2.0.14/HOWTO.bz2
, 在 windows 上位于
C:\Program Files\fio\
或者这里有一份 在线的文档.
下面是一个简单的使用例子, 是我用来测试 QEMU 的 IO 性能:
[rw_8k]
# 读写策略, 有
# read 顺序读
# write 顺序写
# randread 随机读
# randwrite 随机写
# rw 混合顺序读写
# randrw 混合随机读写
rw=read
# 混合模式下的读写比例
rwmixread=50
# bssplit: 使用 10% 的 1K, 20% 的 4K, 20% 的 8KB, 30% 的 16KB, 20% 的 32KB
# 的小文件进行测试
bssplit=1k/10:4k/20:8k/20:16k/30:32k/20
# IO 引擎: 有以下几种:
# sync, psync, vsync, libaio, posixaio, solarisaio, windowsaio
ioengine=libaio
# 每个文件io队列长度
iodepth=64
# 不要使用 io 的 buffer (O_DIRECT).
direct=1
# 块大小
bs=8k
# 文件名(这里是测试设备, 使用设备名)
filename=/dev/vdb
# 文件大小
size=1G
# 用 10 个进程来测试
numjobs=10
# 统一报告
group_reporting=1