fio磁盘测试工具使用笔记
本文介绍磁盘性能测试工具fio在某国产操作系统(内核4.19,gcc为7.3.0)上的编译和使用。
背景
某项目使用物理机安装某数据库,相关人员提到磁盘性能方面的要求,用fio测试32k的随机读写,性能要达到1万 IOPS。本文即进行此工具测试。
fio是一款强大的磁盘 I/O 性能测试工具,用于评估存储设备(如硬盘、SSD、NVMe)的 吞吐量(BW)、IOPS(每秒 I/O 操作数)和延迟(Latency)。它支持多种 I/O 引擎和工作模式,可模拟真实业务场景的压力测试。
主要特点如下:
- 多引擎支持:libaio(Linux 异步 I/O)、io_uring(高性能)、psync(同步)、mmap(内存映射)等。
- 灵活配置:可自定义 块大小(block size)、队列深度(iodepth)、读写比例(rwmixread) 等参数。
- 多线程/多任务:通过 numjobs 模拟并发负载。
- 跨平台:支持 Linux、Windows、macOS。
安装
下载:https://github.com/axboe/fio/releases 。文件:fio-3.39.tar.gz
在线安装依赖库:
sudo yum install libaio libaio-devel -y
编译:
./configure
make
sudo make install
验证 libaio 支持:
# ./fio --enghelp | grep libaiolibaio
测试
32k随机读写测试命令,使用libaio库,命令如下:
fio --name=randrw_test --ioengine=libaio --iodepth=32 --rw=randrw --rwmixread=50 --bs=32k --direct=1 --size=4G --numjobs=4 --runtime=60 --time_based --group_reporting
关键参数说明
- –iodepth=32:设置I/O队列深度为32,这对SSD/NVMe设备很重要
- –numjobs=4:使用4个并行线程/进程来产生负载
- –direct=1:绕过系统缓存,直接I/O
- –size=4G:每个线程测试4GB数据
- –runtime=60:测试运行60秒
测试结果的主要指标如下:
IOPS=423, BW=13.2MiB/s
从结果看,测试服务器硬盘性能一般般。详细结果如下:
# fio --name=randrw_test --ioengine=libaio --iodepth=32 --rw=randrw --rwmixread=50 --bs=32k --direct=1 --size=4G --numjobs=4 --runtime=60 --time_based --group_reporting
randrw_test: (g=0): rw=randrw, bs=(R) 32.0KiB-32.0KiB, (W) 32.0KiB-32.0KiB, (T) 32.0KiB-32.0KiB, ioengine=libaio, iodepth=32
...
fio-3.39
Starting 4 processes
randrw_test: Laying out IO file (1 file / 4096MiB)
randrw_test: Laying out IO file (1 file / 4096MiB)
randrw_test: Laying out IO file (1 file / 4096MiB)
randrw_test: Laying out IO file (1 file / 4096MiB)
Jobs: 4 (f=4): [m(4)][5.0%][r=18.0MiB/s,w=18.8MiB/s][r=576,w=603 IOPS][eta 00m:5Jobs: 4 (f=4): [m(4)][6.7%][r=17.8MiB/s,w=19.2MiB/s][r=571,w=614 IOPS][eta 00m:5Jobs: 4 (f=4): [m(4)][8.3%][r=17.1MiB/s,w=16.9MiB/s][r=547,w=542 IOPS][eta 00m:5Jobs: 4
。。。
(f=4): [m(4)][100.0%][r=6048KiB/s,w=6688KiB/s][r=189,w=209 IOPS][eta 00mJobs: 4 (f=4): [m(4)][9.6%][r=7776KiB/s,w=5760KiB/s][r=243,w=180 IOPS][eta 09m:3Jobs: 2 (f=2): [m(2),_(2)][34.4%][r=1069KiB/s,w=855KiB/s][r=33,w=26 IOPS][eta 01m:58s]
randrw_test: (groupid=0, jobs=4): err= 0: pid=1048845: Thu Mar 27 16:53:20 2025read: IOPS=423, BW=13.2MiB/s (13.9MB/s)(821MiB/62024msec)slat (nsec): min=4456, max=96903, avg=14923.19, stdev=5994.18clat (usec): min=30, max=3032.4k, avg=230270.66, stdev=238818.59lat (usec): min=37, max=3032.4k, avg=230285.58, stdev=238818.97clat percentiles (msec):| 1.00th=[ 3], 5.00th=[ 12], 10.00th=[ 26], 20.00th=[ 58],| 30.00th=[ 96], 40.00th=[ 134], 50.00th=[ 169], 60.00th=[ 209],| 70.00th=[ 266], 80.00th=[ 347], 90.00th=[ 498], 95.00th=[ 659],| 99.00th=[ 1150], 99.50th=[ 1469], 99.90th=[ 2106], 99.95th=[ 2165],| 99.99th=[ 2601]bw ( KiB/s): min= 1856, max=46208, per=100.00%, avg=13948.19, stdev=2178.00, samples=481iops : min= 58, max= 1444, avg=435.88, stdev=68.06, samples=481write: IOPS=429, BW=13.4MiB/s (14.1MB/s)(832MiB/62024msec); 0 zone resetsslat (usec): min=4, max=110, avg=15.08, stdev= 7.04clat (usec): min=30, max=2336.7k, avg=66911.12, stdev=126808.10lat (usec): min=37, max=2336.8k, avg=66926.21, stdev=126809.08clat percentiles (usec):| 1.00th=[ 35], 5.00th=[ 38], 10.00th=[ 40],| 20.00th=[ 42], 30.00th=[ 45], 40.00th=[ 48],| 50.00th=[ 63], 60.00th=[ 41157], 70.00th=[ 79168],| 80.00th=[ 121111], 90.00th=[ 183501], 95.00th=[ 270533],| 99.00th=[ 522191], 99.50th=[ 633340], 99.90th=[1736442],| 99.95th=[1920992], 99.99th=[2231370]bw ( KiB/s): min= 1344, max=48128, per=100.00%, avg=14177.60, stdev=2354.39, samples=480iops : min= 42, max= 1504, avg=443.05, stdev=73.57, samples=480lat (usec) : 50=22.30%, 100=4.20%, 250=0.19%, 500=0.13%, 750=0.11%lat (usec) : 1000=0.07%lat (msec) : 2=0.18%, 4=0.49%, 10=1.89%, 20=2.60%, 50=7.73%lat (msec) : 100=13.39%, 250=27.73%, 500=13.43%, 750=3.72%, 1000=1.02%lat (msec) : 2000=0.72%, >=2000=0.11%cpu : usr=0.10%, sys=0.35%, ctx=50323, majf=0, minf=54IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=99.8%, >=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.0%, 32=0.1%, 64=0.0%, >=64=0.0%issued rwts: total=26277,26637,0,0 short=0,0,0,0 dropped=0,0,0,0latency : target=0, window=0, percentile=100.00%, depth=32Run status group 0 (all jobs):READ: bw=13.2MiB/s (13.9MB/s), 13.2MiB/s-13.2MiB/s (13.9MB/s-13.9MB/s), io=821MiB (861MB), run=62024-62024msecWRITE: bw=13.4MiB/s (14.1MB/s), 13.4MiB/s-13.4MiB/s (14.1MB/s-14.1MB/s), io=832MiB (873MB), run=62024-62024msecDisk stats (read/write):dm-0: ios=26277/27963, sectors=1681728/1722759, merge=0/0, ticks=5988971/1844511, in_queue=0, util=98.92%, aggrios=26277/27885, aggsectors=1681728/1722759, aggrmerge=0/78, aggrticks=5991165/1774213, aggrin_queue=7745112, aggrutil=99.33%sda: ios=26277/27885, sectors=1681728/1722759, merge=0/78, ticks=5991165/1774213, in_queue=7745112, util=99.33%
其它说明
可以进行以下几种类型的测试:
- 随机读写:–rw=randrw
- 随机读:–rw=randread
- 随机写:–rw=randwrite
其它事项:
- 对于NVMe SSD,可以使用
--ioengine=io_uring以获得更好性能。 - 如果系统核数较多,则可以增加线程数
numjobs,发挥最大性能。
小结
目前还没有服务器测试,后续找机会再试试。
附
在centos7无法编译信息
fio新版本对GCC有要求,如版本过低,则无法编译,如下:
# ./configure
Operating system Linux
CPU x86_64
Big endian no
Compiler gcc
Cross compile noStatic build noYour compiler doesn't support C11 atomics. gcc 4.9/clang 3.6 are the
minimum versions with it - perhaps your compiler is too old?
C11 atomics support not found
Configure failed, check config.log and/or the above output
相关文章:
fio磁盘测试工具使用笔记
本文介绍磁盘性能测试工具fio在某国产操作系统(内核4.19,gcc为7.3.0)上的编译和使用。 背景 某项目使用物理机安装某数据库,相关人员提到磁盘性能方面的要求,用fio测试32k的随机读写,性能要达到1万 IOPS。…...
JavaScrip——BOM编程
一、BOM核心对象与导航控制 1. location对象:页面跳转与刷新 // 跳转到指定URL location.href "https://example.com"; // 刷新当前页面 location.reload(); // 示例:点击按钮跳转 document.querySelector("#btn").onclick () &…...
机器学习 分类算法
【实验名称】 实验:分类算法 【实验目的】 1.了解分类算法理论基础 2.平台实现算法 3. 编程实现分类算法 【实验原理】 分类(Categorization or Classification)就是按照某种标准给对象贴标签(label),再根据标签来区分归类。 【实验环境】 OS:Ubuntu16.0…...
【leetcode100】每日温度
1、题目描述 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输…...
<贪心算法>
前言:在主包还没有接触算法的时候,就常听人提起“贪心”,当时是layman,根本不知道说的是什么,以为很难呢,但去了解一下,发现也不过如此嘛(bushi),还以为是什么高级东西呢…...
基于银河麒麟桌面服务器操作系统的 DeepSeek本地化部署方法【详细自用版】
一、3种方式使用DeepSeek 1.本地部署 服务器操作系统环境进行,具体流程如下(桌面环境步骤相同): 本例所使用银河麒麟高级服务器操作系统版本信息: (1)安装ollama 方式一:按照ollama官网的下载指南,执行如下命令: curl -fsSL https://ollama.com/install.sh | sh方…...
「2025最新版React+Ant Design+Router+TailwindCss全栈攻略:从零到实战,打造高颜值企业级应用
一站式掌握最新技术栈!手把手教你配置路由、集成UI组件库、高效开发秘籍大公开 ReactAntrouteraxiosmocktailwind css等组合安装使用教程 官网:React Native 中文网 使用React来编写原生应用的框架 一,安装 npx create-react-app my-app …...
Ubuntu 24.04.2 LTS 系统安装python,创建虚拟环境
在 Ubuntu 24.04.2 LTS 系统中,系统本身自带了 Python 3,不过你还是可以按照下面的步骤来安装和配置 Python 环境。 1. 检查系统自带的 Python 版本 在终端中输入以下命令查看系统自带的 Python 版本: python3 --version如果显示了 Python…...
redis7.0搭建redis-cluster集群部署实战
环境 基于3台centos服务 host节点1端口节点2端口master70007001slave170007001slave270007001 安装redis,以及环境准备 安装可以参考https://blog.csdn.net/tao1992/article/details/132614567 安装路径设置了/usr/local/redis 分别在3台服务器上执行 #配置文…...
CMake学习--如何在CMake中编译静态库、动态库并在主程序中调用
目录 一、背景知识二、使用方法(一)编译静态库(二)编译动态库(三)在主程序中调用库 三、总结 一、背景知识 在C/C开发中,库(Library)是预先编译好的代码集合,…...
安美数字酒店宽带运营系统存在SQL注入漏洞
免责声明:本号提供的网络安全信息仅供参考,不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我联系,我将尽快处理并删除相关内容。 漏洞描述 安美数字酒店宽带运营系统的lang…...
中级:Git面试题全攻略
一、引言 在现代软件开发中,Git作为分布式版本控制系统,被广泛应用于代码管理与团队协作。面试官通过Git相关问题,考察候选人对版本控制的基本概念、操作流程以及解决实际问题的能力。本文将深入解读Git的基本操作、分支管理、冲突解决等常见…...
ubuntu18 server版花屏问题
新搞了一台dellT150的塔式服务器,装的ubuntu18 server版。 开机后遇到花屏,或者卡在开机界面的问题,和售后技术沟通这个情况是ubuntu自带的显卡驱动包兼容问题。需要做如下设置: 解决: 1.开机,连续按下e…...
基于神经网络的肾脏疾病预测模型
构建一个基于神经网络的肾脏疾病预测模型 1. 数据预处理 加载数据:读取 kidney_disease.csv 文件,加载患者医疗数据。删除冗余特征:移除与预测目标无关的列(如 al, su 等),保留关键特征(如…...
Oracle常用高可用方案(10)——RAC
10.2. RAC 10.2.1. 概念 RAC,Real Application Cluster的缩写,业界就称为RAC。RAC最早出现于2001年发布的Oracle 9i版本,之前的版本中,也有类似的产品或技术,叫做OPS,即Oracle Parallel Server的缩写。基于多方面的因素,Oracle 9i之前的类似产品或技术并没有得到广泛应…...
JavaScript基础-移动端常用开发插件
在移动Web开发中,为了提升开发效率和用户体验,开发者通常会依赖于一些成熟的JavaScript插件。这些插件封装了复杂的功能,使得实现常见的交互效果变得更加简单快捷。本文将介绍几款广泛使用的移动端开发插件,并通过具体的示例展示它…...
I/O多路复用 + Reactor和Proactor + 一致性哈希
网络系统 1. I/O多路复用1)原始Socket模型通信方式2)多进程模型3)多线程模型4)I/O多路复用select/pollepoll边缘触发和水平触发 2. Reactor和Proactor1)Reactor模式2)Reactor模式四种方案3)单Re…...
解决小程序video控件在真机和上线后黑屏不播放问题
小程序上线后,mp4格式的视频无法点击是黑屏,但是测试得时候在微信开发者工具中能够打开正常播放 原因:编码格式不能是vp9 微信开发者工具本地设置中把这个打开勾选。 排查:可以换一个视频尝试能不能真机播放,如果能&a…...
js中判断对象是否包含某个属性(元素)
在JavaScript中,判断对象是否包含某个属性(元素)主要有以下几种方法,根据具体需求选择合适的方式: 1. 使用 in 运算符 作用:检查对象自身及原型链上是否存在指定属性。 示例: javascript cons…...
数据库6(数据库指令)
之前所学的指令均为查找指令,即select相关语句 接下来的语句是增删改查的其他三部分,即增删改 1.删除 删除操作是三个操作中较为简单的,因为它只需要考虑数据的完整性 在实验时可以用表的复件来操作,防止操作不当导致数据库被…...
[C++面试] 智能指针面试点(重点)续4
[C面试] RAII资源获取即初始化(重点)-CSDN博客 [C面试] 智能指针面试点(重点)-CSDN博客 [C面试] 智能指针面试点(重点)续1-CSDN博客 [C面试] 智能指针面试点(重点)续2-CSDN博客 …...
java项目分享-分布式电商项目附软件链接
今天来分享一下github上最热门的开源电商项目安装部署,star 12.2k,自行安装部署历时两天,看了这篇文章快的话半天搞定!该踩的坑都踩完了,软件也打包好了就差喂嘴里。 项目简介 mall-swarm是一套微服务商城系统…...
16变量命名风格
给变量/函数/文件/类 起名字, 非常有讲究的~~ 1.起的名字要有描述性.不要使用 abc,xyz 这种比较无规律的名字来描述 2.如果名字比较长,由多个单词构成的,就需要使用适当的方式来进行区分不同单词 C中,偏好使用_来进行单词的分割. 形如: student_count(变量) unordered_map(stl容…...
【LVS】负载均衡群集部署(DR模式)
部署前IP分配 DR服务器:192.168.166.101 vip:192.168.166.100 Web服务器1:192.168.166.104 vip:192.168.166.100 Web服务器2:192.168.166.107 vip:192.168.166.100 NFS服务器:192.168.166.108 …...
链表的操作-反转链表
链表 160相交链表 代码 class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* h1headA;ListNode* h2headB;while(h1&&h2){if(h1!h2){h1h1->next;h2h2->next;}else{return h1;}}if(h1nullptr){h1headB;}else{h…...
Linux安装Cmake (Centos 7.9)
cmake安装 这个虽然已经更新到了4.0.0版本了,但是我们要用3.5版本的,因为这个比较稳定 官方地址:https://github.com/Kitware/CMake/releases/tag/v3.5.0,选择那个cmake-3.5.0-Linux-x86_64.tar.gz下载, 首先解压文…...
Node.js v22.14.0 多平台安装指南:Windows、Linux 和 macOS 详细教程
Node.js作为现代Web开发的基石,持续为开发者带来性能提升和新特性支持。本文将详细介绍在Windows、macOS和Linux系统上安装最新Node.js的多种方法,助您快速搭建高效的JavaScript开发环境。 📦 当前最新版本 截至2025年4月,Node.…...
Netty源码—10.Netty工具之时间轮一
大纲 1.什么是时间轮 2.HashedWheelTimer是什么 3.HashedWheelTimer的使用 4.HashedWheelTimer的运行流程 5.HashedWheelTimer的核心字段 6.HashedWheelTimer的构造方法 7.HashedWheelTimer添加任务和执行任务 8.HashedWheelTimer的完整源码 9.HashedWheelTimer的总结…...
C++虚函数与抽象类
一、虚函数  **;类中定义不同类中的同名函数的多态的行为**,主要是通过虚函数来实现。 在类的成员函数前加virtual关键字。虚函数是实现包含多态的基础。这里需要说明的是当基类里有虚函数且派生类中重新声明了和基类虚函数相同的函数,那…...
鸿蒙项目笔记(1)
一、核心内容-商城 1、装饰器的拓展使用,基础组件的熟悉。 2、引入基础动画实战,页面属性动画、页面跳转动画、自定义页面翻页等。 3、一次开发,多端部署。 4、本地数据库实战,涉及多种本地数据存储方式。 5、路由导航&#…...
