【存储测试】fio存储性能测试工具

一、前言

GitHub地址:fio
官方文档:HOWTO

1、介绍

fio(flexible I/O Tester) 是一款由 Jens Axboe 开发的用于测评和压力/硬件验证的自由开源的软件,适用于文件及块接口性能测试。

fio常用的I/O引擎主要分为以下两种,可根据实际选择合适的I/O引擎和配置参数

  • 同步(如psync)
    对于同步I/O而言,一次只能发出一个IO请求,等待内核完成后才返回,通常指定iodepth为1,增大thread以达到最大性能测试要求

  • 异步(如libaio)
    对于异步I/O而言,一次提交一批请求,然后等待一批的完成,减少与内核交互次数,通常指定thread为1,增大iodepth以达到最大性能测试要求

二、安装部署

1、Linux客户端

1.1、安装libaio(可选)

示例使用libaio引擎测试,故此处需要先行安装相关软件包,如不使用该引擎进行测试,此步骤可忽略

yum install libaio-devel -y
1.2、软件包安装

创建fio软件包安装目录/opt/fio,下载fio源码包进行编译安装,配置fio环境变量

mkdir /opt/fio
wget https://github.com/axboe/fio/archive/fio-3.20.tar.gz
tar -zxvf fio-3.20.tar.gz
cd fio-fio-3.20/
./configure --prefix=/opt/fio/
make && make install
echo -e "\n\n export PATH=/opt/fio/bin:$PATH" >> /etc/profile && source /etc/profile

2、Window客户端

下载地址:https://bsdio.com/fio/releases/fio-3.20-x64.msi
下载安装软件包即可,安装时自动配置环境变量

