千家信息网

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

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,小编给大家分享一下Linux系统中FIO常用命令有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的
千家信息网最后更新 2026年11月04日Linux系统中FIO常用命令有哪些

小编给大家分享一下Linux系统中FIO常用命令有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

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

FIO 工具常用参数:

 参数说明:  filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。  direct=1 是否使用directIO,测试过程绕过OS自带的buffer,使测试磁盘的结果更真实。Linux读写的时候,内核维护了缓存,数据先写到缓存,后面再后台写到SSD。读的时候也优先读缓存里的数据。这样速度可以加快,但是一旦掉电缓存里的数据就没了。所以有一种模式叫做DirectIO,跳过缓存,直接读写SSD。  rw=randwrite 测试随机写的I/O  rw=randrw 测试随机写和读的I/O  bs=16k 单次io的块文件大小为16k  bsrange=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直接访问CEPH Rados  iodepth=16 队列的深度为16.在异步模式下,CPU不能一直无限的发命令到SSD。比如SSD执行读写如果发生了卡顿,那有可能系统会一直不停的发命令,几千个,甚至几万个,这样一方面SSD扛不住,另一方面这么多命令会很占内存,系统也要挂掉了。这样,就带来一个参数叫做队列深度。  Block Devices(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@docker sda]# fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=read -filename=/dev/sda -name="BS 4KB read test" -iodepth=16 -runtime=60  BS 4KB read test: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16  fio-3.7  Starting 1 thread  Jobs: 1 (f=1): [R(1)][100.0%][r=89.3MiB/s,w=0KiB/s][r=22.9k,w=0 IOPS][eta 00m:00s]  BS 4KB read test: (groupid=0, jobs=1): err= 0: pid=18557: Thu Apr 11 13:08:11 2019     read: IOPS=22.7k, BW=88.5MiB/s (92.8MB/s)(5313MiB/60001msec)      slat (nsec): min=901, max=168330, avg=6932.34, stdev=1348.82      clat (usec): min=90, max=63760, avg=698.08, stdev=240.83       lat (usec): min=97, max=63762, avg=705.17, stdev=240.81      clat percentiles (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=120     iops        : min=15536, max=22888, avg=22667.27, stdev=883.44, samples=120    lat (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=17    IO depths    : 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%       issued rwts: total=1360097,0,0,0 short=0,0,0,0 dropped=0,0,0,0       latency   : target=0, window=0, percentile=100.00%, depth=16    Run status group 0 (all jobs):     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-60001msec    Disk stats (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 -k 1 10  Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util  sda          1.56  28.31  7.80 31.49   42.51    2.92    21.26     1.46     1.16     0.03    0.79   2.62  10.28  Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util  sda          2.00  20.00 381.00  7.00 12320.00  216.00  6160.00   108.00    32.31     1.75    4.50   2.17  84.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%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

看完了这篇文章,相信你对"Linux系统中FIO常用命令有哪些"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

时间 测试 设备 系统 参数 磁盘 线程 队列 数据 命令 统计 运行 任务 文件 常用 信息 带宽 缓存 进程 处理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 广东万易互联网科技有限公司惠州分公司 新华互联网科技学校 厦门中拓互联网络科技有限公司 广州互联网科技公司 深圳互联网络科技有限公司 嘟嘟瓜互联网科技 电子科技大学互联网 互联网科技公司需要的职位 中国科技互联网公司收入 崇明区互联网教育科技诚信经营 天津腾达互联网科技有限公司 云南省自由互联网科技有限公司 全球科技与互联网公司市值变化 互联网高科技行业有哪些企业 上海万顺科技互联网有限公司招聘 同城互联网络科技 互联网科技职业技能培训学校 广西泛欧互联网科技有限公司 盐城市攀科互联网科技有限公司 科技制造互联网公司 北京互联网科技公司 互联网科技的英文 互联网科技圈年度人物 皮皮虾互联网科技有限公司 陕西云淼互联网科技公司 互联网科技手机排行榜 青岛易易互联网科技 上海互联网科技园景观 现代科技的标志之一的互联网
0