腾讯云CVM的4K随机读写IOPS用fio怎么测才准确?

来源:R语言教程作者:宋承宪头衔:网络博主
导读:本期聚焦于宋承宪创作的《腾讯云CVM的4K随机读写IOPS用fio怎么测才准确?》,敬请观看详情。云盘规格表里标注的随机读写IOPS,在真实测试中往往需要精确的参数才能接近。如果直接用默认fio命令压测腾讯云CVM,iodepth偏小、没有设置direct模式,或者测试文件落在文件系统上,都会让结果明显偏低。本文围绕一台标准型CVM实例展开4K随机读写评测,使用裸盘加libaio引擎,分别调节iodepth和numjobs,记录随机读与随机写的IOPS、平均延迟。测试前对云盘做了预条件处理,避免SSD初始状态高估性能。实测数据表明,随机读在队列深度32左右接近标称值,随机写略低于标称,延迟随队列深度增加而上升。文中给出了可直接复用的fio命令和结果表格,供数据库、消息队列等对4K随机性能敏感的业务做容量规划参考。

评估腾讯云CVM云盘性能时,4K随机读写IOPS是最能反映数据库、消息中间件等小IO负载能力的指标。云盘厂商标注的最大IOPS通常基于特定队列深度、块大小和测试模型,如果照搬默认命令,得到的结果可能和规格表相差很远。本文在一台腾讯云标准型CVM实例上,使用fio对增强型SSD云盘进行完整的4K随机读写基准测试,重点关注不同iodepth与numjobs组合下的性能变化,并给出可直接复用的测试流程。

腾讯云CVM的4K随机读写IOPS用fio怎么测才准确?

测试环境与预条件

本次测试使用的腾讯云CVM实例为标准型S5,配置为4核8GB,挂载一块100GB增强型SSD云盘。该容量云盘在官方规格表中标注的最大随机读IOPS为26000,最大随机写IOPS为12000。操作系统为TencentOS Server 3.1,内核版本5.4.119,fio版本为3.25。为了避免云盘上的文件系统缓存干扰结果,测试直接针对裸盘设备/dev/vdb进行,该盘未存放任何业务数据。

新创建的SSD云盘或长时间闲置的盘,首次随机写测试容易因为空闲块充足而得到虚高的数值。为了模拟真实业务长期运行后的状态,测试前需要用fio对云盘进行预条件处理,顺序写满整盘两轮。预条件命令如下:

fio --name=precondition --filename=/dev/vdb --ioengine=libaio --direct=1 --bs=1m --rw=write --iodepth=32 --numjobs=4 --runtime=600 --time_based --group_reporting

预条件结束后,云盘内部垃圾回收进入相对稳定状态,随机写测试的数据会更接近长期使用表现。

fio关键参数与测试方法

在fio中,有几个参数会直接决定4K随机读写测试结果是否可信。direct=1表示绕过操作系统页缓存,让读写直接落到云盘;如果不加这个参数,顺序或随机读写都可能被内存缓存放大,测出的IOPS没有参考价值。ioengine=libaio使用Linux异步IO接口,可以配合iodepth控制队列深度,是块设备基准测试的标准引擎。bs=4k指定单次IO数据块大小为4KB,与数据库页大小一致。rw=randread和rw=randwrite分别对应随机读和随机写。iodepth与numjobs的乘积决定总队列深度,它是影响IOPS饱和点的关键。

随机读测试命令如下:

fio --name=randread-4k \
    --filename=/dev/vdb \
    --ioengine=libaio \
    --direct=1 \
    --bs=4k \
    --rw=randread \
    --iodepth=32 \
    --numjobs=4 \
    --runtime=60 \
    --time_based \
    --group_reporting \
    --randrepeat=0 \
    --norandommap=1

随机写测试只需要把rw=randread改为rw=randwrite即可,其他参数保持一致。每次组合测试重复3轮,每轮运行60秒,取平均值作为最终结果。测试期间关闭实例上其他可能产生IO的程序,并用iostat观察云盘利用率,确保压测线程没有因CPU不足而成为瓶颈。

4K随机读IOPS实测数据

在保持数据块4K不变的前提下,分别调整iodepth和numjobs,得到不同总队列深度下的随机读性能。结果如下表所示:

iodepthnumjobs总队列深度IOPS平均延迟
11168000.15ms
818192000.42ms
16232248001.29ms
324128256005.00ms
6485122580019.84ms

从数据可以明显看到,总队列深度从1提升到32时,随机读IOPS从6800快速增长到24800,已经接近该云盘标称的26000。继续把总队列深度加到128甚至512,IOPS只增长了不到1000,但平均延迟却从1.29ms飙升到接近20ms。这说明云盘后端处理能力在这个区间已经饱和,再增加并发只会堆积请求,延迟急剧恶化。

对于数据库这类对读延迟敏感的场景,不建议无脑把iodepth调到很大。实测中总队列深度32是一个比较均衡的点,IOPS达到标称值的95%以上,平均延迟还控制在1.3ms以内。如果业务对P99延迟要求更高,可以适当降低队列深度,牺牲一点吞吐换取更平稳的响应时间。

4K随机写IOPS实测数据

随机写测试同样采用预条件后的裸盘,改变总队列深度观察IOPS变化。结果如下:

iodepthnumjobs总队列深度IOPS平均延迟
11142000.24ms
81892000.87ms
16232114002.81ms
3241281180010.85ms
6485121190043.01ms

随机写IOPS在总队列深度16之后基本就接近了标称值12000,总队列深度32时达到11400,之后增长非常有限。与此同时,平均延迟从2.81ms快速上升到43ms,说明写路径比读路径更容易受到队列深度影响。随机写性能低于随机读是SSD的固有特性,因为写入涉及擦除、垃圾回收和云盘多副本同步,后端延迟会更高。

需要特别说明的是,如果测试前不做预条件处理,新盘随机写IOPS可能高出30%甚至更多。这是因为空盘有大量可以快速写入的块,不会触发垃圾回收。只有经过全盘顺序写预条件后,随机写结果才代表长期运行状态。对于有fsync或fdatasync要求的业务,例如MySQL事务提交,随机写IOPS还会大幅下降,需要单独加入--fsync=1或--fdatasync=1参数重新评估。

结论与选型建议

综合以上测试,这台腾讯云CVM标准型S5实例挂载的100GB增强型SSD云盘,4K随机读IOPS实测约为标称值的95%-99%,随机写IOPS约为标称值的95%左右。性能饱和点都出现在总队列深度32附近,继续增加并发对吞吐几乎没有帮助,反而会显著推高延迟。因此,实际业务配置时不要盲目设置超大队列深度,而应根据表结构、索引命中率和事务模型进行压测。

在做云盘选型或容量规划时,建议在标称IOPS基础上预留15%-20%的性能余量,避免业务高峰期触碰云盘上限。同时应把P99延迟纳入监控,而不是只看平均延迟。对于需要高随机读性能的数据库,优先选择增强型SSD云盘或更高规格的ESSD云盘,并定期用fio做基准测试,观察性能是否因云盘后端负载变化而下降。

最后需要强调,fio测试结果受实例规格、网络时延、云盘类型和测试方法影响较大,本文数据仅代表标准型S5与增强型SSD云盘的组合表现。更换其他CVM实例或云盘类型时,应按照相同流程重新压测,以得到符合自身业务特征的准确基线。

腾讯云CVMfio4K随机读写IOPS修改时间:2026-09-18 20:16:47

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0918/58947.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。