文件系统测试维度
文件系统的测试比块要复杂一些,因为在文件是在块之上叠加了文件系统目录树结构,除直接访问裸盘外还需要搜索元数据路径。   
文件系统测试主要从以下4个维度进行评估:读写比例、OPS(每秒操作次数)、带宽(吞吐量)和时延。   
今天主要看看常用的文件系统测试工具有哪些:
vdbench
vdbench为首推文件系统测试工具,它是是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能,  
它是一个免费的工具,容易使用,而且常常用于测试和基准测试。
1.安装   
需要安装jdk
到oracel下载vdbench504;不需要安装,直接以绝对路径执行就可以
2.使用  
./vdbench -t 
这一步先测试一下工具能不能用,如何正常,会在目录下自动生成一个output
./vdbench -f parmfile
根据指定配置文件测试
这里的parmfile需要根据测试环境修改,可以参考output目录下的parmfile
3.参数说明  
对于一个文件系统,配置以下参数: 
HD:主机定义。与虚拟块设备相同。   
FSD:文件系统定义   
fsd= 标识文件系统定义的名称   
anchor= 将在其中创建目录结构的目录   
width= 要在定位符下创建的目录数   
depth= 要在定位符下创建的级别数   
files= 要在最低级别创建的文件数  
sizes= (size,size,…) 将创建的文件大小   
distribution= bottom(如果希望仅在最低级别创建文件)和 all(如果希望在所有目录中创建文件)   
openflags= 用于打开一个文件系统 (Solaris) 的 flag_list   
FWD:文件系统工作负载定义    
fwd= 标识文件系统工作负载定义的名称。    
fsd= 要使用的文件系统定义的 ID。   
host= 要用于此工作负载的主机的 ID。    
fileio= random 或 sequential,表示文件 I/O 将执行的方式。   
fileselect= random 或 sequential,标识选择文件或目录的方式。   
xfersizes= 数据传输(读取和写入操作)处理的数据大小。   
operation= mkdir、rmdir、create、delete、open、close、read、write、getattr 和 setattr。选择要执行的单个文件操作。  
rdpct= (仅)读取和写入操作的百分比。   
threads= 此工作负载的并发线程数量。每个线程需要至少 1 个文件。   
RD:运行定义   
fwd= 要使用的文件系统工作负载定义的 ID。   
fwdrate= 每秒执行的文件系统操作数量。  
format= yes / no / only / restart / clean / directories。在开始运行之前要执行的操作。  
operations= 覆盖 fwd 操作。选项相同。
4.示例
messagescan=no
hd=default,vdbench=/root/vdbench50406,user=root,shell=ssh
hd=ceph105,system=100.100.5.105
hd=ceph104,system=100.100.5.104
hd=ceph103,system=100.100.5.103
hd=host-192-168-5-102,system=100.100.5.102
hd=host-192-168-5-101,system=100.100.5.101
fsd=default,depth=2,width=10,files=1000,size=64k,shared=yes
fsd=fsd51,anchor=/mycephfs1/client14wmix-04101008-105-1
fsd=fsd52,anchor=/mycephfs2/client14wmix-04101008-105-2
fsd=fsd53,anchor=/mycephfs3/client14wmix-04101008-105-3
fsd=fsd54,anchor=/mycephfs4/client14wmix-04101008-105-4
fsd=fsd55,anchor=/mycephfs5/client14wmix-04101008-105-5
fsd=fsd56,anchor=/mycephfs6/client14wmix-04101008-105-6
fsd=fsd41,anchor=/mycephfs1/client14wmix-04101008-104-1
fsd=fsd42,anchor=/mycephfs2/client14wmix-04101008-104-2
fsd=fsd43,anchor=/mycephfs3/client14wmix-04101008-104-3
fsd=fsd44,anchor=/mycephfs4/client14wmix-04101008-104-4
fsd=fsd45,anchor=/mycephfs5/client14wmix-04101008-104-5
fsd=fsd46,anchor=/mycephfs6/client14wmix-04101008-104-6
fsd=fsd31,anchor=/mycephfs1/client14wmix-04101008-103-1
fsd=fsd32,anchor=/mycephfs2/client14wmix-04101008-103-2
fsd=fsd33,anchor=/mycephfs3/client14wmix-04101008-103-3
fsd=fsd34,anchor=/mycephfs4/client14wmix-04101008-103-4
fsd=fsd35,anchor=/mycephfs5/client14wmix-04101008-103-5
fsd=fsd36,anchor=/mycephfs6/client14wmix-04101008-103-6
fsd=fsd21,anchor=/mycephfs1/client14wmix-04101008-102-1
fsd=fsd22,anchor=/mycephfs2/client14wmix-04101008-102-2
fsd=fsd23,anchor=/mycephfs3/client14wmix-04101008-102-3
fsd=fsd24,anchor=/mycephfs4/client14wmix-04101008-102-4
fsd=fsd25,anchor=/mycephfs5/client14wmix-04101008-102-5
fsd=fsd26,anchor=/mycephfs6/client14wmix-04101008-102-6
fsd=fsd11,anchor=/mycephfs1/client14wmix-04101008-101-1
fsd=fsd12,anchor=/mycephfs2/client14wmix-04101008-101-2
fsd=fsd13,anchor=/mycephfs3/client14wmix-04101008-101-3
fsd=fsd14,anchor=/mycephfs4/client14wmix-04101008-101-4
fsd=fsd15,anchor=/mycephfs5/client14wmix-04101008-101-5
fsd=fsd16,anchor=/mycephfs6/client14wmix-04101008-101-6
fwd=default,rdpct=60,xfersizes=64k,fileio=random,fileselect=random,threads=128
fwd=fwd5,fsd=fsd5*,host=ceph105
fwd=fwd4,fsd=fsd4*,host=ceph104
fwd=fwd3,fsd=fsd3*,host=ceph103
fwd=fwd2,fsd=fsd2*,host=host-192-168-5-102
fwd=fwd1,fsd=fsd1*,host=host-192-168-5-101
rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=600,interval=1
blogbench
blogbench是尝试重现真实繁忙的文件服务器的负载来进行基准测试工具,它只进行总体打分测试。 测试指标包括:Spawning writers、Spawning rewriters、Spawning commenters、Spawning readers
示例:    
blogbench -d /data -c 10 -i 10 -r 10 -w 10 -W 10 -s 10
iozone
IOZONE中基本概念   
Write: 测试向一个新文件写入的性能  
Re-write: 测试向一个已存在的文件写入的性能  
Read: 测试读一个已存在的文件的性能。   
Re-Read: 测试读一个最 近读过的文件的性能   
Stride Read: 测试跳跃读一个文件的性能   
512M~4096M是指:测试的文件大小  
64、4096是指:是指以64K和4M来进行传输
示例:   
命令:iozone -a -n 512m -g 4g -i 0 -i 1 -i 5 -f /root/myCephFS2/iozone -Rb ./iozone.xls  
       iozone -a -s 4g -i 0 -i 1 -f /root/mynfs/iozone -Rb /root/iozone_5.xls
