重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 75|回复: 0
打印 上一主题 下一主题

[基础命令] 磁盘压测工具 fio

[复制链接]
跳转到指定楼层
楼主
发表于 4 天前 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 郑全 于 2026-7-19 11:41 编辑

新上系统时,我们一定听说过存储压测,有些厂家有自己得压测工具,有一些没有。其实,业界有一个标准得压测工具,那就是FIO,不管对方是否提供,我们可以使用 FIO来测试。下面我们来看看这个FIO的标准流程:

fio :Flexible I/O Tester

一、简介
fio 是业界标准磁盘 / 块设备 IO 压测工具,用来测 SSD/HDD、云盘、存储阵列的 IOPS、带宽、读写延迟,模拟数据库、日志、大文件、随机小 IO 等真实业务负载,Linux/Windows/macOS 全平台支持。
适用场景
  • 数据库:4K/8K 随机读写(OLTP,看 IOPS)
  • 日志存储:128K/1M 顺序读写(看带宽)
  • 对象存储 / 缓存:混合随机读写
  • 存储硬件选型、云盘性能验收、IO 调优
二、安装
CentOS/RHEL
yum install fio libaio-devel -y
Debian/Ubuntu
apt install fio libaio-dev -y
验证
fio --version

三、核心参数大全基础通用
参数 含义 常用值
--name=xxx 测试任务名称 rand4k、seq128k
--filename=/xxx 测试目标(文件 / 裸盘 /mnt/test/fio.tmp 或 /dev/vdb
--direct=1 绕过 OS PageCache,测真实硬件性能(必加) 1
--ioengine=libaio Linux 异步 IO 引擎(数据库标准) libaio
--bs=4k 单次 IO 块大小 4k (数据库)、128k (顺序日志)、1M (大文件)
--size=10G 总测试数据量(大于内存防缓存) 8G/10G/20G
--runtime=60 测试时长(秒) 60/120
--time_based 按时间跑,而非写完 size 就停 必加
--group_reporting 合并所有线程输出汇总结果 必加


IO 负载模式 --rw=
  • read:顺序读
  • write:顺序写
  • randread:随机读(数据库查询)
  • randwrite:随机写(数据库更新)
  • randrw:混合随机读写;--rwmixread=70 读 70% 写 30%
  • rw:顺序混合读写

并发与队列深度
  • --iodepth=32:单线程 IO 队列深度(异步 libaio 生效)
  • --numjobs=4:并发线程数
  • 总并发 IO 队列 ≈ numjobs × iodepth

四、高频实战命令
安全提示:不要直接 --filename=/dev/sda(系统盘会销毁数据),优先用挂载目录下的测试文件。

1)数据库场景:4K 随机读(看读 IOPS)
fio --name=4k_randread \
--filename=/data/fio.test \
--direct=1 \
--ioengine=libaio \
--bs=4k \
--rw=randread \
--iodepth=32 \
--numjobs=4 \
--size=10G \
--runtime=60 \
--time_based \
--group_reporting
2)数据库:4K 随机写(写 IOPS)
fio --name=4k_randwrite \

--filename=/data/fio.test \

--direct=1 \
--ioengine=libaio \
--bs=4k \
--rw=randwrite \
--iodepth=32 \
--numjobs=4 \
--size=10G \
--runtime=60 \
--time_based \
--group_reporting
3)日志 / 归档:128K 顺序写(测带宽 MB/s)
fio --name=128k_seq_write \
--filename=/data/fio.test \

--direct=1 \
--ioengine=libaio \
--bs=128k \
--rw=write \
--iodepth=128 \
--numjobs=1 \
--size=10G \
--runtime=60 \
--time_based \
--group_reporting

4)混合 7:3 随机读写(线上业务模拟)
fio --name=randrw_70r30w \
--filename=/data/fio.test \

--direct=1 \
--ioengine=libaio \
--bs=8k \
--rw=randrw \
--rwmixread=70 \
--iodepth=32 \
--numjobs=4 \
--size=10G \
--runtime=60 \
--time_based \
--group_reporting

五、输出结果关键字段解读
read: IOPS=15600, BW=60.9MiB/s (63.9MB/s)(3654MiB/60sec)
write: IOPS=4200, BW=16.4MiB/s (17.2MB/s)(986MiB/60sec)

lat (usec): min=80, max=4200, avg=245, stdev=186

  • IOPS:每秒读写次数(数据库核心指标,4K 随机越高越好)
  • BW:带宽(顺序场景看这个,单位 MiB/s)
  • lat 延迟(微秒 us)
    • avg:平均延迟
    • max:尾延迟(数据库最怕高尾延迟)
  • slat:提交延迟;clat:设备完成延迟;lat = slat+clat

六、Job 配置文件
新建 fio-test.conf

[global]

direct=1

ioengine=libaio
size=10G
runtime=60
time_based
group_reporting
filename=/data/fio.test

[4k-rand-read]
bs=4k
rw=randread
iodepth=32
numjobs=4

[4k-rand-write]
bs=4k
rw=randwrite
iodepth=32
numjobs=4

运行全部任务:

fio fio-test.conf

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-7-23 23:22 , Processed in 0.283471 second(s), 24 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表