当前位置: 首页 > news >正文

Linux基础——IOPS计算方法及IO性能测试

一、fio压测脚本及结果

[root@sysmt ~]# fio --name=writetest \
>     --filename=/root/testfile \
>     --size=1G \
>     --bs=4k \
>     --rw=write \
>     --direct=1
writetest: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.7
Starting 1 process
writetest: Laying out IO file (1 file / 1024MiB)
Jobs: 1 (f=1): [W(1)][100.0%][r=0KiB/s,w=7495KiB/s][r=0,w=1873 IOPS][eta 00m:00s]
writetest: (groupid=0, jobs=1): err= 0: pid=3198: Wed Feb 11 15:17:24 2026write: IOPS=1814, BW=7259KiB/s (7434kB/s)(1024MiB/144445msec)clat (usec): min=212, max=10428, avg=546.43, stdev=341.82lat (usec): min=212, max=10429, avg=547.11, stdev=342.11clat percentiles (usec):|  1.00th=[  243],  5.00th=[  262], 10.00th=[  277], 20.00th=[  302],| 30.00th=[  334], 40.00th=[  383], 50.00th=[  445], 60.00th=[  515],| 70.00th=[  594], 80.00th=[  701], 90.00th=[  947], 95.00th=[ 1270],| 99.00th=[ 1827], 99.50th=[ 2024], 99.90th=[ 2540], 99.95th=[ 2802],| 99.99th=[ 4424]bw (  KiB/s): min= 4256, max= 8472, per=99.91%, avg=7252.52, stdev=766.31, samples=288iops        : min= 1064, max= 2118, avg=1813.00, stdev=191.62, samples=288lat (usec)   : 250=2.20%, 500=55.81%, 750=25.10%, 1000=8.03%lat (msec)   : 2=8.31%, 4=0.54%, 10=0.01%, 20=0.01%cpu          : usr=5.23%, sys=37.06%, ctx=257949, majf=0, minf=11IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%issued rwts: total=0,262144,0,0 short=0,0,0,0 dropped=0,0,0,0latency   : target=0, window=0, percentile=100.00%, depth=1Run status group 0 (all jobs):WRITE: bw=7259KiB/s (7434kB/s), 7259KiB/s-7259KiB/s (7434kB/s-7434kB/s), io=1024MiB (1074MB), run=144445-144445msecDisk stats (read/write):dm-0: ios=0/262078, merge=0/0, ticks=0/109905, in_queue=109905, util=100.00%, aggrios=0/262186, aggrmerge=0/10, aggrti                                                                                    cks=0/120727, aggrin_queue=18755, aggrutil=100.00%

二、IOPS计算方法


IOPS = Input/Output Operations Per Second
= 每秒输入/输出操作次数

吞吐量 (Throughput) = IOPS × 块大小 (Block Size)

示例:
- 如果 IOPS = 1000,块大小 = 4KB
- 吞吐量 = 1000 × 4KB = 4000 KB/s = 4 MB/s

测试结果:write: IOPS=1814, BW=7259KiB/s (7434kB/s)(1024MiB/144445msec)

bw=7259KB/s bs(单块大小)
=4KB
bw/bs=7259/4 ≈ 1814 IOPS

三、IO关键影响因素

┌─────────────────────────────────────────┐
│           IOPS 决定因素                  │
├─────────────────────────────────────────┤
│  1. 存储介质类型                         │
│     - SSD (SATA): 5,000-50,000 IOPS     │
│     - SSD (NVMe): 100,000-500,000 IOPS  │
│     - HDD: 50-200 IOPS                  │
├─────────────────────────────────────────┤
│  2. 访问模式                             │
│     - 顺序 (Sequential): 高吞吐量,低 IOPS │
│     - 随机 (Random): 低吞吐量,高 IOPS需求  │
├─────────────────────────────────────────┤
│  3. 块大小 (Block Size)                  │
│     - 小块 (4K): 考验 IOPS 能力           │
│     - 大块 (1M): 考验吞吐量能力            │
├─────────────────────────────────────────┤
│  4. I/O 队列深度 (Queue Depth)            │
│     - qd=1:  同步,低 IOPS                │
│     - qd=32: 并发,高 IOPS                │
├─────────────────────────────────────────┤
│  5. 读写比例                              │
│     - 纯读 / 纯写 / 混合读写               │
└─────────────────────────────────────────┘

