【存储测试】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存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

基于MongoDB实现文件的分布式存储

《基于MongoDB实现文件的分布式存储》分布式文件存储的方案有很多,今天分享一个基于mongodb数据库来实现文件的存储,mongodb支持分布式部署,以此来实现文件的分布式存储,需要的朋友可以参考... 目录一、引言二、GridFS 原理剖析三、Spring Boot 集成 GridFS3.1 添加依赖

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据