性能·磁盘 / 命令文档

FIO I/O 基准测试

$ fio 12 个章节 Linux 命令详解

概述

Linux系统存储性能测试 - 运维工程师必备

概述与核心要点 关键参数详解 测试场景示例

FIO 概述与核心要点

什么是 FIO?

FIO (Flexible I/O Tester) 是Linux下最强大、最灵活的I/O性能测试工具,支持多种I/O模式、访问模式和负载模式,是存储系统性能评估的行业标准。

核心优势

• 支持同步/异步I/O• 多种I/O引擎支持• 灵活的负载生成• 详细的性能指标• 可重复的测试场景

适用场景

• 存储设备性能评估• 系统容量规划• 性能基线建立• 故障排查分析• 配置优化验证

FIO 工作原理

FIO通过创建多个工作进程/线程,每个工作单元按照指定的I/O模式对目标设备进行读写操作,并收集详细的性能统计数据。其架构设计允许精确模拟各种真实世界的I/O负载模式。

测试类型分类

顺序I/O测试

测试连续读写性能,适用于评估大文件传输、数据备份等场景的性能表现。

随机I/O测试

测试随机读写性能,模拟数据库、虚拟化等典型企业应用的I/O特征。

混合负载测试

同时进行读写操作,更真实地反映生产环境中的复杂I/O模式。

重要提醒: FIO测试会对目标设备进行真实的I/O操作,在生产环境使用前务必做好数据备份,建议在专门的测试环境中进行性能评估。

基础配置参数

参数说明示例值推荐用途
filename测试目标文件或设备/dev/sdb, /tmp/testfile指定测试对象
size测试文件大小1G, 10G, 100G控制测试数据量
bs块大小(Block Size)4k, 64k, 1M模拟不同I/O粒度
rw读写模式read, write, randread, randwrite定义I/O访问模式
ioengineI/O引擎libaio, sync, psync选择I/O实现方式

性能控制参数

参数说明示例值影响
iodepthI/O队列深度1, 32, 64控制并发I/O数量
numjobs并发作业数量1, 4, 8增加测试并行度
runtime测试运行时间60, 300, 600控制测试持续时间
ramp_time预热时间10, 30, 60排除系统预热影响
direct绕过系统缓存0, 1测试真实设备性能

高级配置参数

rwmixread

混合负载中读操作的百分比。例如 rwmixread=70 表示70%读,30%写。

sync

每次I/O后是否同步。sync=1 确保数据真实写入存储设备。

group_reporting

将多个job的结果合并报告,便于分析整体性能。

norandommap

禁用随机访问映射,避免内存开销影响小文件随机测试。

对于SSD测试,建议使用 direct=1 绕过缓存

队列深度从1开始测试,逐步增加到32或64

运行时间至少60秒以获得稳定结果

使用 ramp_time 排除系统预热对结果的影响

1. 顺序读取性能测试

评估存储设备的连续读取能力,适用于大文件传输场景:

fio --name=sequential-read --filename=/dev/vda --rw=read  --bs=1M  --size=4G  --numjobs=1  --iodepth=32  --ioengine=libaio  --direct=1  --runtime=60  --time_based  --group_reporting

2. 随机读写混合测试

模拟数据库等应用的典型I/O模式:

fio --name=random-mixed \
    --filename=/dev/sdb \
    --rw=randrw \
    --rwmixread=70 \
    --bs=4k \
    --size=2G \
    --numjobs=4 \
    --iodepth=16 \
    --ioengine=libaio \
    --direct=1 \
    --runtime=300 \
    --time_based \
    --ramp_time=30 \
    --group_reporting

3. IOPS压力测试

测试设备在小块随机I/O下的最大IOPS能力:

fio --name=iops-test \
    --filename=/dev/sdb \
    --rw=randread \
    --bs=4k \
    --size=1G \
    --numjobs=8 \
    --iodepth=64 \
    --ioengine=libaio \
    --direct=1 \
    --runtime=120 \
    --time_based \
    --norandommap \
    --group_reporting

4. 延迟敏感性测试

评估低并发下的I/O延迟特性:

fio --name=latency-test \
    --filename=/dev/sdb \
    --rw=randread \
    --bs=4k \
    --size=1G \
    --numjobs=1 \
    --iodepth=1 \
    --ioengine=sync \
    --direct=1 \
    --runtime=60 \
    --time_based

5. 文件系统测试

测试文件系统而非原始设备的性能:

fio --name=filesystem-test \
    --directory=/mnt/test \
    --rw=randrw \
    --rwmixread=60 \
    --bs=64k \
    --size=500M \
    --numjobs=4 \
    --ioengine=libaio \
    --iodepth=16 \
    --runtime=180 \
    --time_based \
    --create_on_open=1 \
    --group_reporting
安全提醒: 测试原始设备前务必确认设备路径正确 生产环境测试建议使用只读模式或专用测试分区 大容量测试前确保磁盘空间充足 长时间测试可能对SSD造成磨损,需权衡测试需求

同分类 · 其他命令文档