四、如何测试真实IO能力

1、测试脚本:提高队列深度
[root@sysmt fio_test]# cat fio.sh
#!/bin/bash
# test_libaio_scaling.sh - libaio 引擎队列深度扩展测试for qd in 1 4 8 16 32 64 128 256; doecho ""echo "=========================================="echo "Queue Depth: $qd (libaio)"echo "=========================================="fio --name=libaio_qd${qd} \--filename=/root/fio_test/testfile \--size=1G \--bs=4k \--rw=randwrite \--direct=1 \--ioengine=libaio \--iodepth=${qd} \--runtime=30 \--time_based \--group_reporting \--output=/root/fio_test/fio_libaio_qd${qd}.log# 提取关键指标echo "--- 关键指标 ---"grep "IOPS=" /root/fio_test/fio_libaio_qd${qd}.log | tail -1grep "clat (usec): min=" /root/fio_test/fio_libaio_qd${qd}.log | tail -1grep "util=" /root/fio_test/fio_libaio_qd${qd}.log | tail -1rm -f /root/fio_test/testfilesleep 3
doneecho ""
echo "=========================================="
echo "汇总结果"
echo "=========================================="
for qd in 1 4 8 16 32 64 128 256; doecho -n "QD=$qd: "grep "IOPS=" /root/fio_test/fio_libaio_qd${qd}.log | tail -1 | awk -F'[=,]' '{print "IOPS=" $2}'
done

脚本中“\”后不能有空格,会触发类似报错:
fio: unable to open ' ' job file

image

2、测试结果:

[root@sysmt fio_test]# sh fio.sh

==========================================
Queue Depth: 1 (libaio)
==========================================
--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=3963KiB/s][r=0,w=990 IOPS][eta 00m:00s]
write: IOPS=877, BW=3509KiB/s (3593kB/s)(103MiB/30001msec)
clat (usec): min=19, max=11543, avg=911.80, stdev=595.33
sda: ios=0/26358, merge=0/5, ticks=0/25095, in_queue=13288, util=99.66%

==========================================
Queue Depth: 4 (libaio)
==========================================
--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=14.0MiB/s][r=0,w=3827 IOPS][eta 00m:00s]
write: IOPS=2606, BW=10.2MiB/s (10.7MB/s)(305MiB/30001msec)
clat (usec): min=193, max=85405, avg=1283.97, stdev=1006.26
sda: ios=0/78342, merge=0/21, ticks=0/71219, in_queue=32876, util=96.46%

==========================================
Queue Depth: 8 (libaio)
==========================================
--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=17.0MiB/s][r=0,w=4354 IOPS][eta 00m:00s]
write: IOPS=3841, BW=15.0MiB/s (15.7MB/s)(450MiB/30001msec)
clat (usec): min=240, max=52137, avg=1848.26, stdev=1077.67
sda: ios=0/115384, merge=0/8, ticks=0/104517, in_queue=47490, util=93.63%

==========================================
Queue Depth: 16 (libaio)
==========================================
--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=12.0MiB/s][r=0,w=3324 IOPS][eta 00m:00s]
write: IOPS=3735, BW=14.6MiB/s (15.3MB/s)(438MiB/30001msec)
clat (usec): min=230, max=61721, avg=4024.57, stdev=2091.76
sda: ios=0/116971, merge=0/1178, ticks=0/145392, in_queue=87932, util=89.58%

==========================================
Queue Depth: 32 (libaio)
==========================================
--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=12.5MiB/s][r=0,w=3193 IOPS][eta 00m:00s]
write: IOPS=3307, BW=12.9MiB/s (13.5MB/s)(388MiB/30001msec)
clat (usec): min=550, max=82181, avg=9377.25, stdev=4683.75
sda: ios=0/114356, merge=0/11157, ticks=0/166482, in_queue=108293, util=89.80%

