硬盘性能测试

硬盘的性能如何衡量?一般使用以下几个指标对存储设备的性能进行描述:

IOPS:Input/Output Operations Per Second,是一个用于计算机存储设备(如硬盘(HDD)、固态硬盘(SSD)或存储区域网络(SAN))性能测试的量测方式,可以视为是每秒的读写次数,单位为次(计数)。存储设备的底层驱动类型决定了不同的IOPS。
吞吐量:每秒的磁盘读写数据量,即磁盘写入加上读出的数据的大小。单位为MB/s。
时延:IO操作的发送时间到接收确认所经过的时间,单位为秒。
bw:带宽 KB/s 
iops:每秒钟的IO数
runt:总运行时间
lat (msec):延迟(毫秒)
msec: 毫秒
usec: 微秒

IOPS

IOPS(Input/Output Operations Per Second)是一个用于计算机存储设备(如硬盘(HDD)、固态硬盘(SSD)存储区域网络(SAN)性能测试的量测方式,可以视为是每秒的读写次数。和其他性能测试一样,存储设备制造商提出的IOPS不保证就是实际应用下的性能。

IOPS的数值会随系统配置而有很大的不同,依测试者在测试时的控制变因而异,控制变因包括读取及写入的比例、其中循序访问及随机存取的比例及配置方式、线程数量及访问队列深度,以及数据区块的大小。其他因素也会影响IOPS的结果,例如系统设置、存储设备的驱动程序、操作系统后台运行的作业等。若在测试固态硬盘时,是否先进行预调(preconditioning)机制也会影响IOPS的结果。

FIO测试工具

FIO是测试磁盘性能的一个非常好的工具,用来对硬件进行压力测试和验证。支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。

支持几乎所有的存储描述参数,大量对CPU、内存、进程/线程、文件、IO特性的配置。

FIO最初是用来节省为特定负载写专门测试程序,或是进行性能测试,或是找到和重现bug的时间。

请特别注意:
1. 请不要在系统盘上进行 fio 测试,避免损坏系统重要文件
2. fio测试建议在空闲的、未保存重要数据的硬盘上进行,并在测试完后重新制作文件系统。请不要在业务数据硬盘上测试,避免底层文件系统元数据损坏导致数据损坏
2. 测试硬盘性能时,推荐直接测试裸盘(如 vdb);测试文件系统性能时,推荐指定具体文件测试(如 /data/file)

1、FIO安装

wget http://freshmeat.net/projects/fio/ 或者 http://brick.kernel.dk/snaps/fio-2.2.5.tar.gz 

yum install gcc libaio libaio-devel

tar zxvf fio-2.2.5.tar.gz  && cd fio-2.2.5.tar.gz 

./configure

make && make install

2、FIO用法

fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest

常用参数如下:
filename=/dev/sdb1       测试文件名称,通常选择需要测试的盘的data目录。待测试的磁盘设备文件                                                name=mytest                 job的名称
direct=1                          测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite                  读写模式,包括顺序读(read)、顺序写(write)、随机读(randread)、随机写(randwrite)、混合读写(rw)、随机读写(randrw)
bs=16k                           单次io的块文件大小为16k
bsrange=512-2048        同上,提定数据块的大小范围,也可以是4k,8k,32k
size=5g                          本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30                   本次的测试线程为30.
runtime=1000                测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync             io引擎使用pync方式
rwmixwrite=30               在混合读写的模式下,写占30%
group_reporting             关于显示结果的,汇总每个进程的信息。                                                    iodepth =30                    IO深度为30,最大IO并发数                                                                         time_based                     该参数不需要值,只是fio基于时间来运行                                                  norandommp                   这个参数在测试随机IO时起作用,默认随机IO也回写入所有的Size里描述的块,加了之后就打破了这个限制,有些块可能无法被read/write到,有些则可能IO多次,能够更好的模拟用户场景。                                                                                                      randrepeat=0                   随机序列是否重复                         

此外
lockmem=1g               只使用1g内存进行测试。
zero_buffers                用0初始化系统buffer。
nrfiles=8                      每个进程生成文件的数量。

3、测试过程

环境:4个盘做raid5

fio -filename=/dev/sda3 -iodepth=30 -thread -rw=read -ioengine=libio -bs=4k -runtime=120 -numjobs=50 -group_reporting -name=iotest|tee read_4k

上图中时延“18136.07”单位为微秒(usec),可以转换单位为18.136毫秒(ms) 


另一种简单的测试方法

利用配置文件,此处的fio.conf是自己编写的脚本文件

job文件格式

job file格式采用经典的ini文件,[]中的值表示job name,可以采用任意的ASCII字符,‘global’除外,global有特殊的意义。Global section描述了job file中各个job的默认配置值。一个job section可以覆盖global section中的参数,一个job file可以包含几个global section.一个job只会受到它上面的global section的影响。‘;’和‘#’可以用作注释

实例一:

[global]
ioengine=libaio
iodepth=128
time_based
direct=1
thread=1
group_reporting
randrepeat=0
norandommap
numjobs=32
timeout=6000
runtime=120

[randrw-4k]
rw=randrw
bs=4k
filename=/dev/sdb:/dev/sdc:/dev/sdf:/dev/sdd:/dev/sde:/dev/sdh:/dev/sdg:/dev/sdi:/dev/sdk:/dev/sdj:/dev/sdl:/dev/sdm
rwmixread=100
stonewall

[randrw-8k]
rw=randrw
bs=8k
filename=/dev/sdb:/dev/sdc:/dev/sdf:/dev/sdd:/dev/sde:/dev/sdh:/dev/sdg:/dev/sdi:/dev/sdk:/dev/sdj:/dev/sdl:/dev/sdm
rwmixread=100
stonewall

[randrw-512k]
rw=randrw
bs=512k
filename=/dev/sdb:/dev/sdc:/dev/sdf:/dev/sdd:/dev/sde:/dev/sdh:/dev/sdg:/dev/sdi:/dev/sdk:/dev/sdj:/dev/sdl:/dev/sdm
rwmixread=100

实例二:

$fio –name=global –rw=randread –size=128m –name=job1 –name=job2

运行fio文件

运行方式:

$fio job_file

它会根据job_file的内容来运行。你可以在命令行中指定多个job file,fio进串行化运行这些文件。相当于在同一个job file不同的section之间使用了stonewall参数。

如果某个job file只包含一个job,可以在命令行中给出参数,来直接运行,不再需要读取job file。命令行参数同job file参数的格式是一样的。比如,在job file中的参数iodepth=2,在命令行中可以写为–iodepth 2 或是 –iodepth=2.

fio不需要使用root来执行,除非使用到的文件或是设备需要root权限。一些选项可能会被限制,比如内存锁,io调度器切换,或是nice value降级

参考文件:https://www.iteye.com/blog/elf8848-2168876

                 fio工具测试硬盘性能_十里平湖的博客-CSDN博客_fio测试磁盘性能

iodepth和numjobs的区别????

参考文件:FIO Benchmark - HiPhoenix - 博客园

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值