当前位置: 首页 > news >正文

FIO的使用教程

目录

一,介绍

二,基本使用

常用参数解释:

举例1:

举例2

三,测试注意

四,根据结果整理格式规范

五,测试参数详解


一,介绍

FIO是一款开源的I/O压力测试工具,主要是用来测试磁盘的IO性能。

  1. 可以支持多种不同的I/O引擎(同步,异步,mmap等)。
  2. 允许用户自定义测试参数,模拟真实的各种磁盘访问模式。
  3. 可以生成各种I/O负载来测试存储设备(硬盘,SSD,RAID)的性能。
  4. 可以模拟各种复杂的I/O场景,如顺序读写,随机读写,混合读写等。

二,基本使用

使用很灵活,可以通过命令行参数或者配置文件来定义测试参数。

常用参数解释:
举例1:

fio -filename=/dev/sdb -direct=1 -rw=write -ioengine=libaio -bs=4k -iodepth=32 -numjobs=1 -runtime=600 -group_reporting -name=4ktest

-filename 用于测试块设备,一般指定需要测试的而磁盘或者分区,如filename=/dev/sdb

-directory用于测试文件,一般指定需要测试的目录路径,如-directory=/client

-direct 使用内核缓存。用于控制测试数据是否通过内核缓存进行读写。默认值为0,用来决定是否要绕过缓存,一般设置为1(开启direct io,测试数据直接从磁盘读取或写入磁盘,绕过系统缓存)等于0的时候会使用内核缓存。

-rw 用于指定负载读写类型,一般可以设置以下几种参数

Read顺序读。 write顺序读。顺序写。 rw顺序读写。Randread随机读 randread随机写。Randrw随机读。

-rwmixread用于指定混合读写同一时刻读的占比,默认为50%读写比为1:1

-rwmixwrite用于指定混合读写同一时刻写的占比,默认为50%,即读写比为1:1

-ioengine用于指定工作负载引擎,常用引擎一般有psync(同步IO引擎)及libaio(同步IO引擎)。同步 I/O 会在发出 I/O 请求后一直等待直到 I/O 操作完成,而异步 I/O 则允许应用程序在等待 I/O 完成的同时执行其他操作。

-bs用于指定IO块大小。这个参数需要考虑存储设备本身带的cache。过大会影响吞吐量,延迟,工作负载,稳定性。

  1. 吞吐量:较大的块,吞吐量会变小,存储设备处理大块数据会占用更长的时间
  2. 延迟:较大的块,延迟会变低,小的I/O操作读取或者写入的数据量更小,操作系统和存储设备可以更快地处理这些操作,小的块大小导致更频繁的I/O操作和更高的cpu开销,影响整体性能
  3. 工作负载:较小的块通常适用于随机访问的工作负载,较大的块则适用于顺序访问的工作负载。
  4. 稳定性。如超出可能会影响测试结果,须先了解存储设备的规格和限制。

-iodepth用于指定IO深度,不同的IO深度下有不同性能值,需要合理调整验证以得出最优性能。

较大的深度可以模拟更高的并发负载。较大的深度会导致更低的平均延迟

-numjobs用于指定IO并发线程数。

-runtime用于指定负载测试时间,时间单位为s

-group_reporting用于指定测试结果显示方式。是一个布尔值,默认为false(独立报告)将所有任务的统计结果合并,生成一份汇总报告,而不是为每个任务单独生成一份报告。例如当在fio中包含多个任务(jobs)的测试时(例如通过配置文件定义了多个job段,或使用--numjobs指定了多个并行任务)

-size总数据量、块数,文件大小(创建指定大小的文件),每个作业的数据量(并发测试中),块设备的大小(测试块设备)。比如size=100k表示测试数据由100000个块组成。

举例2

fio --name=test --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=60 --group_reporting

这个命令会生成一个名为 test 的测试任务,使用 libaio 异步 I/O 引擎,I/O 深度为 32,进行随机写操作(randwrite),块大小为 4K,直接 I/O(绕过文件系统缓存),测试数据量为 1G,使用一个工作线程(numjobs=1),测试持续时间为 60 秒,并启用分组报告。

  • FIO的配置文件

更复杂的测试场景,可以用配置文件来定义测试参数,通常以fio作为扩展名,可以使用任何文本编辑器来编写。

简单实例:

[global]

ioengine=libaio

iodepth=32

direct=1

group_reporting

[randwrite]

rw=randwrite

bs=4k

size=1G

numjobs=1

runtime=60

定义了一个全局的I/O引擎和I/O深度,以及一个randwrite的测试任务,其参数与前面的命令行示例相同。  

三,测试注意

  1. 测试结果取第二次,第一次需要预热,相对来说不是很准确
  2. 数据安全:提前备份磁盘或者使用专门的测试设备进行测试
  3. 文件大小:测试文件的大小应该超过存储设备缓存大小,同时也要考虑到测试时间和存储空间的限制。
  4. 权限设置:确保有足够的权限
  5. 测试环境:确保环境稳定和可靠,关闭可能会干扰测试结果的后台进行

四,根据结果整理格式规范

根据fio的运行结果,出给一份带有文件名称 类型 读取IOPS 读取带宽(BW) 读取总量 写入IOPS 写入带宽 写入总量 平均延迟的表单结论

五,测试参数详解

fio-td fio-8gb-zvol-singlezpool /mnt/zvol io_uring 8G 32 300

第一个参数是这次标题,自定义即可

第二个是测试的文件系统位置,指定了 Fio 测试文件所在的挂载点。Fio 会在这个挂载点下创建测试文件,或者对已存在的文件进行读写操作,以此来测试对应的存储设备性能。

第三个参数 io_uring是测试引擎。高效的输入输出工具,用来提升效率。

第四个参数:代表测试数据量的大小为 8GB。Fio 会对这 8GB 的数据进行读写操作,从而评估存储设备的性能。

http://www.dtcms.com/a/355886.html

相关文章:

  • 数据结构---链表操作技巧
  • 关于PCB面试问题
  • 01.<<基础入门:了解网络的基本概念>>
  • 大模型微调示例三之Llama-Factory_Lora
  • 机器学习和高性能计算中常用的几种浮点数精度
  • 拼团商城源码分享拼团余额提现网站定制开发源码二开
  • 二叉树高度-递归方式
  • 大模型应用开发与大模型开发有什么区别?
  • c语言动态数组扩容
  • [数据结构] 复杂度和包装类和泛型
  • 虚函数指针和虚函数表的创建时机和存放位置
  • AI记忆革命:从七秒遗忘到终身学习
  • 线程池的执行原理
  • set_property CLOCK_DEDICATED_ROUTE BACKBONE/FALSE对时钟进行约束
  • 强化学习之GRPO
  • 硬件IIC使用问题汇总
  • 错误模块路径: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
  • IMIX数据全链路解析
  • 探索淀粉深加工的无限可能:2026 济南展览会前瞻
  • KeyHydra 2.008 安装教程 3ds Max 2020-2024 详细步骤图解(附安装包下载)
  • 【JavaScript】递归的问题以及优化方法
  • week5-[一维数组]去重
  • (笔记)Android窗口管理系统分析
  • 向量方法证明正余弦定理的数学理论体系
  • 如何保证数据的安全性和隐私性?
  • Spring Boot + KingbaseES 连接池实战
  • TypeScript:枚举类型
  • Milvus向量数据库是什么?
  • Active Directory Basics
  • UPAM(Unified Prompt Attack Model