fio测试ceph性能

Posted by xue on February 18, 2017

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