fio简介
fio是一个适应性非常强的软件,基本上能够模拟所有的IO请求,是目前最全面的一款测试软件。
fio安装
ubuntu环境:
apt-get intall librbd-dev
centos环境:
#yum方式
yum install fio libaio-devel
#手动方式
wget http://brick.kernel.dk/snaps/fio-2.2.10.tar.gz
tar -zxvf fio-2.2.10.tar.gz
cd fio-2.2.10
make
make install
FIO用法
#顺序读
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
参数说明:
参数项 | 参数含义 |
---|---|
filename | 指定文件(设备)的名称。可以通过冒号分割同时指定多个文件 |
direct | bool类型,如果设置成true (1),表示不使用io buffer |
iodepth | 如果ioengine采用异步方式,该参数表示一批提交保持的io单元 |
rw | I/O模式,随机读写,顺序读写等等 |
ioengine | I/O引擎,现在fio支持19种ioengine。默认值是sync同步阻塞I/O,libaio是Linux的native异步I/O |
bs | I/O block大小 |
size | 指定job处理的文件的大小 |
numjobs | 指定job的克隆数(线程) |
runtime | 指定在多少秒后停止进程。如果未指定该参数,fio将执行至指定的文件读写完全完成 |
group_reporting | 当同时指定了numjobs了时,输出结果按组显示 |
name | 指定job的名字 |
#顺序写
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
#随机读
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
#随机写
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=1000 -group_reporting -name=mytest
#混合随机读写
fio -filename=/dev/sda -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=200G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop
硬盘性能指标
顺序读写 (吞吐量,常用单位为MB/s):文件在硬盘上存储位置是连续的。
适用场景:大文件拷贝(比如视频音乐)。速度即使很高,对数据库性能也没有参考价值。
4K随机读写 (IOPS,常用单位为次):在硬盘上随机位置读写数据,每次4KB。
适用场景:操作系统运行、软件运行、数据库。
fio测试
#创建100G的image
rbd create image01 -p pool-6ee65215e53546f58ee3c79325e4a923 --size 102400
#挂载到本地
[root@test ~]# rbd map image01 -p pool-6ee65215e53546f58ee3c79325e4a923
/dev/rbd0
#测试4K随机写
fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randwrite -size=10G -filename=/dev/rbd0 -name="4KB randwrite test" -iodepth=64 -runtime=3600
bw=52674KB/s, iops=13168
#测试64K顺序写
fio -ioengine=libaio -bs=64k -direct=1 -thread -rw=write -size=10G -filename=/dev/rbd0 -name="64KB write test" -iodepth=64 -runtime=3600
bw=197822KB/s,iops=3090
dd测试ceph
[root@test ~]# dd if=/dev/zero of=/dev/rbd0 bs=1G count=1 oflag=direct
记录了1+0 的读入
记录了1+0 的写出
1073741824字节(1.1 GB)已复制,5.74104 秒,187 MB/秒
通过rbd map到本地的盘写性能大概 187MB/s