==========================================
Queue Depth: 64 (libaio)
==========================================
--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=14.1MiB/s][r=0,w=3611 IOPS][eta 00m:00s]
write: IOPS=3863, BW=15.1MiB/s (15.8MB/s)(453MiB/30001msec)
clat (usec): min=323, max=67976, avg=16295.22, stdev=6576.48
sda: ios=0/136690, merge=0/16170, ticks=0/195029, in_queue=127382, util=91.11%

==========================================
Queue Depth: 128 (libaio)
==========================================
--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=15.3MiB/s][r=0,w=3921 IOPS][eta 00m:00s]
write: IOPS=3928, BW=15.3MiB/s (16.1MB/s)(460MiB/30002msec)
clat (usec): min=500, max=103954, avg=32291.48, stdev=10360.14
sda: ios=0/141620, merge=0/16742, ticks=0/255490, in_queue=185625, util=90.83%

==========================================
Queue Depth: 256 (libaio)
==========================================
--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=13.1MiB/s][r=0,w=3349 IOPS][eta 00m:00s]
write: IOPS=3769, BW=14.7MiB/s (15.4MB/s)(442MiB/30001msec)
clat (usec): min=332, max=221879, avg=67575.00, stdev=19432.98
sda: ios=0/137061, merge=0/16356, ticks=0/298153, in_queue=230416, util=90.39%

==========================================
汇总结果
==========================================
QD=1: IOPS=877
QD=4: IOPS=2606
QD=8: IOPS=3841
QD=16: IOPS=3735
QD=32: IOPS=3307
QD=64: IOPS=3863
QD=128: IOPS=3928
QD=256: IOPS=3769

3、分析测试结果

Queue Depth: 8 (libaio)处于最优队列

clat (usec): min=240, max=52137, avg=1848.26, stdev=1077.67

│    │        │      │         │            └─ 标准差(波动程度)

│    │        │      │         └─ 平均值(我说的 1.8ms)

│    │        │      └─ 最大时延(52ms,异常值)

│    │        └─ 最小时延(240μs,最佳情况)

│    └─ 单位:微秒(microsecond)

 

└─ completion latency:从提交到完成的总时延

常用IO时延指标clat:

| 指标     | 全称                 | 含义   | 计算公式        |

| ------ | ------------------ | ---- | ----------- |

| `slat` | submission latency | 提交时延 | 发起 → 进入队列   |

| `clat` | completion latency | 完成时延 | 进入队列 → 完成   |

 

| `lat`  | total latency      | 总时延  | slat + clat |

 

关键指标:

IOPS=3841,BW=15.0MiB/s,avg=1848.26μs,util=93.63%

fio报告值:

QD=8:  avg=1848.26 μs = 1.848 ms ≈ 1.8ms ✓

QD=16: avg=4024.57 μs = 4.025 ms ≈ 4.0ms ✓

用 Little's Law 验证(计算队列深度):

Little's Law: 系统中平均请求数 = 到达率 × 平均时延

              N = λ × W

在稳态下:

- 平均在途请求数 ≈ 实际队列深度(effective QD)

- 到达率 = IOPS

- 平均时延 = ?

反推验证:

QD=8:  实际并发度 = IOPS × 时延 = 3841 × 0.001848 ≈ 7.1 ≈ QD

QD=16: 实际并发度 = 3735 × 0.004025 ≈ 15.0 ≈ QD

队列深度16比队列深度8开销大2.18倍,存在明显劣势;

时延开销增长率:16队列时延翻倍

 

| QD | 平均时延 (μs) | 换算 (ms)     | 相对 QD=8   |

| -- | --------- | ----------- | --------- |

| 8  | 1,848     | **1.85 ms** | 1.0× (基准) |

| 16 | 4,025     | **4.03 ms** | **2.18×** |

