fio是测试IO的非常好的工具,用来对磁盘进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。fio是一个可以产生很多线程或进程并执行用户指定的特定类型I/O操作的工具,fio的典型用途是编写和模拟的I/O负载匹配的作业文件。也就是说fio 是一个多线程io生成工具,可以生成多种IO模式,用来测试磁盘设备的性能(也包含文件系统:如针对网络文件系统 NFS 的IO测试)。

fio在github地址:https://github.com/axboe/fio

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 -ioengine=sync -bs=16k -direct=1 -thread -rw=read -filename=test.txt -name="BS 4KB read test" -runtime=60fio -ioengine=sync -bs=16k -direct=1 -thread -rw=write -size=10G -filename=test.txt -name="Max throughput" -iodepth=4 -runtime=60

首先就是 I/O engine,这个就是告诉 fio 使用什么样的方式去测试 I/O,我们需要根据业务的实际情况选择不同的类型,主要几个:

  • libaio - Linux 原生的异步 I/O,这也是通常我们这边用的最多的测试盘吞吐和延迟的方法
  • sync - 也就是最通常的 read / write 操作
  • vsync - 使用 readv / writev,主要是会将相邻的 I/O 进行合并
  • psync - 对应的 pread / pwrite
  • pvsync / pvsync2 - 对应的 preadv / pwritev,以及 preadv2 / p writev2

在要注意的就是 I/O type,譬如是否使用 direct,还是 buffered,如果是 buffered,我们多少次 I/O 之后使用 fsync 或者 fdatasync 来进行强制 sync 操作。我们还需要选择合适的 I/O pattern 来进行测试,这个主要是 readwrite 来确定,包括:
read - 顺序读
write - 顺序写
trim - 顺序裁剪
randread - 随机读
randwrite - 随机写
randtrim - 随机裁剪
rw, readwrite - 混合顺序读写
randrw - 混合的随机读写
trimwrite - 顺序的裁剪 + 顺序写

参考地址:
https://www.jianshu.com/p/9d823b353f22
https://blog.csdn.net/don_chiang709/article/details/92628623
https://www.cnblogs.com/xuyaowen/archive/2019/04/11/fio-usage.html

Linux IO 测试工具 fio命令相关推荐

  1. 【测试】linux FIO命令详解(一):磁盘IO测试工具 fio (并简要介绍iostat工具)

    目录 随看随用 FIO介绍 FIO 工具常用参数: fio工作参数可以写入配置文件 IO状态监控: Iostat介绍 与FIO相似的工具 fio测试脚本 提取iops和bw gunplot画图 Fio ...

  2. linux FIO命令详解(一):磁盘IO测试工具 fio (并简要介绍iostat工具)

    FIO介绍 FIO是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证.磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类.FIO是一个可以产生很多线程或进程并执行 ...

  3. 服务器io测试工具-fio

    Fio 是一个 I/O 工具,旨在用于基准测试和压力/硬件验证.它支持 19 种不同类型的 I/O 引擎(sync.mmap.libaio.posixaio.SG v3.splice.null.net ...

  4. 【测试】 FIO:ceph/磁盘IO测试工具 fio(iodepth深度)

    目录 随看随用 NAS文件系统测试 块系统测试 FIO用法 FIO介绍 FIO 工具常用参数: FIO结果说明 I/O 的重放('录'下实际工况的IO,用fio'重放') fio工作参数可以写入配置文 ...

  5. Linux压力测试工具—Siege命令

    1.简介 Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力.可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重 ...

  6. linux服务器io测试工具fio安装和使用

    下载: http://freshmeat.sourceforge.net/projects/fio/ 内网的痛- 安装: 解压后./configure.make.make install 几个常见的参 ...

  7. linux服务器测试软件,linux服务器常用测试工具及命令

    linux服务器常用测试工具及命令 1. 服务器配置查看 执行teddysun大牛的bench.sh脚本,输入下列命令: wget -qO- bench.sh | bash 拿腾讯云的香港轻量级服务器 ...

  8. linux硬盘测试工具

    [dd工具] 操作系统: ubuntu 12.04  测试工具: dd  版本:8.21 执行dd --version来查看 工具说明:  dd命令能粗略测试硬盘IO性能 不足:执行dd命令测试硬盘I ...

  9. Linux串口测试工具

    Linux串口测试工具 Windows 下的串口工具非常多,Linux下的串口工具相对较少,有时候要调试给定串口通信可靠性,则需要搜索一圈才能找到易用方便且满足自己的需求的工具. 无意中发现 linu ...

最新文章

  1. 你在 Docker 中跑 MySQL?恭喜你,可以下岗了!
  2. 新人上路-搭建项目-springweb-controller测试
  3. Java中的冒泡排序(减少比较次数)
  4. 基于VB和EXCEL的报表设计及打印
  5. Unity iOS 使用 ASTC 格式纹理实践
  6. 使用 PHP 7 给 Web 应用加速
  7. [转]让Linux的tty界面支持中文
  8. Hadoop源码分析16: IPC流程(11) 整体流程
  9. Android remote debug 打开手机应用里的网页却显示空白
  10. win11通知怎么关闭
  11. IBM - 开拓语音识别 - 概述 - 中国
  12. Android Gradle 完整指南(转)
  13. 用别人的血汗去染自己的红顶子,谁愿意去干谁干,我是不干
  14. 上海泗博自动化 Modbus 转以太网模块应用于某污水处理系统
  15. linux常用命令100
  16. 星际争霸II对抗 PYSC2平台 深度强化学习 学习笔记(一)- 环境搭建
  17. Fine-Grained Representation Learning and Recognition by Exploiting Hierarchical Semantic Embedding
  18. 学计算机用啥u盘好,U盘制作工具哪个好用?2020U盘制作工具推荐
  19. 选股技巧|如何选股|怎么选股
  20. 商品热销排行【项目 商城】

热门文章

  1. 使背景图片适应不同分辨率电脑
  2. java 反射初探(1)
  3. JavaScript 常用方法封装使用
  4. 如何使用Nginx服务开启HTTP2
  5. jQuery——入门(四)JQuery 事件
  6. 大小不固定的图片、多行文字的水平垂直居中
  7. 常见损失函数及正则项
  8. php session有什么用,session有什么作用?
  9. python对列表中的字典的字段进行排序
  10. 包含min函数的栈(important)