Linux系统中FIO常用命令有哪些(fio,linux,开发技术)

时间:2024-05-09 20:55:07 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,他可以通过多线程或进程模拟各种io操作。

Linux系统中FIO常用命令有哪些

FIO 工具常用参数:

参数说明:filename=/dev/sdb1测试文件名称,通常选择需要测试的盘的data目录。direct=1是否使用directIO,测试过程绕过OS自带的buffer,使测试磁盘的结果更真实。Linux读写的时候,内核维护了缓存,数据先写到缓存,后面再后台写到SSD。读的时候也优先读缓存里的数据。这样速度可以加快,但是一旦掉电缓存里的数据就没了。所以有一种模式叫做DirectIO,跳过缓存,直接读写SSD。rw=randwrite测试随机写的I/Orw=randrw测试随机写和读的I/Obs=16k单次io的块文件大小为16kbsrange=512-2048同上,提定数据块的大小范围size=5G每个线程读写的数据量是5GB。numjobs=1每个job(任务)开1个线程,这里用了几,后面每个用-name指定的任务就开几个线程测试。所以最终线程数=任务数(几个name=jobx)*numjobs。name=job1:一个任务的名字,重复了也没关系。如果fio-name=job1-name=job2,建立了两个任务,共享-name=job1之前的参数。-name之后的就是job2任务独有的参数。thread使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。runtime=1000测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。ioengine=libaio指定io引擎使用libaio方式。libaio:Linux本地异步I/O。请注意,Linux可能只支持具有非缓冲I/O的排队行为(设置为“direct=1”或“buffered=0”);rbd:通过librbd直接访问CEPHRadosiodepth=16队列的深度为16.在异步模式下,CPU不能一直无限的发命令到SSD。比如SSD执行读写如果发生了卡顿,那有可能系统会一直不停的发命令,几千个,甚至几万个,这样一方面SSD扛不住,另一方面这么多命令会很占内存,系统也要挂掉了。这样,就带来一个参数叫做队列深度。BlockDevices(RBD),无需使用内核RBD驱动程序(rbd.ko)。该参数包含很多ioengine,如:libhdfs/rdma等rwmixwrite=30在混合读写的模式下,写占30%group_reporting关于显示结果的,汇总每个进程的信息。此外lockmem=1g只使用1g内存进行测试。zero_buffers用0初始化系统buffer。nrfiles=8每个进程生成文件的数量。磁盘读写常用测试点:1.Read=100%Ramdon=100%rw=randread(100%随机读)2.Read=100%Sequence=100%rw=read(100%顺序读)3.Write=100%Sequence=100%rw=write(100%顺序写)4.Write=100%Ramdon=100%rw=randwrite(100%随机写)5.Read=70%Sequence=100%rw=rw,rwmixread=70,rwmixwrite=30(70%顺序读,30%顺序写)6.Read=70%Ramdon=100%rw=randrw,rwmixread=70,rwmixwrite=30(70%随机读,30%随机写)

fio例子:

[root@dockersda]#fio-ioengine=libaio-bs=4k-direct=1-thread-rw=read-filename=/dev/sda-name="BS4KBreadtest"-iodepth=16-runtime=60BS4KBreadtest:(g=0):rw=read,bs=(R)4096B-4096B,(W)4096B-4096B,(T)4096B-4096B,ioengine=libaio,iodepth=16fio-3.7Starting1threadJobs:1(f=1):[R(1)][100.0%][r=89.3MiB/s,w=0KiB/s][r=22.9k,w=0IOPS][eta00m:00s]BS4KBreadtest:(groupid=0,jobs=1):err=0:pid=18557:ThuApr1113:08:112019read:IOPS=22.7k,BW=88.5MiB/s(92.8MB/s)(5313MiB/60001msec)slat(nsec):min=901,max=168330,avg=6932.34,stdev=1348.82clat(usec):min=90,max=63760,avg=698.08,stdev=240.83lat(usec):min=97,max=63762,avg=705.17,stdev=240.81clatpercentiles(usec):|1.00th=[619],5.00th=[627],10.00th=[627],20.00th=[635],|30.00th=[635],40.00th=[685],50.00th=[717],60.00th=[725],|70.00th=[725],80.00th=[725],90.00th=[734],95.00th=[816],|99.00th=[1004],99.50th=[1020],99.90th=[1057],99.95th=[1057],|99.99th=[1860]bw(KiB/s):min=62144,max=91552,per=100.00%,avg=90669.02,stdev=3533.77,samples=120iops:min=15536,max=22888,avg=22667.27,stdev=883.44,samples=120lat(usec):100=0.01%,250=0.01%,500=0.01%,750=93.85%,1000=5.14%lat(msec):2=0.99%,4=0.01%,10=0.01%,50=0.01%,100=0.01%cpu:usr=5.35%,sys=23.17%,ctx=1359692,majf=0,minf=17IOdepths:1=0.1%,2=0.1%,4=0.1%,8=0.1%,16=100.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.1%,32=0.0%,64=0.0%,>=64=0.0%issuedrwts:total=1360097,0,0,0short=0,0,0,0dropped=0,0,0,0latency:target=0,window=0,percentile=100.00%,depth=16Runstatusgroup0(alljobs):READ:bw=88.5MiB/s(92.8MB/s),88.5MiB/s-88.5MiB/s(92.8MB/s-92.8MB/s),io=5313MiB(5571MB),run=60001-60001msecDiskstats(read/write):sda:ios=1357472/0,merge=70/0,ticks=949141/0,in_queue=948776,util=99.88%