三、配置使用

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,绕过系统缓存)

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

    • read:顺序读(Sequential reads)
    • write:顺序写(Sequential writes)
    • rw:顺序读写(Mixed sequential reads and writes),当负载为混合读写类型时,需要指定读写占比(rwmixread
    • randread:随机读(Random reads)
    • randwrite:随机写(Random writes)
    • randrw:随机读写(Random mixed reads and writes),当负载为混合读写类型时,需要指定读写占比(rwmixread
  • rwmixread
    用于指定混合读写同一时刻读的占比,默认为50%,即读写比为1:1

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

  • -ioengine
    用于指定负载工作引擎,常用引擎一般有psync(同步IO引擎)及libaio(异步IO引擎)
    可选参数有sync , psync , vsync , posixaio , mmap , splice , syslet-rw , sg , null , net , netsplice , cpuio , guasi , external、libaio

  • -bs
    用于指定IO块大小

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

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

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

  • -group_reporting
    用于指定测试结果显示方式
    当指定-numjobs参数时,如果不指定-group_reporting参数,测试结果以per-job形式显示(即把所有线程的测试结果单独显示出来)
    当指定-numjobs参数时,如果指定-group_reporting参数,测试结果以per-group形式显示(即汇总所有线程的测试结果合并显示出来)

  • -name
    用于指定负载工作job名称,名称可自定义

2、结果分析

[root@node241 ~]# fio -filename=/dev/sdb -direct=1 -rw=write -ioengine=libaio -bs=4k -iodepth=16 -numjobs=16 -runtime=600 -group_reporting -name=4ktest
4ktest: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
...
fio-3.20
Starting 16 processes
Jobs: 16 (f=16): [W(16)][100.0%][w=15.2MiB/s][w=3900 IOPS][eta 00m:00s]
4ktest: (groupid=0, jobs=16): err= 0: pid=31603: Tue Jun 30 16:55:43 2020write: IOPS=4515, BW=17.6MiB/s (18.5MB/s)(10.3GiB/600084msec); 0 zone resetsslat (nsec): min=1369, max=266167k, avg=9274.23, stdev=500148.33clat (usec): min=1044, max=1463.7k, avg=56668.55, stdev=65749.73lat (usec): min=1267, max=1463.7k, avg=56678.04, stdev=65750.75clat percentiles (msec):|  1.00th=[    6],  5.00th=[   12], 10.00th=[   20], 20.00th=[   28],| 30.00th=[   33], 40.00th=[   36], 50.00th=[   40], 60.00th=[   45],| 70.00th=[   54], 80.00th=[   70], 90.00th=[  104], 95.00th=[  146],| 99.00th=[  338], 99.50th=[  489], 99.90th=[  785], 99.95th=[  877],| 99.99th=[ 1028]bw (  KiB/s): min=  266, max=144647, per=100.00%, avg=18128.38, stdev=746.11, samples=19075iops        : min=   62, max=36161, avg=4530.95, stdev=186.55, samples=19075lat (msec)   : 2=0.01%, 4=0.18%, 10=3.64%, 20=6.93%, 50=56.16%lat (msec)   : 100=22.43%, 250=9.03%, 500=1.16%, 750=0.34%, 1000=0.12%lat (msec)   : 2000=0.01%cpu          : usr=0.20%, sys=0.54%, ctx=779333, majf=0, minf=664IO 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=0,2709976,0,0 short=0,0,0,0 dropped=0,0,0,0latency   : target=0, window=0, percentile=100.00%, depth=16Run status group 0 (all jobs):WRITE: bw=17.6MiB/s (18.5MB/s), 17.6MiB/s-17.6MiB/s (18.5MB/s-18.5MB/s), io=10.3GiB (11.1GB), run=600084-600084msecDisk stats (read/write):sdb: ios=43/395233, merge=0/2139499, ticks=123/22527124, in_queue=22622488, util=100.00%
  • IOPS=:IOPS性能数值,单位为op/s
  • BW=:带宽性能数值,单位为MiB/s
  • lat:时延性能数值,通常取avg平均值

3、常用命令

  • 重定向测试结果到文件内
    fio {config-file} -output={result-file}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

熬夜会秃头——beta冲刺Day3

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day3团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、团队成员会议总结 1、成员…

【算法】单调栈题单——字典序最小⭐(一种类型的模板题)

文章目录 题目列表316. 去除重复字母⭐⭐⭐⭐⭐(类型题模板:单调栈,字典序最小)221021天池-03. 整理书架(保留数量为 limit 的字典序最小)402. 移掉 K 位数字(最多删除 k 次 前导零的处理&…

springboot + vue 智能物流管理系统

qq(2829419543)获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:springboot 前端:采用vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件&#xf…

『 Linux 』环境变量

文章目录 🚀什么是环境变量🚀🚀查看环境变量🚀🕹️和环境变量有关的命令🕹️ 🚀PATH环境变量🚀🕹️设置PATH环境变量🕹️ 🚀HOME环境变量&#x1…

三、C语言常见概念

目录 1. C语言是什么? 3. 编译器的选择 3.1 编译和链接 3.2 编译器的对比 6. main函数 7. printf 和 库函数 8. 关键字介绍 8.1 什么是预编译? 8.2 static 的关键词作用? 8.3 const 的作用 8.4 voliate 的作用 8.5 typedef 的作用…

Python---文件和文件夹操作

os模块 在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下: 第一步:导入os模块 import os 第二步:调用os模块中的相关方法 os.函数名() 与文件操作相关方法 编号函数功能1os.rename(目标文件名称&…

【MATLAB源码-第93期】基于matlab的白鲸优化算法(BWO)和鲸鱼优化算法(WOA)机器人栅格路径规划对比。

操作环境: MATLAB 2022a 1、算法描述 白鲸优化算法(BWO) 白鲸优化算法是受到白鲸捕食和迁徙行为启发的一种算法。其主要特点和步骤包括: 1. 搜索食物(全局搜索):算法模仿白鲸寻找食物的行为。…

执行npm run dev报Error: error:0308010C:digital envelope routines::unsupported问题

vue2element-ui项目,在执行npm run dev的时候突然报错: (node:19424) [DEP0111] DeprecationWarning: Access to process.binding(http_parser) is deprecated. (Use node --trace-deprecation ... to show where the warning was created) Er…

神策数据荣获 36 氪「WISE2023 未来商业之王 企业服务领域年度企业」

11 月 28 日,36 氪 WISE2023 商业之王大会举办。大会上,WISE2023 年度企业重磅发布,聚焦发掘推动产业发展、为经济增长提供创新动能的企业。神策数据作为专业的大数据分析和营销科技服务提供商,在数百家企业中脱颖而出&#xff0c…

diffusion DreamBooth是什么

DreamBooth 是一种利用扩散模型进行定制化图像生成的技术。通过这种技术,可以通过提供少量特定主题的参考图像,微调预训练好的扩散模型,使其能够生成包含特定主题特征的新图像。 在扩散模型的背景下,DreamBooth 的工作原理大致如…

微前端个人理解与简单总结

最近一段时间在学习微前端,一开始是看各种博客了解微前端含义、对比多种微前端框架优劣,最后选择了qiankun、micro-app、wujie这三种微前端框架进行深入研究、对比。 微前端框架 推出时间 官方文档易读性 社区讨论活跃度 配置难度 Qiankun&#xff…

避免客户开发信被限制的方法与策略

开发信是外贸或者出海企业常用的一种开发客户的方式。相较于其他的获客方式,开发信能够更加精准地投放到客户中,并且只需承担较低的成本。但是,由于一些限制管制要求,外贸人员可能会遇到开发新被限制的情况。今天,小编…

WebUI自动化学习(Selenium+Python+Pytest框架)005

基础知识学习完毕,接下来我们开始学习测试框架啦!!! 首先来回顾一下python自带的Unittest框架: Python基础学习016__UnitTest-CSDN博客文章浏览阅读97次。Testcase:测试用例:这个测试用例是UnitTest的组成部分,不是手…

基于SpringBoot校园周边美食探索及分享平台的设计与实现

摘要: 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起,互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域,传统的美食业进而也面临着巨大的挑战&#xff0c…

【Linux系统化学习】揭秘 命令行参数 | 环境变量

个人主页点击直达:小白不是程序媛 Linux专栏:Linux系统化学习 代码仓库:Gitee 目录 命令行参数 环境变量 PATH 查看PATH $PWD 查看环境变量PWD $HOME 查看系统支持的环境变量 获取环境变量 命令行参数 在C/C编程语言中我们有一个…

快速上手PostMan,了解PostMan的基本使用

快速上手PostMan PostMan是一个可扩展的API开发和测试协同平台工具有网页版和独立客户端,推荐安装独立客户端 创建WorkSpace工作空间 类似于GitHub的个人空间可以起到云备份的作用 发送请求 发送Get请求 发送Post请求,设置请求体的格式是表单数据即namevalue的格式 发送Pos…

一个较为实用的日志类【Python】

文章目录 前言一、LogUtil 类提供了以下功能二、代码三、使用 前言 在软件开发中,日志记录是一项重要的任务,它可以帮助我们跟踪应用程序的行为、故障排查和性能分析。为了简化日志记录的过程并提供更多的灵活性,下面介绍一个名为 LogUtil 的…

开源 LLM 安全扫描器

Vigil 是一款开源安全扫描程序,可检测即时注入、越狱以及对大型语言模型(LLM) 的其他潜在威胁。 当攻击者使用专门设计的输入成功影响 LLM 时,就会出现即时注入。这导致 LLM 无意中实现了攻击者设定的目标。 ​ 我对 LLM 的可能性感到非常兴奋&#xff…

vue3新特性 compositionAPi与React.js中Hooks的异同点

1. React.js中的Hooks基本使用 React Hooks允 许你"勾入"诸如组件状态 和副作用处理等React功能中。 Hooks只能用在函数组件中,并允许我们 在不需要创建类的情况下将状态、副作用处 理和更多东西带入组件中。React核心团队 奉.上的采纳策略是不反对类组…

关于web前端通过js获取后端mysql数据库数据的一个方法

关于web前端通过js获取后端mysql数据库数据的一个方法 问题引入 关于html的教程很多,关于mysql的教程也很多,那么怎么让html展示mysql的数据呢? 一言以蔽之 前端通过js向后端发起一个http请求,后端响应这个请求并返回数据 实…