要压测云端高性能云盘iops上限,关键在于用fio精准复现真实业务io行为,而非单纯追求标称峰值;需按数据库(4k随机读写)、日志(128k–1m顺序写)、备份(1m顺序读写)等场景定制bs、rw、iodepth等参数,并满足云盘容量、云主机vcpu≥96、4kib对齐、裸盘测试等硬性约束,同时结合iostat、vmstat监控验证瓶颈。

要压测云端高性能云盘(如天翼云XSSD、腾讯云CBS等)的IOPS上限,关键不是“跑满标称值”,而是用fio精准复现真实业务IO行为——让测试负载与业务请求在块大小、访问模式、并发深度、缓存策略上高度一致。否则测出来的只是设备理论峰值,不是系统在实际负载下的稳定IOPS能力。
匹配业务特征选对fio参数组合
不同业务对磁盘的压力模型差异极大,必须按场景定制参数:
-
数据库类(OLTP):典型为4K随机读写,高并发、低延迟敏感。应设
bs=4k、rw=randrw、rwmixread=70、iodepth=32、numjobs=4~8,并启用direct=1绕过page cache;size建议 ≥ 2×主机内存,避免缓存干扰。 -
日志/消息队列类:以128K–1M顺序追加写为主,关注吞吐稳定性。用
bs=128k、rw=write、iodepth=1(模拟单线程刷盘)、ioengine=sync或libaio,禁用buffer确保落盘真实路径。 -
备份/归档/ETL类:大块顺序读写,强调持续带宽。推荐
bs=1m、rw=readwrite、iodepth=4~8、numjobs=1~2,配合time_based和足够长的runtime(如600秒)观察稳态表现。
云盘特有约束必须提前满足
高性能云盘(如XSSD-3达100万IOPS)的规格释放依赖底层配置和宿主资源,仅调fio参数远远不够:
- 云盘容量与IOPS绑定:XSSD-3需配置≥2000GB并手动开启“预配置IOPS”至最大值,或直接选≥19940GB容量自动解锁100万IOPS;
- 云主机规格必须匹配:实测要求vCPU≥96核(如c8/m8实例),否则计算层成为瓶颈,fio再强也压不出设备真实能力;
- 挂载前确认4KiB对齐:执行
sudo fdisk -lu /dev/vdb,Start值必须能被8整除,否则随机IO性能下降可达30%以上; - 测试目标必须是独立数据盘:严禁在系统盘或挂载了业务数据的分区上运行fio,避免误删或IO干扰。
压测过程必须同步监控与验证
fio输出的IOPS数字只是结果,瓶颈可能在路径任意一环。务必边压边看:
- 用
iostat -x 1观察%util(接近100%说明设备饱和)、avgqu-sz(长期>1表明队列积压)、r_await/w_await(p95延迟是否突增); - 用
vmstat 1检查wa(IO等待占比)是否持续过高,同时确认si/so(swap活动)为0,排除内存不足导致的假性IO压力; - fio报告中重点关注
iops、bw、clat percentiles(如clat_p99),而非平均延迟——尾延迟才是业务超时的主因; - 对NVMe或XSSD类设备,建议优先使用
ioengine=io_uring(内核5.1+)替代libaio,可降低slat开销,更贴近真实应用路径。
避免常见误导性操作
很多“压不出标称IOPS”的问题源于测试方法失当:
- 不用
direct=1:默认走page cache,fio测的是内存速度,不是磁盘真实IOPS; -
size过小(如1G):SSD易命中FTL缓存或OP空间,测出的是瞬时峰值,非稳态性能; - 混用
numjobs和iodepth却不校验总并发:例如numjobs=4 × iodepth=32 = 128队列深度,远超某些云盘驱动支持上限,反而触发限流; - 忽略预热:尤其随机写前未执行全盘覆盖写(如先用
rw=randwrite跑5分钟),SSD处于fresh状态时性能虚高,无法反映长期运行表现。