io=执行了多少M的IO

bw=平均IO带宽 iops=IOPS runt=线程运行时间 slat=提交延迟,提交该IO请求到kernel所花的时间(不包括kernel处理的时间) clat=完成延迟, 提交该IO请求到kernel后,处理所花的时间 lat=响应时间 bw=带宽 cpu=利用率 IO depths=io队列 IO submit=单个IO提交要提交的IO数 IO complete=Like the above submit number, but for completions instead. IO issued=The number of read/write requests issued, and how many of them were short. IO latencies=IO完延迟的分布

io=总共执行了多少size的IO aggrb=group总带宽 minb=最小.平均带宽. maxb=最大平均带宽. mint=group中线程的最短运行时间. maxt=group中线程的最长运行时间.

ios=所有group总共执行的IO数. merge=总共发生的IO合并数. ticks=Number of ticks we kept the disk busy. io_queue=花费在队列上的总共时间. util=磁盘利用率

fio 有很多测试任务配置文件,在git工程 examples 文件夹中,我们可以使用命令行参数进行直接配置,也可以直接通过配置文件配置一次测试的内容。

更详细对fio输出说明请参考博文:Fio Output Explained

IO状态监控:

进行磁盘测试的时候,我们可以使用iostat 等监控工具,查看所有磁盘当前的读写状态(fedora 系统上 sysstat-11.7.3-2.fc29.x86_64 收录了此工具)。

监控磁盘IO命令:iostat –mx 1

Iostat介绍

iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

语法

iostat[-c][-d][-h][-N][-k|-m][-t][-V][-x][-z][device[...]|ALL][-p[device[,...]|ALL]][interval[count]]

iostat使用范例:

iostat-d-x-k110Device:rrqm/swrqm/sr/sw/srsec/swsec/srkB/swkB/savgrq-szavgqu-szawaitsvctm%utilsda1.5628.317.8031.4942.512.9221.261.461.160.030.792.6210.28Device:rrqm/swrqm/sr/sw/srsec/swsec/srkB/swkB/savgrq-szavgqu-szawaitsvctm%utilsda2.0020.00381.007.0012320.00216.006160.00108.0032.311.754.502.1784.20

-d: 显示该设备的状态的参数;

-x:是一个比较常用的选项,该选项将用于显示和io相关的扩展数据。

-k: 静态显示每秒的统计(单位kilobytes )

1: 第一个数字表示每隔1秒刷新一次数据显示。

10:第二个数字表示总共的刷新次数

输出信息的含义

rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。r/s:该设备的每秒完成的读请求数(merge合并之后的)w/s:该设备的每秒完成的写请求数(merge合并之后的)rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。rKB/s:每秒发送给该设备的总读请求数wKB/s:每秒发送给该设备的总写请求数avgrq-sz平均请求扇区的大小avgqu-sz是平均请求队列的长度。毫无疑问,队列长度越短越好。await:每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util=0.8/1=80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Linux系统中FIO常用命令有哪些的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Linux系统硬件故障日志的示例分析下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18