title: 磁盘与存储测试
created: 2026-06-20
updated: 2026-08-14
type: concept
tags: [storage, benchmark, filesystem, raid, nvme]
sources:
- raw/scripts/0硬盘.sh
- raw/scripts/fio.sh
- raw/scripts/fio.nvme.sh
- raw/scripts/fio.conf
- raw/scripts/iozone.sh
- raw/scripts/RAID.sh
- raw/scripts/iscsi.sh
- raw/scripts/磁盘 .sh
磁盘与存储测试
磁盘与存储测试涵盖基本信息查看、I/O 基准测试(顺序/随机)、压力测试、NVMe 专项测试、RAID 阵列管理。本文重点解析 FIO 工具的配置参数和顺序/随机 I/O 性能特征。
1. 存储设备基本信息查看
lsblk
列出所有块设备的拓扑、型号和挂载点:
lsblk -o NAME,MAJ:MIN,MODEL,SERIAL,SIZE,WWN,HCTL,TRAN,VENDOR,TYPE
关键字段:
- MODEL — 硬盘型号
- SERIAL — 序列号
- SIZE — 容量
- WWN — World Wide Name(全局唯一标识)
- TRAN — 传输协议(sata / nvme / scsi)
lsscsi
查看 SCSI 设备信息:
lsscsi -s
输出的关键信息包括 HCTL(Host:Channel:Target:Lun)、厂商、型号和容量。
blkid / UUID
blkid # 查看所有设备 UUID 和文件系统类型
ls -l /dev/disk/by-uuid/ # UUID 软链接
ls -l /dev/disk/by-id/ # WWID 软链接
smartctl(SMART 信息)
通过 SMART(Self-Monitoring, Analysis and Reporting Technology)查看硬盘健康状态:
# 查看硬盘温度
smartctl -a /dev/sda | grep -i -E 'Temperature|emp'
# 查看使用时间与序列号
sudo smartctl -i -A /dev/sdd | grep -iE 'Device Model|Serial|Power|Product'
# 批量采集
for i in {a..z}; do
smartctl -a /dev/sd$i >> smartctl.out
done
关键阈值指标:
- Reallocated_Sector_Ct — 重映射扇区数(应为 0)
- Power_On_Hours — 通电小时数
- Temperature_Celsius — 当前温度
- Pending_Sector — 待重映射扇区(应为 0)
iostat
实时 I/O 性能监控:
iostat -x 1 # 每 1 秒输出扩展统计
| 指标 | 含义 |
|---|---|
r/s, w/s |
每秒读写请求数(IOPS) |
rkB/s, wkB/s |
每秒读写数据量(吞吐量) |
await |
平均 I/O 等待时间(ms),反映延迟 |
%util |
设备利用率(不一定是瓶颈指标) |
参见:cpu-testing(CPU 性能影响 I/O 调度)、memory-testing(缓存清理操作与磁盘测试的配合)
2. FIO(Flexible I/O Tester)详解
FIO 是 Linux 上最主流的存储基准测试工具,支持多种 I/O 引擎和可自定义的负载模式。
安装
yum install -y libaio-devel fio
# 或源码编译
wget http://brick.kernel.dk/snaps/fio-2.2.5.tar.gz
tar -zxvf fio-2.2.5.tar.gz && cd fio-2.2.5
make && make install
核心参数详解
基础参数
| 参数 | 说明 | 典型值 |
|---|---|---|
--name |
测试任务名称 | test |
--filename |
测试目标(设备或文件) | /dev/sdb |
--directory |
测试目录(基于文件系统) | /tmp |
--size |
每个作业的 I/O 总量 | 10G, 100% |
--runtime |
测试持续时间 | 60s, 300s, 600s |
I/O 模式(--rw)
| 模式 | 含义 | 典型场景 |
|---|---|---|
read |
顺序读 | 大文件读取、视频流 |
write |
顺序写 | 大文件写入、日志写入 |
rw |
顺序混合读写(默认各 50%) | 文件服务器 |
randread |
随机读 | 数据库 OLTP 查询 |
randwrite |
随机写 | 数据库日志、缓存刷新 |
randrw |
随机混合读写 | 数据库 OLTP 综合负载 |
关键性能调优参数
| 参数 | 说明 | 典型值 |
|---|---|---|
--bs |
单次 I/O 块大小 | 4k(随机), 1M(顺序) |
--bsrange |
块大小范围 | 512-4096 |
--iodepth |
I/O 队列深度(异步引擎) | 顺序 4-8,随机 32-128 |
--numjobs |
并发作业(进程/线程)数 | 顺序 2-4,随机 4-8 |
--direct |
绕过操作系统缓存(=1 开启) | 1 |
--ioengine |
I/O 引擎 | libaio, psync, mmap |
--group_reporting |
汇总所有作业的输出 | (启用此选项) |
--cpus_allowed |
绑核(CPU 亲和性) | 64-79 |
--ramp_time |
预热时间(正式记录前) | 6s |
各参数详细说明:
--bs— 块大小直接影响性能特性。小块(4k) 关注 IOPS(每秒操作数),大块(1M) 关注吞吐量(MB/s)。SSD 的 4k 随机性能是重要指标。--iodepth— 异步引擎(libaio)的并发 I/O 请求数量。对高 IOPS 设备(NVMe SSD)应设置较大值(64-256)以压满设备。--numjobs— 启用的 fio 进程/线程数。增加numjobs会线性增加 I/O 压力,但过多可能导致 CPU 瓶颈。--direct=1— 以 O_DIRECT 标志打开文件,绕过 page cache,直接读写存储设备。测试结果更真实反映设备性能。--ioengine=libaio— Linux 原生异步 I/O 引擎,需要安装libaio-devel。多队列深度的最佳选择。--rwmixwrite=N— 混合模式下写占比(如--rwmixwrite=30即 30% 写、70% 读)。
典型 FIO 命令示例
# 顺序写 1M 块,2 作业,队列深度 4,运行 600 秒
fio -name=1Mw -filename=/dev/sdb -bs=1M -numjobs=2 -iodepth=4 \
-direct=1 -ioengine=libaio -runtime=600s -group_reporting -rw=write
# 顺序读 1M 块,4 作业,队列深度 8,运行 60 秒
fio -name=1Mr -filename=/dev/sdb -bs=1M -numjobs=4 -iodepth=8 \
-direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=read
# 4k 随机写,2 作业,队列深度 4,运行 600 秒
fio -name=4Kw -filename=/dev/sdb -bs=4k -numjobs=2 -iodepth=4 \
-direct=1 -ioengine=libaio -runtime=600s -group_reporting -rw=randwrite
# 4k 随机读,8 作业,队列深度 32,运行 60 秒
fio -name=4Kr -filename=/dev/sdb -bs=4k -numjobs=8 -iodepth=32 \
-direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=randread
# 混合随机读写(写占 30%),块大小范围 512-4096
fio -name=mix -filename=/dev/sdb -bsrange=512-4096 -direct=1 -numjobs=4 \
-iodepth=32 -rw=randrw -rwmixwrite=30 -ioengine=libaio -group_reporting -runtime=60s
FIO 配置文件模式
大型测试可以使用配置文件组织多个测试阶段(通过 stonewall 分隔):
fio fio.conf
示例 fio.conf(详见 raw/scripts/fio.conf):
[global]
ioengine=libaio
direct=1
thread=1
norandommap=1
randrepeat=0
ramp_time=6
size=1g
filename=/dev/sdb
[write1M-seq]
stonewall
group_reporting
bs=1M
rw=write
numjobs=2
iodepth=4
runtime=600
[read1M-seq]
stonewall
group_reporting
bs=1M
rw=read
numjobs=4
iodepth=8
runtime=60
[write4k-rand]
stonewall
group_reporting
bs=4k
rw=randwrite
numjobs=2
iodepth=4
runtime=600
[read4k-rand]
stonewall
group_reporting
bs=4k
rw=randread
numjobs=8
iodepth=32
runtime=60
[global]— 全局参数,对所有测试节生效stonewall— 各节之间顺序执行,前一个测试完成后再开始下一个thread=1— 使用线程而非进程(减少开销)norandommap=1+randrepeat=0— 随机测试时避免重复访问同一位置
结果解读
FIO 输出格式示例:
Jobs: 4 (f=4): [r(4)][100.0%][r=512MiB/s][r=128k IOPS][eta 00m:00s]
read: IOPS=128k, BW=512MiB/s (537MB/s)(30.0GiB/60001msec)
slat (usec): min=2, max=256, avg=5.83, stdev=3.21
clat (usec): min=10, max=5123, avg=85.12, stdev=45.3
lat (usec): min=15, max=5140, avg=91.02, stdev=46.1
bw (MiB/s): min=480, max=540, per=100.00%
关键输出:
- BW — 吞吐量(带宽),越高越好
- IOPS — 每秒 I/O 操作数,随机读写主要关注指标
- slat — 提交延迟(submission latency)
- clat — 完成延迟(completion latency)
- lat — 总延迟(slat + clat)
- bw (min/max) — 带宽波动范围
3. 顺序读写 vs 随机读写
性能特征对比
| 指标 | 顺序读写(seq) | 随机读写(rand) |
|---|---|---|
| 关注指标 | 带宽(MB/s) | IOPS |
| 典型块大小 | 1M | 4k |
| HDD 特征 | ≈150-250 MB/s(7200rpm) | ≈100-200 IOPS(极低) |
| SATA SSD 特征 | ≈500-550 MB/s | ≈50k-100k IOPS |
| NVMe SSD 特征 | ≈3500-14000 MB/s | ≈500k-1500k IOPS |
| 主要瓶颈 | 接口带宽 | 芯片控制器 + NAND 通道 |
测试策略
- 顺序读写(块大小 1M,队列深度 4-8):测试存储设备的极限吞吐带宽,反映大文件拷贝、视频编辑场景。
- 随机读写(块大小 4k,队列深度 32-128):测试存储设备的IOPS 能力,反映数据库、虚拟化场景。
NVMe 存储的额外特性
NVMe SSD 具有极高的并行性,需要足够的 iodepth 和 numjobs 才能压满:
# NVMe 顺序读(队列深度 64,4 作业)
fio -name=1Mr -filename=/dev/nvme0n1 -bs=1M -numjobs=4 -iodepth=64 \
-direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=read
# NVMe 4k 随机读(8 作业,队列深度 128)
fio -name=4Kr -filename=/dev/nvme0n1 -bs=4k -numjobs=8 -iodepth=128 \
-direct=1 -ioengine=libaio -runtime=60s -group_reporting -rw=randread
4. NVMe 专项测试与工具
nvme-cli
安装与常用命令:
dnf install -y nvme-cli
# 列出 NVMe 设备
sudo nvme list
# 设备信息
sudo nvme id-ctrl /dev/nvme0n1
# SMART 日志(包括温度、磨损、坏块)
sudo nvme smart-log /dev/nvme0n1
# 查看温度
sudo nvme smart-log /dev/nvme0 | grep "^temperature"
# 格式化(-l 1=4K 对齐,-s 1=安全擦除)
sudo nvme format /dev/nvme0n1 -n 1 -l 1
sudo nvme format /dev/nvme0n1 -s 1
# 安全擦除
sudo nvme sanitize /dev/nvme0n1
NVMe 全盘压测流程
fio.nvme.sh 的典型步骤:
- 格式化 —
nvme format重置设备状态 - 顺序写预热 —
fio -rw=write -bs=1M -iodepth=64运行 600s - 顺序读 —
fio -rw=read -bs=1M -iodepth=64运行 60s - 预处理 —
fio -rw=readwrite -bs=4k -size=100% --loops=2填充数据 - 4k 随机写 —
fio -rw=randwrite -bs=4k -iodepth=64运行 600s - 4k 随机读 —
fio -rw=randread -bs=4k -iodepth=128运行 60s - 温度记录 — 每个阶段后通过
nvme smart-log记录温度 - 结果汇总 — 自动提取 IOPS、带宽、温度、延迟生成 CSV
查看 NVMe 拓扑信息
# PCIe 拓扑
ls -l /sys/block/
lspci -vvs 0004:02:00.0
# 查看 NUMA 节点
lspci -vvvs 01:00.0 | grep NUMA
# 查看最大 Payload 大小(MRPS)和最大读请求(MRRS)
lspci -vv -s 21:00.0 | grep -E "MaxPayload|MaxReadReq"
5. iozone
iozone 是另一个全面的文件系统基准测试工具:
# 下载编译
wget http://www.iozone.org/src/stable/iozone3_491.tar
cd iozone/src/current
make linux
# 全面自动测试(-a),生成 Excel 格式报告
./iozone -aIRb out.xls
# 指定设备,测试读写+随机读写
./iozone -f /dev/sdb -i 0 -i 1 -i 2 -aIRb sdb.xls
# 指定文件大小和记录大小
./iozone -f /dev/sdb -s 10g -r 2m -I
iozone 测试模式(-i 参数):
| 模式 | 说明 |
|---|---|
| 0 | write/rewrite(写/重写) |
| 1 | read/re-read(读/重读) |
| 2 | random-read/write(随机读写) |
| 5 | stride-read(步进读) |
关键参数:
- -a — 全自动模式(测试多种块大小和文件大小)
- -I — 直接 I/O(绕过缓存),等同于 FIO 的 direct=1
- -R — 生成 Excel 兼容输出
- -b out.xls — 输出到 Excel 文件
- -s N — 测试文件大小
- -r N — 记录块大小
- -n / -g — 文件大小最小/最大值
- -y / -q — 记录块最小/最大值
6. dd 快速测速
dd 是最简单的 I/O 测试工具,适合快速验证:
# 写测试
echo 3 > /proc/sys/vm/drop_caches
dd if=/dev/zero of=/tmp/dd.dbf bs=1M count=1000 oflag=direct
# 读测试
echo 3 > /proc/sys/vm/drop_caches
dd if=/tmp/dd.dbf of=/dev/null bs=1M count=1000 iflag=direct
# 直接读写块设备
dd if=/dev/sde of=/dev/null bs=1M count=1000 iflag=direct
dd if=/dev/zero of=/dev/sde bs=1M count=1000 oflag=direct
oflag=direct/iflag=direct— 绕过缓存,直接读写conv=fdatasync— 完成后同步数据到磁盘dd只能测单线程顺序读写,不适合评估随机 IOPS 或多队列深度性能
7. RAID 管理(storcli)
查看 RAID 信息
# 查看 RAID 卡
storcli show
# 查看具体控制器上的物理盘信息
storcli /c0 show
- EID — Enclosure ID(背板号)
- Slt — Slot ID(槽位号)
- DID — Device ID
- State — 状态(UGood=正常,UBad=故障)
- DG — 磁盘组编号
- Intf — 接口类型(SATA / SAS)
- SeSz — 扇区大小(512B / 4K)
创建 RAID
# RAID 0
storcli /c0 add VD r0 drives=93:3-4
# RAID 1
storcli /c0 add VD r1 drives=30:3,30:4
# RAID 5
storcli /c0 add VD r5 drives=252:0-3
# 设置写策略为 WriteBack
storcli /c0/v1 set wrcache=awb
常见运维操作
# 点亮故障灯
storcli /c0/e2/s5 start locate
storcli /c0/e2/s5 stop locate
# 设置全局热备盘
storcli64 /c0/e8/s3 add hotsparedrive
# 删除虚拟驱动器
storcli /c0/v0 delete force
# JBOD 模式切换
storcli /c0 set personality=jbod
# RAID 重建速率
storcli /cx set rebuildrate=60
MegaCLI(旧版)
# 查看物理盘
megacli -PDList -aALL
# 创建 RAID5(物理盘 2,3,4,热备盘 5)
megacli -CfgLdAdd -r5 [1:2,1:3,1:4] WB Direct -Hsp[1:5] -a0
关键指标对比
| 工具 | 测试类型 | 主要关注指标 | 适用场景 |
|---|---|---|---|
| FIO | 综合 I/O 基准 | IOPS, BW (MB/s), 延迟 | 标准存储验收 |
| iozone | 文件系统基准 | 各模式带宽 | 文件系统层测试 |
| dd | 快速 I/O 测试 | 吞吐速度 | 快速验证 |
| smartctl | 硬盘健康监控 | 重映射扇区、温度、通电时间 | 硬盘故障预测 |
| nvme-cli | NVMe 管理 | 温度、磨损、格式化 | NVMe SSD 运维 |
| storcli | RAID 管理 | 虚拟驱动状态、物理盘状态 | RAID 配置与维护 |
| iostat | 实时监控 | r/s, w/s, await, %util | 性能问题定位 |
出链
- cpu-testing — CPU 性能直接影响 I/O 路径的处理速度
- memory-testing — 内存带宽和清理缓存在磁盘测试中的配合使用
FIO 工具详解
FIO — 灵活的 I/O 测试工具
FIO(Flexible I/O Tester)是 Linux 平台上最流行的磁盘 I/O 基准测试工具,由 Jens Axboe(Linux 内核块层维护者)开发。它支持丰富的 I/O 引擎、多种读写模式和详细的性能报告,是评估存储系统性能的首选工具。
安装方法
包管理器安装
# RHEL/CentOS
yum install -y libaio-devel fio
# Ubuntu/Debian
sudo apt install -y fio
# Fedora/RHEL 9+
sudo dnf install -y libaio-devel fio
源码编译安装
当需要最新版本或特定功能时,推荐源码编译:
wget http://brick.kernel.dk/snaps/fio-2.2.5.tar.gz
tar -zxvf fio-2.2.5.tar.gz
cd fio-2.2.5
make
# 若编译报错,修改 os/os-linux.h 增加头文件:#include <sys/sysmacros.h>
make install
# 创建软链接(若安装路径不在 PATH 中)
ln -s /usr/local/bin/ /usr/bin/
fio --version
核心参数详解
| 参数 | 说明 | 示例值 |
|---|---|---|
--name |
测试任务命名 | test |
--filename |
测试目标(块设备或文件) | /dev/sdb |
--rw |
读写模式 | read, write, rw, randread, randwrite, randrw |
--rwmixwrite |
混合模式下写操作占比 | 30(30%写) |
--bs |
单次 I/O 块大小 | 4K, 1024k |
--bsrange |
块大小范围 | 512-4096 |
--size |
每个线程处理的 I/O 总量 | 1G |
--direct |
绕过操作系统缓存(1=启用) | 1 |
--ioengine |
I/O 引擎 | psync, libaio |
--iodepth |
I/O 队列深度 | 32 |
--numjobs |
并发线程数 | 4 |
--group_reporting |
汇总所有线程的测试结果 | — |
--runtime |
测试运行时长 | 60s, 300s |
--ramp_time |
预热时间(不计入统计) | 6 |
I/O 引擎说明
- psync:默认引擎,使用同步
pread/pwrite调用,适合简单测试 - libaio:Linux 原生异步 I/O 引擎,需要
libaio-devel包支持,性能更高,推荐用于高性能存储测试
读写模式(--rw)
| 值 | 含义 |
|---|---|
read |
顺序读 |
write |
顺序写 |
rw |
顺序混合读写 |
randread |
随机读 |
randwrite |
随机写 |
randrw |
随机混合读写 |
典型测试场景
1. 4K 随机读写(数据库场景)
# 4K 随机读
fio -name 4Kr -filename /dev/sdb -bs=4k -numjobs 4 -iodepth=32 \
-direct=1 -ioengine=libaio -runtime=300s -group_reporting -rw=randread
# 4K 随机写
fio -name 4Kw -filename /dev/sdb -bs=4k -numjobs 4 -iodepth=32 \
-direct=1 -ioengine=libaio -runtime=300s -group_reporting -rw=randwrite
2. 1024K 顺序读写(大文件传输场景)
# 1024K 顺序读
fio -name 1024Kr -filename /dev/sdb -bs=1024k -numjobs 4 -iodepth=32 \
-direct=1 -ioengine=libaio -runtime=300s -group_reporting -rw=read
# 1024K 顺序写
fio -name 1024Kw -filename /dev/sdb -bs=1024k -numjobs 4 -iodepth=32 \
-direct=1 -ioengine=libaio -runtime=300s -group_reporting -rw=write
3. 变长块混合读写
# 512B ~ 4K 随机混合读写(写占 30%)
fio -name 512~4096brw -filename=/dev/sdb -bsrange=512-4096 \
-direct=1 -numjobs=4 -iodepth=32 -rw=randrw -rwmixwrite=30 \
-ioengine=libaio -group_reporting -runtime=60s
# 64K ~ 1024K 顺序混合读写(写占 30%)
fio -name 1Mrw -filename=/dev/sdb -bsrange=64k-1024k \
-direct=1 -numjobs=4 -iodepth=4 -rw=rw -rwmixwrite=30 \
-group_reporting -ioengine=libaio -runtime=60s
NVMe 专项测试
NVMe 设备具有更高的 IOPS 和更低的延迟,测试前建议先执行 echo 3 > /proc/sys/vm/drop_caches 清理缓存,并使用 n 前缀的 /dev/nvme*n* 设备路径。
# 获取 NVMe 设备的 WWID(用于唯一标识)
ll /dev/disk/by-id/
# 4K 随机读写测试(NVMe)
fio -name 4Kr -filename /dev/nvme0n1 -bs=4k -numjobs 4 -iodepth=32 \
-direct=1 -ioengine=libaio -runtime=300s -group_reporting -rw=randread \
> nvme-device.4k.randread.out
fio -name 4Kw -filename /dev/nvme0n1 -bs=4k -numjobs 4 -iodepth=32 \
-direct=1 -ioengine=libaio -runtime=300s -group_reporting -rw=randwrite \
> nvme-device.4k.randwrite.out
# 1024K 顺序读写测试(NVMe)
fio -name 1024Kr -filename /dev/nvme0n1 -bs=1024k -numjobs 4 -iodepth=32 \
-direct=1 -ioengine=libaio -runtime=300s -group_reporting -rw=read
fio -name 1024Kw -filename /dev/nvme0n1 -bs=1024k -numjobs 4 -iodepth=32 \
-direct=1 -ioengine=libaio -runtime=300s -group_reporting -rw=write
NVMe 全自动批量测试(fio.nvme.sh)
该脚本自动识别非系统盘的 NVMe 设备,逐个执行完整的读写压力测试,并记录 NVMe SMART 温度数据:
# 执行全盘 NVMe 测试(自动循环 3 轮)
sudo curl http://192.168.1.34/fio.nvme.sh | sh
测试流程:
1. 排除系统盘(通过 df 检测)
2. 对每个非系统 NVMe 设备依次执行:1M 顺序写 → 1M 顺序读 → 4K 随机写 → 4K 随机读
3. 每轮测试后记录 NVMe 温度
4. 生成 CSV 汇总报告(包含 IOPS、带宽、延迟、温度)
多盘并发压力测试
对多块磁盘同时施加压力,模拟 RAID/JBOD 场景。
命令行方式
date > fio.out
fio -name 1024Kr \
-filename=/dev/sda -filename=/dev/sdb -filename=/dev/sdc \
-filename=/dev/sdd -filename=/dev/sde -filename=/dev/sdf \
-bs=1024k -numjobs 4 -iodepth=32 -direct=1 -ioengine=libaio \
-runtime=36000s -group_reporting -rw=read -rwmixwrite=30 \
>> fio.out
date >> fio.out
使用配置文件(fio.conf)
[global]
ioengine=libaio
direct=1
thread=1
norandommap=1
randrepeat=0
ramp_time=6
size=1g
filename=/dev/sdb
filename=/dev/sdc # 可指定多块磁盘
; ...更多盘...
[write1M-seq]
stonewall
group_reporting
bs=1M
rw=write
numjobs=2
iodepth=4
runtime=600
[read1M-seq]
stonewall
group_reporting
bs=1M
rw=read
numjobs=4
iodepth=8
runtime=60
[write4k-rand]
stonewall
group_reporting
bs=4k
rw=randwrite
numjobs=2
iodepth=4
runtime=600
[read4k-rand]
stonewall
group_reporting
bs=4k
rw=randread
numjobs=8
iodepth=32
runtime=60
使用配置文件运行:
fio fio.conf
stonewall指令表示上一个 job 完成后才执行下一个,确保测试间不互相干扰。
结果解读
FIO 输出示例(关键指标):
Jobs: 4 (f=4): [r(4)][100.0%][r=1234MiB/s][r=316k IOPS][eta 00m:00s]
read: IOPS=316k, BW=1234MiB/s (1294MB/s)(1234MiB/1000msec)
slat (nsec): min=142, max=10563, avg=245.77, stdev=78.45
clat (usec): min=112, max=25314, avg=389.12, stdev=120.34
lat (usec): min=113, max=25315, avg=389.36, stdev=120.35
| 指标 | 全称 | 说明 |
|---|---|---|
| IOPS | Input/Output Operations Per Second | 每秒 I/O 操作数,随机读写的关键指标 |
| BW | Bandwidth | 带宽,以 MiB/s 或 MB/s 为单位,顺序读写的关键指标 |
| lat | Latency | I/O 延迟,包含 slat(提交延迟)、clat(完成延迟)、lat(总延迟) |
| slat | Submission Latency | 从提交到内核的延迟 |
| clat | Completion Latency | 从提交到完成的延迟 |
| lat | Total Latency | slat + clat 的总和 |
| avg | Average | 平均延迟值 |
| stdev | Standard Deviation | 延迟标准差,反映延迟稳定性 |
CSV 汇总脚本
for l in $(ls); do
IOPS=$(cat $l | grep "IOPS" | awk '{printf $2}' | cut -d "=" -f 2 | cut -d "," -f 1)
BW=$(cat $l | grep "IOPS" | awk '{printf $4}' | cut -d "(" -f 2 | cut -d ")" -f 1)
lat=$(cat $l | grep "[^a-z]lat.*avg" | awk '{printf $6}' | cut -d "=" -f 2)
echo "$l","$BW","$IOPS","$lat" >> fio.csv
done
相关概念
- disk-storage-testing — 磁盘与存储 I/O 综合测试方法
- Linux 常规操作与优化 — 系统调优(I/O 调度器、缓存策略等)