fio
FIO是用于测试IOPS非常好用的工具,支持13种不同的I/O引擎,包括sync、mmap、libaio、posixaio等等。 
fio 官网地址:http://freshmeat.net/projects/fio/
参数:  
-filename:  表示测试的文件名称,一般是指要测试的文件夹目录地址  
-direct:  测试时绕开机器自带的buffer。 
-iodepth: 每一个文件的队列长度  
-thread -rw:     测试时类型:read/write/randread/randwrite/randrw  
-ioengine:IO引擎 
-bs:     单次IO块大小 
-size:    测试文件大小 
-numjobs:测试的线程数  
-runtime: 测试时间  
-group_reporting:统计汇总结果  
-name:	报告名称
根据以上工具,测试CephFS后得出的结论如下: 
(1) 内核态挂载和fuse挂载比较   
    内核态整体(带宽和时延)要比fuse挂载好50%~100%,但内核态时延抖动较大    
(2) 元数据在SSD磁盘与在HDD磁盘的区别     
    元数据的瓶颈在海量小文件时,会体现出来,相比较SSD的性能是HDD性能的3倍以上。    
(3) 单MDS与多MDS的区别  
    多MDS性能很明显要好于单MDS的性能  
(4) Ceph-Fuse与NFS的区别
    Ceph-Fuse在横向扩展上有优势,NFS横向扩展需要使用分布式NAS技术,另外NFS的大文件性能要好于CephFS-Fuse
    NFS的时延要好于Ceph-Fuse.