一、测试概要
- 测试命令:
fio --name=rand_read --filename=/test.big --rw=randread --bs=4k --iodepth=32 --numjobs=4 --runtime=60 --ioengine=libaio --direct=1 - 核心参数:
- 测试类型:4K随机读
- 并发配置:4线程×32队列深度(总计128并发)
- 数据源:文件
/test.big(非裸设备) - I/O模式:直接I/O(绕过缓存)
二、核心性能指标
1. 全局性能(Group 0汇总)
| 指标 | 数值 | 单位 | 说明 |
|---|---|---|---|
| 总带宽 | 591 MiB/s | - | 约620MB/s |
| 单线程带宽范围 | 148-161 MiB/s | - | 各线程负载均衡 |
| 总数据量 | 8192 MiB (8GB) | - | 4线程合计读取量 |
| 实际运行时间 | 12.7-13.8秒 | - | 未达60秒(数据提前读完) |
2. 单线程性能明细(典型值)
| 指标 | Thread1 | Thread2 | Thread3 | Thread4 |
|---|---|---|---|---|
| IOPS | 39.0k | 37.8k | 38.1k | 41.2k |
| 带宽 | 156 MiB/s | 148 MiB/s | 149 MiB/s | 161 MiB/s |
| 平均延迟(clat) | 724μs | 774μs | 768μs | 699μs |
| CPU利用率 | 89.26% | 69.20% | 72.50% | 94.75% |
| 上下文切换 | 61k | 222k | 194k | 26k |
三、延迟深度解析(关键性能瓶颈)
1. 延迟分布特征
| **百分位** | **Thread1** | **Thread2** | **Thread3** | **Thread4** | |------------|------------|-------------|------------|-------------| | 50% | 725μs | 775μs | 766μs | 676μs | | 90% | 979μs | 1057μs | 1057μs | 955μs | | 99% | 1123μs | 1205μs | 1188μs | 1106μs | | 99.9% | 1450μs | 2671μs | 2147μs | 1205μs | | 99.99% | 3326μs | 3851μs | 3785μs | 1369μs |
2. 延迟热点分析
- 长尾延迟显著:99.9%以上请求延迟是平均值的2-4倍
- Thread2异常值:99.9%延迟达2671μs(其他线程≤2147μs)
- 极端延迟溯源:Thread3出现4.49ms超时(需排查磁盘响应)
四、硬件瓶颈定位
1. 磁盘负载特征
| 指标 | 数值 | 健康阈值 | 状态 |
|---|---|---|---|
| 设备利用率(util) | 92.45% | <70% | ⚠️过载 |
| I/O队列深度 | 32持续饱和 | <设备队列深度 | ✅正常 |
| 合并请求(aggrmerge) | 0 | - | ✅无合并 |
2. 关键瓶颈诊断
磁盘过载:
- 92.45%利用率远超健康阈值(70%)
- 高util值导致延迟飙升(尤其99.9%百分位)
CPU瓶颈:
- Thread4内核态CPU占用91.78%(sys占比过高)
- 上下文切换量差异大(Thread2达222k次)
调度延迟:
- 提交延迟(slat)范围2-19μs(正常)
- 完成延迟(clat)主导总延迟(设备响应慢)
五、优化建议
1. 紧急优化措施
# 降低队列深度缓解磁盘压力 fio --iodepth=16 --numjobs=4 ... # 总并发降至64 # 限制带宽避免过载 fio --rate=500m ... # 限制500MB/s总带宽
2. 深度调优方向
存储层:
- 检查磁盘健康度:
smartctl -a /dev/sda - 升级NVMe SSD(当前SATA盘? 极限600MB/s)
- 检查磁盘健康度:
系统层:
# 调整I/O调度器 echo kyber > /sys/block/sda/queue/scheduler # 增大页缓存 sysctl -w vm.dirty_ratio=20测试方法:
- 增加
--time_based确保60秒持续压力 - 添加
--write_lat_log生成延迟热力图
- 增加
六、性能对比基准
| 磁盘类型 | 预期4K随机读IOPS | 本测试结果 |
|---|---|---|
| SATA SSD | 80k-100k | 151k |
| NVMe SSD | 500k+ | - |
| Optane | 1M+ | - |
📌 当前151k IOPS已达SATA SSD极限,需升级硬件突破瓶颈
七、异常点深度追踪
Thread2高延迟溯源:
- 对比相同场景下:
- Thread2:99.9%延迟=2671μs
- Thread4:99.9%延迟=1205μs
- 可能原因:跨NUMA节点访问/IRQ亲和性问题
- 对比相同场景下:
解决方案:
# 绑定CPU核 taskset -c 0-3 fio ... # 设置IRQ亲和性 echo 0f > /proc/irq/*/smp_affinity




