云计算&存储测试:FIO工具入门与实战 | 您所在的位置:网站首页 › fio安装报错makefile226 gettimeo › 云计算&存储测试:FIO工具入门与实战 |
一、关于FIO
1.1 简介
FIO是一个开源的I/O压力测试工具,主要是用来测试磁盘的IO性能,也可测试cpu,nic的IO性能。它可以支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, network, syslet, guasi, solarisaio, I/Opriorities (针对新的Linux内核), rate I/O, forked or threaded jobs等。 fio 官网地址:http://freshmeat.net/projects/fio/ fio文档:https://fio.readthedocs.io/en/latest/index.html 2.1 常用测试场景FIO相关测试场景: 顺序读写 (吞吐量,常用单位为MB/s):文件在硬盘上存储位置是连续的。 适用场景:大文件拷贝(比如视频音乐)。速度即使很高,对数据库性能也没有参考价值。 4K随机读写 (IOPS,常用单位为次):在硬盘上随机位置读写数据,每次4KB。 适用场景:操作系统运行、软件运行、数据库。 二、FIO安装有三种安装方式 2.1 apt安装(Ubuntu) #更新apt源 apt update #安装fio apt-get install fio 2.2 使用yum安装(centos) #更新yum源 yum install epel-release #安装fio yum install libaio-devel fio 2.3 手动安装 wget http://brick.kernel.dk/snaps/fio-2.2.10.tar.gz yum install libaio-devel tar -zxvf fio-2.2.10.tar.gz cd fio-2.2.10 make make install附上一个基本涵盖所有操作系统的FIO包下载地址的网址:https://pkgs.org/download/fio 2.4 验证是否安装成功输入:fio -h,看是否安装成功 三、FIO使用 3.1 fio参数解释可以使用fio -help查看每个参数,具体的参数左右可以在官网查看how to文档,如下为几个常见的参数描述 filename=/dev/emcpowerb 支持文件系统或者裸设备,--filename=/dev/sdc或者--filename=/mnt/ccg/test_data(挂载的目录下任意文件名) direct=1 测试过程绕过机器自带的buffer,使测试结果更真实 rw=randwread 测试随机读的I/O rw=randwrite 测试随机写的I/O rw=randrw 测试随机混合写和读的I/O rw=read 测试顺序读的I/O rw=write 测试顺序写的I/O rw=rw 测试顺序混合写和读的I/O bs=4k 单次io的块文件大小为4k,如果是测试文件系统,建议和文件系统的块大小保持一致。 bsrange=512-2048 同上,提定数据块的大小范围,这里是随机生成一个范围 time_based 如果设置的话,即使file已被完全读写或写完,也要执行完runtime规定的时间。它是通过循环执行相同的负载来实现的,与runtime相对应。 ramp_time=time 设定在记录任何性能信息之前要运行特定负载的时间。这个用来等性能稳定后,再记录日志 size=5g 本次的测试文件大小为5g,以每次4k的io进行测试,即生成读写的文件大小。 fdatasync=int 同fsync,但是采用fdatasync()来同步数据,但不同步元数据 sync=bool 使用sync来进行buffered写。对于多数引擎,这意味着使用O_SYNC numjobs=30 本次的测试线程为30 iodepth=1 队列深度。默认是1,可以通过设置大于1的数来提升并发度。 runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止 ioengine=psync io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包 randrepeat=true 对于随机IO负载,配置生成器的种子,使得路径是可以预估的,使得每次重复执行生成的序列是一样的。 rwmixwrite=30 在混合读写的模式下,写占30%,推荐读写配比为7:3 group_reporting=1 关于显示结果的,汇总每个进程的信息 此外 lockmem=1g 只使用1g内存进行测试 zero_buffers 用0初始化系统buffer nrfiles=8 每个进程生成文件的数量 3.2 fio测试场景及生成报告详解 1)测试变量: bs大小:(4k,16k,64k,1m)读写模式:(read,write,rw,randread,randwrite,randrw)使用libaio异步引擎,iodepth队列长度为128。运行时间为60s第一种:4K,顺序写 fio --randrepeat=1 --ioengine=libaio --direct=1 --name=ccg_fio --iodepth=128 --numjobs=16 --size=1g --bs=4k --group_reporting=1 --readwrite=write --time_based=1 --runtime=60 --sync=0 --fdatasync=0 --filename=/mnt/ccg/4k_write第二种:16K,顺序读 fio --randrepeat=1 --ioengine=libaio --direct=1 --name=ccg_fio --iodepth=128 --numjobs=16 --size=1g --bs=16k --group_reporting=1 --readwrite=read --time_based=1 --runtime=60 --sync=0 --fdatasync=0 --filename=/mnt/ccg/16k_read第三种:16K,混合读写,70%读,30%写 fio --randrepeat=1 --ioengine=libaio --direct=1 --name=ccg_fio --iodepth=128 --numjobs=16 --size=1g --bs=16k --group_reporting=1 --readwrite=rw -rwmixread=70 --time_based=1 --runtime=60 --sync=0 --fdatasync=0 --filename=/mnt/ccg/16k_rw第四种:64k,随机写 fio --randrepeat=1 --ioengine=libaio --direct=1 --name=ccg_fio --iodepth=128 --numjobs=16 --size=1g --bs=64k --group_reporting=1 --readwrite=randwrite --time_based=1 --runtime=60 --sync=0 --fdatasync=0 --filename=/mnt/ccg/64k_randwrite第五种:1m,随机读 fio --randrepeat=1 --ioengine=libaio --direct=1 --name=ccg_fio --iodepth=128 --numjobs=16 --size=1g --bs=1m --group_reporting=1 --readwrite=randread --time_based=1 --runtime=60 --sync=0 --fdatasync=0 --filename=/mnt/ccg/1m_randread第六种:1m,随机读写,70%读,30%写 fio --randrepeat=1 --ioengine=libaio --direct=1 --name=ccg_fio --iodepth=128 --numjobs=16 --size=1g --bs=1m --group_reporting=1 --readwrite=randrw -rwmixread=70 --time_based=1 --runtime=60 --sync=0 --fdatasync=0 --filename=/mnt/ccg/1m_randrw2)执行测试 root@client:/mnt/ccg# fio --randrepeat=1 --ioengine=libaio --direct=1 --name=ccg_fio --iodepth=128 --numjobs=16 --size=1g --bs=4k --group_reporting=1 --readwrite=write --time_based=1 --runtime=60 --sync=0 --fdatasync=0 --filename=/mnt/ccg/4k_write报告详解 #这一行列出了执行的关键参数 ccg_fio: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=128 ... fio-2.2.10 Starting 16 processes ccg_fio: Laying out IO file(s) (1 file(s) / 1024MB) Jobs: 16 (f=16): [W(16)] [100.0% done] [0KB/98.11MB/0KB /s] [0/25.2K/0 iops] [eta 00m:00s] ccg_fio: (groupid=0, jobs=16): err= 0: pid=77217: Mon Jul 27 17:42:01 2020 write: io=5662.2MB, bw=96631KB/s, iops=24157, runt= 60002msec #io指的是读写的数据总量,iops是关键的测试指标,每秒io次数,runt是执行总时间 slat (usec): min=3, max=5087, avg=611.46, stdev=640.30 #slat=提交延迟,代表IO提交到kernel做处理的过程 clat (usec): min=317, max=238746, avg=82794.77, stdev=24469.97 #clat=完成延迟,代表提交到kernel到IO做完之间的时间 lat (usec): min=500, max=238761, avg=83406.74, stdev=24540.97 #lat=响应时间,IO结构体创建时刻开始,直到紧接着clat完成 clat percentiles (msec): #分位分布图 | 1.00th=[ 21], 5.00th=[ 42], 10.00th=[ 52], 20.00th=[ 64], | 30.00th=[ 73], 40.00th=[ 79], 50.00th=[ 85], 60.00th=[ 90], #50分位:85us | 70.00th=[ 95], 80.00th=[ 101], 90.00th=[ 110], 95.00th=[ 120], #90分位:110us,95分位:120us | 99.00th=[ 151], 99.50th=[ 167], 99.90th=[ 192], 99.95th=[ 200], #99分位:151us | 99.99th=[ 215] bw (KB /s): min= 4, max=14296, per=6.30%, avg=6087.37, stdev=1207.17 #bandwidth,带宽 lat (usec) : 500=0.01%, 750=0.01%, 1000=0.01% #latency分布: |
CopyRight 2018-2019 实验室设备网 版权所有 |