【存储测试】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

相关文章

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs