编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

FIO使用详解(fio怎么用)

wxchong 2024-09-07 01:33:53 开源技术 12 ℃ 0 评论

fio是一个非常灵活的磁盘io测试工具,可以通过多线程或进程模拟各种磁盘io操作,支持13种不同的IO引擎,既可以测试文件系统,也可以测试裸设备。使用简单,支持的文件操作非常多, 可以覆盖到我们能见到的文件使用方式,还可以控制io depth对于测试磁盘的性能很有帮助。

官方地址http://mac.freecode.com/projects/fio

最新版本 fio-2.1.10

centos如果安装了epel源,通过yum可以直接安装

也可以自己编译安装

tar -zxvf fio-x.x.x.tar.gz

cd fio-x.x.x

make

make install

fio是一款用于基准和压力测试的I/O工具,fio支持19不同的I/O引擎,(sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio, 及更多)。支持Linux新内核的I/O优先级,I/O速率,子线程及更多的功能。支持裸设备也支持文件系统,支持文本方式的脚本,fio会显示I/O性能信息,支持 Linux, FreeBSD, NetBSD, OpenBSD, OS X, OpenSolaris, AIX, HP-UX, Android, and Windows。

fio的特点主要如下

跨平台,支持Unxi、Linux、Windows系统

支持多种I/O引擎

支持命令行和脚本

支持对CPU、内存、线程、i/o非常细致的配置

支持非常丰富的测试类型,有非常细致的参数,使用简单,功能强大

fio的参数主要包含以下基本类型

IO 类型 顺序读写、随机读写、混合读写等。

块大小 测试时使用的块大小,可以是一个数值,也可以一个范围

IO 大小 读写数据的大小

IO 队列深度 如果是异步读写,维护多大的一个队列深度

IO 缓存类型 是否打开文件系统的缓存

文件数量 同时读写几个文件

线程数量 同事运行几个线程

fio非常强大,参数也非常多,下面按照不同的类型,介绍下详细的参数

fio 配置相关的参数

--debug 调试模式

--version 显示版本信息

测试任务相关的参数

--output= 文件名 输出到文件

--runtime= 限制运行时间 单位为秒

-- name= 字符串 测试项目名称

--description= 字符串 测试项目描述

--filename= 测试文件,也可以制定到裸设备上

--size= 测试文件大小

--filesize= 单独的文件大小,也可以是一个范围,fio在设定的size只内随机的选择大小,如果没有指定,每个子文件大小相同。

读写相关的参数

--readwrite=

read 顺序读

write 顺序写

trim 顺序trim,只支持Linux块设备

randread 随机读

randwrite 随机写

randtrim 随机trim 只支持Linux块设备

rw,readnwrite 混合读写

randrw 随机混合读写

如果是混合读写,默认是 50/50 即50%读加50%的写,对于特定的类型,结果会有些出入,因为速度可能不一样。可以在测试的指定一个数字,

rwmixwrite=20 混合读写,写占20%

direct=1 或者0 ,1为绕过文件系统的缓存

--blocksize=

--bs= 测试块大小,4K 8K 1M 等

--bssplit=字符串 需要测试混合块大小的时候使用,可以按照如下的格式

bssplit=4k/10:64k/50:32k/40 4K占10% 64K占50% 32k占40%

也可以不指定百分比,fio会平均分配,比如

bssplit=4k/50:1k/:32k/ 就是4k占50% 1K 32看各占25%

bssplit 读写的时候都可以使用

运行相关参数

--max-job= 运行的最高线程

--zero_buffers 如果使用这个参数,fio会初始化IO缓存,并默认使用随机的数据填满缓存。

--refill_buffers 强制重新填写读写缓存

--iodepth= io队列深度 默认是1

--direct= 0或者1 1为关闭文件系统缓存

--numjobs= 线程数量

--group_reporting 汇总每个进程的信息

--lockmem= 固件测试的时候内存大小 比如2G

--nrfiles=8 每个进程生成文件的数量

fio使用案例

文件系统4k顺序读测试

fio --filename=/tmp/test --direct=1 --rw=read --bs=4k --size=15G --numjobs=64 --runtime=300 --group_reporting --name=test-read

文件系统4k随机写测试

fio --filename=/tmp/test --direct=1 --rw=randwrite --bs=4k --size=15G --numjobs=64 --runtime=300 --group_reporting --name=test-read

裸设备4k顺序写测试

fio --filename=/dev/sdb --direct=1 --rw=write --bs=4k --size=15G --numjobs=64 --runtime=300 --group_reporting --name=test-read

fio的输出非常详细,下面是4k随机写的一个测试的结果,可以看到有写吞吐、iops指标,还有cpu利用率、磁盘状态等指标。

fio --filename=/test --direct=1 --rw=randwrite --bs=4k --size=1G --numjobs=64 --runtime=300 --group_reporting --name=test-randwrite

...

write: io=2850.2MB, bw=9726.1KB/s, iops=2431 , runt=300048msec

clat (usec): min=159 , max=448315 , avg=410.20, stdev=1208.19

lat (usec): min=159 , max=448315 , avg=411.15, stdev=1208.27

clat percentiles (usec):

| 1.00th=[ 203], 5.00th=[ 278], 10.00th=[ 326], 20.00th=[ 346],

| 30.00th=[ 366], 40.00th=[ 386], 50.00th=[ 402], 60.00th=[ 418],

| 70.00th=[ 434], 80.00th=[ 454], 90.00th=[ 486], 95.00th=[ 516],

| 99.00th=[ 724], 99.50th=[ 1032], 99.90th=[ 1368], 99.95th=[ 2224],

| 99.99th=[ 8256]

bw (KB/s) : min= 3, max= 667, per=1.57%, avg=152.30, stdev=27.63

lat (usec) : 250=3.92%, 500=89.07%, 750=6.14%, 1000=0.32%

lat (msec) : 2=0.49%, 4=0.03%, 10=0.02%, 20=0.01%, 50=0.01%

lat (msec) : 500=0.01%

cpu : usr=0.04%, sys=0.23%, ctx=1548182, majf=0, minf=1844

IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%

submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%

complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%

issued : total=r=0/w=729637/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):

WRITE: io=2850.2MB, aggrb=9726KB/s, minb=9726KB/s, maxb=9726KB/s, mint=300048msec, maxt=300048msec

Disk stats (read/write):

dm-0: ios=0/766673, merge=0/0, ticks=0/341324, in_queue=341316, util=86.15%, aggrios=0/731075, aggrmerge=0/35722, aggrticks=0/268135, aggrin_queue=267337, aggrutil=85.33%

vda: ios=0/731075, merge=0/35722, ticks=0/268135, in_queue=267337, util=85.33%

fio 也可以将测试用例写好脚本,通过运行脚本,完成多项测试任务

; -- start --

[global]

[random-writers]

rw=randwrite

bs=4K

direct=1

size=30G

numjobs=63

[random-read]

rw=randread

bs=4K

direct=1

size=30G

numjobs=63

; -- end --

fio的howto参考文档对于fio的使用有非常详细的描述,可以详细阅读,连接地址如下:

http://www.bluestop.org/fio/HOWTO.txt

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表