Linux怎么使用fio测磁盘_Linux如何测试磁盘IO读写性能【方法】

冬伟酱_7517

冬伟酱_7517

2026-03-19

756人浏览

原创

fio测磁盘io必须加direct=1绕过page cache,否则结果失真;dd需同时设iflag=direct和oflag=direct;数据库关注4k随机读写iops与延迟,大文件关注顺序吞吐量。

linux怎么使用fio测磁盘_linux如何测试磁盘io读写性能【方法】

用 fio 测磁盘 IO,先绕过缓存再测才真实

直接跑 fio 默认会走 page cache,测出来的是内存+磁盘的混合速度,不是磁盘真实能力。必须加 direct=1 强制绕过缓存,否则随机读写、小块 IO 的结果完全失真。

  • direct=1 是硬性要求,不加等于白测;但某些老旧内核或裸设备可能不支持,报错 Operation not supported 时需换 buffered=1 并在结论里注明
  • 测试前建议卸载目标分区(如 /dev/sdb1),避免文件系统层干扰;若无法卸载,至少确保 filename 指向一个独立大文件(如 /mnt/testfile),别和业务数据混在一起
  • 不要用 /tmp 或 /root 目录——这些常挂载在内存盘(tmpfs)或系统盘上,测的不是目标磁盘

dd 能快速摸底,但参数选错就全废

dd 不是专业工具,但胜在系统自带、上手快。关键在两个标志位:iflag=direct 和 oflag=direct 必须同时出现,否则默认走缓存,写入速度可能虚高 5–10 倍。

  • 测写:用 dd if=/dev/zero of=testfile bs=1M count=2048 oflag=direct,count=2048 对应 2GB,太小(如 100MB)易受瞬时波动影响
  • 测读:用 dd if=testfile of=/dev/null bs=1M iflag=direct,注意不能省略 iflag=direct,否则读的是 page cache 里的热数据
  • 别信 conv=fdatasync 或 oflag=dsync ——它们只保证落盘,不绕缓存;真正绕缓存只有 direct 标志

顺序 vs 随机、读 vs 写,场景不同指标意义完全不同

IOPS 和吞吐量(MB/s)永远是一对矛盾体。比如 SSD 在 4K 随机读下 IOPS 可达 10w+,但吞吐才 400MB/s;而顺序读同样 400MB/s 时,IOPS 还不到 10w。选哪个测,取决于你的真实负载。

  • 数据库、虚拟机盘:重点看 rw=randread / rw=randwrite + bs=4k,关注 IOPS 和 latency(延迟)
  • 视频转码、备份归档:用 rw=read / rw=write + bs=1M,盯紧 bw(带宽,即 MB/s)
  • 混合负载(如 rw=randrw,rwmixread=70)更贴近生产,但需明确读写比例,否则结果无法对标

看懂 fio 输出里的三个关键数字

fio 报告末尾的三行数值,90% 的人只扫一眼 bw 就结束,其实 iops 和 iowait(或 lat)才决定能不能扛住业务。

  • bw=124.5MiB/s:吞吐量,适合大文件场景;单位是 MiB/s(不是 MB/s),差约 7%
  • iops=31.9k:每秒完成的 IO 请求次数,数据库类应用生死线;低于预期值 30% 就要查是不是队列深度(iodepth)设太低
  • lat (usec): min=123, max=18920, avg=3210:延迟,avg 超过 10ms(即 10000μs)说明磁盘已吃紧;max 突增往往意味着队列积压或硬件响应异常

别忽略 %util 字段——如果长期 >80%,说明磁盘持续满负荷,哪怕 bw 看着还行,也已经没余量应对突发请求了。

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

529

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1678

6

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.20

2708

5

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2023.06.29

2465

3

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2023.08.14

3741

10

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2023.08.31

2671

3

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.05

887

5

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

2387

5

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

2023.10.16

2407

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习