news 2026/5/20 4:33:00

fio 硬盘性能测试完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
fio 硬盘性能测试完整指南

fio 硬盘性能测试完整指南

fio(Flexible I/O Tester)是一款开源、灵活的磁盘I/O性能测试工具,支持多种I/O引擎、测试场景和参数配置,可精准测量硬盘(机械硬盘HDD、固态硬盘SSD)、分区及文件系统的读写性能,广泛应用于服务器存储测试、硬盘选型验证等场景。本文涵盖从安装到实操、参数解读及问题排查的全流程,适合新手快速上手。

一、fio 核心概念与测试指标

1.1 核心基础概念

  • 任务(Job):fio的基本测试单元,每个任务可配置独立的I/O模式、读写类型、线程数等参数,支持单任务或多任务并发测试。

  • I/O引擎(I/O Engine):fio与操作系统交互的方式,不同引擎适配不同场景,直接影响测试结果的真实性。

  • 块大小(Block Size):单次I/O操作的数据量,对应不同业务场景(如小文件读写用4K,大文件传输用128K及以上)。

  • 队列深度(Queue Depth):同时提交给硬盘的未完成I/O请求数量,队列深度越大,越能发挥SSD的并行读写能力。

1.2 关键测试指标

  • 吞吐量(Bandwidth):单位时间内完成的I/O数据量,常用单位MB/s(兆字节/秒)、GB/s(吉字节/秒),侧重大文件连续读写性能。

  • IOPS(Input/Output Operations Per Second):每秒完成的I/O操作次数,侧重小文件随机读写性能(如数据库场景核心指标),SSD的IOPS远高于HDD。

  • 延迟(Latency):单次I/O操作从发起至完成的时间,分为读延迟、写延迟,单位为毫秒(ms)或微秒(us),延迟越低,硬盘响应越快。

  • CPU使用率:测试过程中CPU的占用率,反映硬盘I/O操作对CPU的消耗,避免因CPU瓶颈影响测试结果。

二、fio 安装步骤

fio支持Linux、Windows、macOS等主流系统,优先推荐在Linux系统中测试(兼容性更好、参数更全面),各系统安装方法如下:

2.1 Linux 系统

  • Debian/Ubuntu 系列(通过包管理器安装,推荐):sudo apt update && sudo apt install fio -y

  • CentOS/RHEL 系列:
    sudo yum install epel-release -y # 依赖epel源 sudo yum install fio -y

  • 源码编译安装(适合需要最新版本的场景):
    `# 下载源码(可替换为最新版本)
    wget https://github.com/axboe/fio/archive/refs/tags/fio-3.36.tar.gz

解压并编译

tar -zxvf fio-3.36.tar.gz
cd fio-3.36
make && sudo make install

验证安装

fio --version`

