Linux IOPS 测试:全面指南与实践
在存储性能评估中,IOPS(每秒输入/输出操作数)是衡量磁盘读写能力的关键指标,Linux 系统提供了多种工具和方法来测试 IOPS,帮助用户了解存储设备的真实性能,优化系统配置,本文将详细介绍 IOPS 测试的原理、常用工具、测试步骤及结果分析,为 Linux 用户提供一套完整的测试方案。

IOPS 测试的基本概念
IOPS 反映存储设备在单位时间内处理 I/O 请求的能力,其值受多种因素影响,包括磁盘类型(HDD、SSD、NVMe)、I/O 模型(随机/顺序)、块大小、队列深度以及文件系统类型等,随机 I/O 通常比顺序 I/O 更能体现存储设备的真实性能,尤其是在数据库、虚拟化等高并发场景下,IOPS 测试需模拟实际负载,确保结果具有参考价值。
常用 IOPS 测试工具
Linux 生态中,以下工具被广泛用于 IOPS 测试:
-
fio(Flexible I/O Tester)
fio 是一款功能强大的 I/O 性能测试工具,支持多种 I/O 引擎(如 libaio、io_uring)、访问模式和负载场景,通过灵活的参数配置,fio 可模拟随机读写、混合读写、队列深度变化等复杂场景,是专业测试的首选。 -
dd
dd 是 Linux 内置的简单工具,适用于基础的顺序读写测试,虽然其功能有限,但无需安装,适合快速检查磁盘吞吐量。 -
iozone
iozone 是一款跨平台的文件系统性能测试工具,可生成不同文件大小和记录长度的 I/O 性能报告,适用于文件系统级别的性能评估。 -
sysbench
sysbench 最初用于数据库性能测试,但其磁盘测试模块也可用于 IOPS 测试,支持多线程并发操作,适合模拟高负载场景。
使用 fio 进行 IOPS 测试
fio 是最推荐的测试工具,以下以 fio 为例,介绍详细的测试步骤。
安装 fio
在 Debian/Ubuntu 系统中,可通过以下命令安装:

sudo apt update && sudo apt install fio
在 CentOS/RHEL 系统中,使用:
sudo yum install fio
测试参数说明
fio 的参数众多,以下为常用参数:
--name:测试任务名称。--rw:读写模式,如read(顺序读)、write(顺序写)、randread(随机读)、randwrite(随机写)、rw(混合读写)。--ioengine:I/O 引擎,如libaio(异步 I/O)、io_uring(高性能 I/O,需内核 5.1+)。--bs:块大小(单位:KB),如4k、64k。--iodepth:队列深度,控制并发 I/O 请求数量。--direct:是否绕过系统缓存,1表示直接 I/O。--size:测试文件大小,如1G。--numjobs:并发线程数。--runtime:测试持续时间(单位:秒),--time_based可确保测试运行指定时间。--group_reporting:汇总多线程测试结果。
测试示例
(1)随机读 IOPS 测试(SSD 典型场景)
fio --name=randread-test --ioengine=libaio --rw=randread --bs=4k --iodepth=32 --direct=1 --size=1G --numjobs=1 --runtime=60 --time_based --group_reporting
此测试模拟 4KB 随机读,队列深度为 32,持续 60 秒。
(2)随机写 IOPS 测试
fio --name=randwrite-test --ioengine=libaio --rw=randwrite --bs=4k --iodepth=1 --direct=1 --size=1G --numjobs=1 --runtime=60 --time_based --group_reporting
队列深度设为 1,适用于部分 SSD 的优化场景。
(3)混合读写 IOPS 测试(70% 读,30% 写)
fio --name=rw-mix-test --ioengine=io_uring --rw=randrw --rwmixread=70 --bs=4k --iodepth=16 --direct=1 --size=1G --numjobs=1 --runtime=60 --time_based --group_reporting
使用 io_uring 引擎提升性能,适合现代 NVMe SSD。

结果分析
fio 的测试结果会输出以下关键指标:
read/write:IOPS 值(如read: IOPS=85.2k)。bw:吞吐量(如bw=331MiB/s)。lat:延迟(如lat_usec=100.00,单位微秒)。clat:完成时间延迟(包含设备处理时间)。
通过对比不同参数下的 IOPS 和延迟,可评估存储设备的性能瓶颈,高队列深度下 IOPS 未提升但延迟增加,可能表明设备已达到性能极限。
其他工具的快速测试
-
使用 dd 测试顺序读写
# 顺序写测试 dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct # 顺序读测试 dd if=testfile of=/dev/null bs=1G iflag=direct
通过
time命令结合,可计算吞吐量(如GB/s),但无法直接获取 IOPS。 -
使用 sysbench 测试
sysbench diskio --io-mode=async --file-total-size=1G --file-test-mode=rndrw --file-block-size=4k --file-io-mode=sync --file-num=64 --time=60 run
适合需要多线程并发测试的场景。
测试注意事项
- 隔离测试环境:避免其他进程干扰 I/O 负载,关闭非必要服务。
- 确保磁盘空间充足:测试文件大小需小于目标磁盘可用空间。
- 多次取平均值:单次测试可能存在波动,建议多次测试后取平均值。
- 考虑文件系统影响:ext4、XFS 等文件系统可能影响性能,测试时可直接裸设备或指定文件系统参数。
- 硬件监控:使用
iostat -xmt 1实时监控磁盘利用率、等待时间等指标,辅助分析。
IOPS 测试是评估 Linux 存储性能的重要手段,通过 fio 等工具可全面了解设备的读写能力,在实际测试中,需根据应用场景选择合适的测试参数(如块大小、队列深度),并结合延迟、吞吐量等指标综合分析,合理的测试不仅能帮助用户选择合适的存储硬件,还能优化系统配置,提升整体性能,无论是数据库服务器、虚拟化平台还是高性能计算场景,科学的 IOPS 测试都是确保系统稳定运行的关键步骤。


