| 32 | 9,377     | **9.38 ms** | **5.07×** |

QD=8 → QD=16:  (4025 - 1848) / 1848 = 2177 / 1848 = 117.8% 增长 ≈ 翻倍

正向并发队列对比(QD=8 → QD=16):

- QD=8:  时延 1.8ms, IOPS 3,841

- QD=16: 时延应该保持 ~1.8ms, IOPS 应该达到 ~7,600

实际结果:

- QD=16: 时延 4.0ms(+118%), IOPS 3,735(-3%)

这说明:

┌─────────────────────────────────────────┐

│  系统无法并行处理 16 个请求              │

│  请求在队列中排队等待,导致时延飙升        │

│  实际并发度被限制在 ~8 左右               │

 

└─────────────────────────────────────────┘

 

[root@sysmt fio_test]# sh fio.sh
==========================================Queue Depth: 1 (libaio)==========================================--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=3963KiB/s][r=0,w=990 IOPS][eta 00m:00s]  write: IOPS=877, BW=3509KiB/s (3593kB/s)(103MiB/30001msec)    clat (usec): min=19, max=11543, avg=911.80, stdev=595.33  sda: ios=0/26358, merge=0/5, ticks=0/25095, in_queue=13288, util=99.66%
==========================================Queue Depth: 4 (libaio)==========================================--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=14.0MiB/s][r=0,w=3827 IOPS][eta 00m:00s]  write: IOPS=2606, BW=10.2MiB/s (10.7MB/s)(305MiB/30001msec)    clat (usec): min=193, max=85405, avg=1283.97, stdev=1006.26  sda: ios=0/78342, merge=0/21, ticks=0/71219, in_queue=32876, util=96.46%
==========================================Queue Depth: 8 (libaio)==========================================--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=17.0MiB/s][r=0,w=4354 IOPS][eta 00m:00s]  write: IOPS=3841, BW=15.0MiB/s (15.7MB/s)(450MiB/30001msec)    clat (usec): min=240, max=52137, avg=1848.26, stdev=1077.67  sda: ios=0/115384, merge=0/8, ticks=0/104517, in_queue=47490, util=93.63%
==========================================Queue Depth: 16 (libaio)==========================================--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=12.0MiB/s][r=0,w=3324 IOPS][eta 00m:00s]  write: IOPS=3735, BW=14.6MiB/s (15.3MB/s)(438MiB/30001msec)    clat (usec): min=230, max=61721, avg=4024.57, stdev=2091.76  sda: ios=0/116971, merge=0/1178, ticks=0/145392, in_queue=87932, util=89.58%
==========================================Queue Depth: 32 (libaio)==========================================--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=12.5MiB/s][r=0,w=3193 IOPS][eta 00m:00s]  write: IOPS=3307, BW=12.9MiB/s (13.5MB/s)(388MiB/30001msec)    clat (usec): min=550, max=82181, avg=9377.25, stdev=4683.75  sda: ios=0/114356, merge=0/11157, ticks=0/166482, in_queue=108293, util=89.80%
==========================================Queue Depth: 64 (libaio)==========================================--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=14.1MiB/s][r=0,w=3611 IOPS][eta 00m:00s]  write: IOPS=3863, BW=15.1MiB/s (15.8MB/s)(453MiB/30001msec)    clat (usec): min=323, max=67976, avg=16295.22, stdev=6576.48  sda: ios=0/136690, merge=0/16170, ticks=0/195029, in_queue=127382, util=91.11%
==========================================Queue Depth: 128 (libaio)==========================================--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=15.3MiB/s][r=0,w=3921 IOPS][eta 00m:00s]  write: IOPS=3928, BW=15.3MiB/s (16.1MB/s)(460MiB/30002msec)    clat (usec): min=500, max=103954, avg=32291.48, stdev=10360.14  sda: ios=0/141620, merge=0/16742, ticks=0/255490, in_queue=185625, util=90.83%
==========================================Queue Depth: 256 (libaio)==========================================--- 关键指标 ---w(1)][100.0%][r=0KiB/s,w=13.1MiB/s][r=0,w=3349 IOPS][eta 00m:00s]  write: IOPS=3769, BW=14.7MiB/s (15.4MB/s)(442MiB/30001msec)    clat (usec): min=332, max=221879, avg=67575.00, stdev=19432.98  sda: ios=0/137061, merge=0/16356, ticks=0/298153, in_queue=230416, util=90.39%
==========================================汇总结果==========================================QD=1: IOPS=877QD=4: IOPS=2606QD=8: IOPS=3841QD=16: IOPS=3735QD=32: IOPS=3307QD=64: IOPS=3863QD=128: IOPS=3928QD=256: IOPS=3769
 