2.2 Windows 系统

  1. 官网下载压缩包(https://github.com/axboe/fio/releases),选择适配Windows的版本(如fio-3.36-windows.zip);

  2. 解压后进入目录,通过CMD或PowerShell运行fio(无需安装),示例:
    cd fio-3.36-windows fio --version

注意:Windows系统部分I/O引擎不支持,测试场景有限,优先推荐Linux环境。

2.3 macOS 系统

通过Homebrew安装(需提前安装Homebrew):
brew install fio

三、fio 基础测试流程

fio测试分为「命令行直接测试」和「配置文件测试」两种方式:命令行适合快速验证简单场景,配置文件适合复杂场景(多任务、自定义参数),核心流程均为「配置参数→执行测试→分析结果」。

3.1 前置注意事项

  • 测试前关闭目标硬盘上的其他读写任务(如数据库、文件传输),避免干扰测试结果;

  • 尽量直接测试硬盘设备(如/dev/sda),而非挂载目录,避免文件系统缓存影响结果;

  • 测试SSD时,建议先执行TRIM操作(fstrim /挂载目录),清除无效数据,保证测试基准一致;

  • 测试时长建议设置为60秒以上,避免短期波动导致结果失真。

3.2 命令行直接测试(常用场景)

命令行通过参数直接指定测试配置,以下是4种核心场景的示例,可直接替换设备路径(如/dev/sdb)或参数使用。

场景1:4K随机读(数据库核心场景)

fio -filename=/dev/sdb -direct=1-iodepth=16-thread -rw=randread -ioengine=libaio -bs=4k -size=10G -runtime=60-group_reporting -name=4k_randread

场景2:4K随机写(数据库、日志场景)

fio -filename=/dev/sdb -direct=1-iodepth=16-thread -rw=randwrite -ioengine=libaio -bs=4k -size=10G -runtime=60-group_reporting -name=4k_randwrite

场景3:128K连续读(大文件传输、视频渲染场景)

fio -filename=/dev/sdb -direct=1-iodepth=8-thread -rw=read -ioengine=libaio -bs=128k -size=50G -runtime=60-group_reporting -name=128k_seqread

场景4:128K连续写(文件备份、数据写入场景)

fio -filename=/dev/sdb -direct=1-iodepth=8-thread -rw=write -ioengine=libaio -bs=128k -size=50G -runtime=60-group_reporting -name=128k_seqwrite

3.3 配置文件测试(复杂场景)

当需要多任务并发(如混合读写、多块硬盘同时测试)时,可编写配置文件(后缀为.fio),集中管理参数,执行更灵活。

示例:混合读写测试配置文件(mixed.fio)

[global] filename=/dev/sdb # 测试设备 direct=1 # 跳过文件系统缓存,直接读写硬盘 ioengine=libaio # I/O引擎,Linux推荐libaio iodepth=16 # 队列深度 bs=4k # 块大小 size=10G # 测试数据量 runtime=60 # 测试时长(秒) thread # 启用线程模式 group_reporting # 合并输出结果 time_based # 按时间结束测试(优先于size) [randread] rw=randread # 随机读任务 percentage_random=100 # 随机读占比100% [randwrite] rw=randwrite # 随机写任务 percentage_random=100 # 随机写占比100% stonewall # 等待前一个任务完成后执行

执行配置文件

fio mixed.fio

四、核心参数详解

fio参数繁多,以下梳理高频核心参数,按功能分类说明,方便按需配置:

4.1 基础配置参数

参数作用常用取值
-filename指定测试目标(硬盘设备或文件路径)/dev/sda、/mnt/test.dat
-name测试任务名称,用于区分结果4k_randread、seq_write
-runtime测试持续时间(秒)60、120(避免过短)
-size测试数据总量,优先于runtime(time_based开启时相反)10G、50G(需大于内存,避免缓存干扰)
-thread启用线程模式,替代默认的进程模式,降低资源消耗无取值,直接添加参数
-group_reporting合并所有任务的结果,输出汇总信息无取值,直接添加参数

4.2 I/O 模式与引擎参数

参数作用常用取值
-rw指定读写模式,核心参数read(连续读)、write(连续写)、randread(随机读)、randwrite(随机写)、rw(混合读写)
-ioengine指定I/O引擎,决定fio与系统的交互方式libaio(Linux异步I/O,推荐)、sync(同步I/O)、mmap(内存映射)
-direct是否跳过文件系统缓存(1=跳过,0=启用)1(真实测试硬盘性能,推荐)、0(测试缓存加速后的性能)
-iodepthI/O队列深度,影响并行读写性能SSD:8-32,HDD:1-4(HDD并行能力弱,队列过深易卡顿)

4.3 块大小与混合读写参数

参数作用常用取值
-bs单次I/O操作的块大小,决定测试场景4k(随机读写/数据库)、128k-1M(连续读写/大文件)
-rwmixread混合读写模式下,读操作的占比(仅rw模式生效)70(常用读写比例7:3)、50(均衡读写)
-percentage_random混合读写中随机I/O的占比(0=纯连续,100=纯随机)0、100(常用纯连续/纯随机场景)

五、测试结果解读

fio测试完成后,会输出详细结果,核心关注「Jobs汇总信息」,以下是4K随机读测试的结果示例及关键指标解读:

结果示例

4k_randread:(groupid=0,jobs=1):err=0:pid=12345: Wed Nov110:00:002024read:IOPS=18.5k,BW=72.3MiB/s(75.8MB/s)(4340MiB/60001msec)slat(usec):min=1,max=128,avg=4.25,stdev=3.12clat(usec):min=20,max=890,avg=85.62,stdev=25.31lat(usec):min=22,max=892,avg=89.87,stdev=25.45clat percentiles(usec):|1.00th=[35],5.00th=[50],10.00th=[58],20.00th=[68],|30.00th=[75],40.00th=[80],50.00th=[85],60.00th=[90],|70.00th=[95],80.00th=[102],90.00th=[115],95.00th=[130],|99.00th=[170],99.50th=[190],99.90th=[230],99.95th=[250],|99.99th=[320]cpu:usr=2.50%,sys=7.80%,ctx=215689,majf=0,minf=24IO 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.0%,32=0.0%,64=0.0%,>=64=0.0% issued rwts:total=1111040,0,0,0short=0,0,0,0dropped=0,0,0,0 latency:target=0,window=0,percentile=100.00%,depth=16

关键指标解读

  • IOPS:示例中IOPS=18.5k,即每秒完成18500次4K随机读操作,SSD的4K随机读IOPS通常在10k-100k+,HDD一般在100-200。

  • BW(带宽):示例中BW=72.3MiB/s,即每秒传输72.3兆字节数据,4K场景带宽通常低于大文件连续读写。

  • lat(延迟)

    • slat:提交延迟(从发起I/O到提交给内核的时间), avg=4.25us,越低越好;

    • clat:完成延迟(从提交到I/O完成的时间), avg=85.62us,核心延迟指标;

    • lat:总延迟(从发起至完成的总时间), avg=89.87us。

  • clat percentiles(延迟分位数):99.99th=[320]表示99.99%的I/O完成延迟不超过320us,分位数比平均值更能反映极端场景的性能。

  • CPU使用率:usr=2.50%(用户态CPU占用),sys=7.80%(内核态CPU占用),总占用较低,无CPU瓶颈。

  • IO depths:16=100.0%表示队列深度稳定在16,与配置一致,无队列溢出。

六、常见问题与排查方案

6.1 测试结果波动大

  • 原因:系统缓存干扰、其他进程占用I/O、测试时长过短、硬盘未做预处理(SSD未TRIM、HDD未碎片整理)。

  • 排查方案:启用-direct=1跳过缓存;关闭其他读写任务;测试时长设置为60秒以上;SSD执行fstrim,HDD执行fsck整理碎片;多次测试取平均值。

6.2 权限不足,无法测试硬盘设备

  • 原因:未使用root权限,普通用户无法直接操作硬盘设备(/dev/sda等)。

  • 排查方案:在fio命令前添加sudo,以root权限执行测试。

6.3 提示“I/O engine libaio not supported”

  • 原因:系统不支持libaio引擎(如Windows、部分轻量Linux系统),或未安装libaio依赖。

  • 排查方案:Linux系统安装依赖(sudo apt install libaio-dev);替换为sync引擎(-ioengine=sync)。

6.4 HDD测试IOPS极低(低于100)

  • 原因:HDD本身随机读写性能弱,队列深度设置过大,或硬盘存在坏道、老化问题。

  • 排查方案:将队列深度调整为1-4(-iodepth=2);用smartctl检测硬盘健康状态(smartctl -a /dev/sda)。

6.5 测试时CPU使用率过高(超过80%)

  • 原因:线程数过多、I/O引擎选择不当(如sync引擎比libaio更耗CPU)、块大小过小导致I/O操作频繁。

  • 排查方案:减少线程数;替换为libaio引擎;适当增大块大小(如从4K改为8K)。

七、进阶测试场景

7.1 多块硬盘并发测试

编写配置文件,同时测试/dev/sdb、/dev/sdc两块硬盘,示例(multi_disk.fio):
`[global]
direct=1
ioengine=libaio
iodepth=16
bs=4k
size=10G
runtime=60
thread
group_reporting

[disk1_randread]
filename=/dev/sdb
rw=randread

[disk2_randread]
filename=/dev/sdc
rw=randread`

7.2 模拟数据库混合读写场景

配置70%随机读、30%随机写,块大小4K,队列深度32,示例命令:
fio -filename=/dev/sdb -direct=1 -iodepth=32 -thread -rw=rw -rwmixread=70 -ioengine=libaio -bs=4k -size=20G -runtime=120 -group_reporting -name=db_mixed_test

7.3 测试文件系统性能(而非裸盘)

若需测试挂载目录(如/mnt/data)的文件系统性能,关闭direct模式,示例:
fio -filename=/mnt/data/test.dat -direct=0 -iodepth=8 -thread -rw=read -ioengine=libaio -bs=128k -size=50G -runtime=60 -group_reporting -name=fs_seqread

八、总结

fio的核心优势的是灵活适配各类I/O场景,测试时需注意:

  • 根据实际业务场景选择块大小、读写模式和队列深度(如数据库用4K随机读写,大文件传输用128K连续读写);

  • 纯硬盘性能测试需启用-direct=1,避免缓存干扰,测试文件系统性能则关闭;

  • 多次测试取平均值,结合IOPS、带宽、延迟等多指标综合评估,而非单一指标判断性能。

通过本文的基础操作和参数配置,可完成大多数硬盘性能测试场景,如需适配特定业务(如分布式存储、云硬盘),可调整参数或增加多任务并发配置。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 13:05:38

基于PLC的包裹仓库分拣系统设计 (设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

、基于PLC的包裹仓库分拣系统设计 (设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 摘 要 在工业不断发展的推动下,PLC技术在控制方面受到越来越多的关注,自动化、智能化的分拣装置在物流、制造等行业广…

作者头像 李华
网站建设 2026/5/16 14:31:02

基于单片机的家居环境监测系统的研究与设计

基于单片机的家居环境监测系统的研究与设计 第一章 绪论 传统家居环境监测多依赖单一功能的便携式检测仪,存在监测维度少、数据无法实时汇总、缺乏预警机制、需人工查看数据等问题,难以满足现代家庭对空气质量、温湿度、安全防护等全维度环境管控的需求。…

作者头像 李华
网站建设 2026/5/19 18:00:24

基于单片机的智能温控风扇设计

基于单片机的智能温控风扇设计 第一章 绪论 传统风扇多采用手动档位调节风速,存在温控精度低、无法根据环境温度自动适配风速、能耗高、缺乏人性化交互等问题,难以满足居家、办公、小型机房等场景下精细化控温需求。STM32单片机凭借高精度ADC采集能力、…

作者头像 李华
网站建设 2026/5/20 17:17:29

nodejs+vue的智慧博物馆文创产品商城及预约平台的设计与实现

文章目录智慧博物馆文创产品商城及预约平台的设计与实现摘要--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!智慧博物馆文创产品商城及预约平台的设计与实现摘要 背景与目标 随着数字化技术的普及,博物…

作者头像 李华
网站建设 2026/5/20 14:48:51

CraftCMS CVE-2025-32432 远程代码执行漏洞利用工具

🧨 CraftCMS CVE-2025-32432 远程代码执行漏洞利用工具 📋 项目概述 本项目是一个针对CraftCMS 4.x和5.x版本中存在的CVE-2025-32432预认证远程代码执行(RCE)漏洞的专业自动化利用工具。该漏洞存在于资产转换生成端点&#xff0…

作者头像 李华