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

2023-12-02 01:15

本文主要是介绍【存储测试】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}

这篇关于【存储测试】fio存储性能测试工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/443413

相关文章

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五