http://www.jsqmd.com/news/370824/

相关文章:

  • 【毕业设计】基于springboot的乡村书屋数字化资源平台的设计与实现(源码+文档+远程调试,全bao定制等)
  • Tag-1770804292922
  • 【毕业设计】基于springboot的面向新工科课程线上教学辅助平台(源码+文档+远程调试,全bao定制等)
  • 土耳其移民之旅:专业的土耳其移民中介机构让我从签证烦恼到欧洲商务自由 - 行业观察日记
  • 2026年靠谱的耐磨铸石板/玄武岩铸石板口碑排行精选供应商推荐 - 品牌宣传支持者
  • 电子签章在数字化进程中的占比重吗?
  • 2026年重庆旅游包车权威榜单 口碑靠谱品牌全景解析 适配各类出行场景 - 深度智识库
  • 2026年口碑好的冰凉记忆棉枕/深睡记忆棉枕公司实力参考哪家强(可靠) - 品牌宣传支持者
  • 【计算机毕业设计案例】 基于SpringBoot的云端智慧教学辅助系统基于springboot的面向新工科课程线上教学辅助平台(程序+文档+讲解+定制)
  • 指标平台选型的关键——无宽表下的查询性能如何保障?
  • 【计算机毕业设计案例】基于springboot的城市人才招聘系统基于JAVA的人才招聘系统的设计与实现(程序+文档+讲解+定制)
  • MCP、ACP、A2A 到底怎么分层?一篇讲透 AI 工程化三件套
  • 【计算机毕业设计案例】基于springboot+vue的乡村书屋数字化资源平台基于springboot的乡村书屋数字化资源平台的设计与实现(程序+文档+讲解+定制)
  • 详细介绍:Java 集成 AI 大模型最佳实践:从零到一打造智能化后端
  • 自动驾驶机动车交通事故民事责任问题研究
  • 基于PLC双速载货电梯控制系统设计
  • onnxruntime 编译
  • Claude Cowork Windows版深度体验:20个文件重构只需1分钟
  • Java毕设选题推荐:基于springboot的网上人才招聘系统的的设计与实现城市人才招聘系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026年热门的石粉选粉机/机制砂选粉机哪家专业制造厂家实力参考 - 品牌宣传支持者
  • 软件神器 --- win镜像 之 msdn我告诉你
  • 2026年口碑好的AB枕芯/专业AB枕芯哪家便宜源头直供参考(真实参考) - 品牌宣传支持者
  • 2026 最新出海传播服务商 TOP5 评测!GEO+多领域适配权威榜单发布,赋能企业全球化布局 - 品牌推荐2026
  • 理性看待AI编程辅助:实操经验与能力边界复盘
  • 2026年质量好的SBRTBR导轨/激光导轨哪家强生产厂家实力参考 - 品牌宣传支持者
  • 情绪解码 A 股:新生代投顾王寓以实战方法论破局散户交易困局 - 速递信息
  • 2026 最新公共事务服务商/机构 TOP5 评测!权威榜单发布,赋能企业政企关系与品牌传播新生态 - 品牌推荐2026
  • 防爆、节能、高精度:2026年五大精密空调主力厂商解决方案大比拼 - 深度智识库
  • python 如何对布尔值取反
  • 精密空调厂家Top5测评:谁是数据中心与特种环境的“控温之王”? - 深度智识库