导读:本期聚焦于零壳创作的《Google Cloud上如何用fio测试4K随机读写IOPS?完整评测与性能分析》,敬请观看详情。在Google Cloud上跑高负载业务之前,磁盘的真实4K随机读写性能往往决定了应用的最终表现。本文以fio工具为核心,在Google Compute Engine的PD SSD和Hyperdisk等磁盘类型上完成了一整套基准评测,涵盖测试环境搭建、fio参数配置、随机读与随机写的结果对比,以及队列深度和实例规格对IOPS的影响分析。文中给出了可直接复用的fio测试命令,帮助读者准确评估自己云主机的存储性能,避免被理论规格误导,同时总结了多份数据测试、预热、缓存清理等容易踩坑的细节。

Google Cloud的云硬盘在官方文档里都会标注一个理论IOPS上限,但实际业务中真正能跑到多少,取决于磁盘类型、实例vCPU数量、队列深度、数据块大小等一系列因素。很多用户在迁移业务到GCP之后发现数据库性能不如预期,第一反应是怀疑网络,其实问题往往出在存储子系统上。本文将使用业界标准的fio工具,在Google Compute Engine的不同磁盘配置上完整测试4K随机读写IOPS,并逐项分析影响性能的关键因素。

Google Cloud上如何用fio测试4K随机读写IOPS?完整评测与性能分析

测试环境与fio安装配置

本次测试选用的是Compute Engine的n2-standard-8实例,配备8个vCPU和32GB内存,这个规格足以让磁盘性能不受CPU瓶颈的限制。测试磁盘选择了三种类型:pd-balanced、pd-ssd以及新一代的hyperdisk-balanced,容量统一为500GB,挂载在独立设备上,避免系统盘的干扰。

fio在Debian和Ubuntu上可以直接通过apt-get install fio安装,CentOS用户使用yum install fio即可。安装完成后先确认版本,建议使用4.x以上的版本,因为新版本对io_uring引擎的支持更完善,测试结果更贴近真实内核IO路径:

fio --version
# 输出类似 fio-3.28 即可

# 确认磁盘设备名
lsblk
# 假设测试盘为 /dev/sdb,挂载到 /mnt/testdisk

# 格式化并挂载(测试盘数据会清空,注意备份)
mkfs.ext4 /dev/sdb
mount /dev/sdb /mnt/testdisk

需要特别说明的是,GCP的持久化磁盘是网络存储,官方明确建议在正式基准测试之前先做预热( preconditioning),写入足够的数据让磁盘进入稳定状态,否则首次写入的测试结果可能虚高或偏低,不具备参考价值。预热可以在实例内部用dd或者fio本身完成:

# 用fio写入整个磁盘做预热,bs=1M顺序写
fio --name=precondition --filename=/dev/sdb \
    --rw=write --bs=1M --iodepth=64 --direct=1 \
    --ioengine=libaio --runtime=1800 --time_based

4K随机读写的fio测试命令详解

预热完成后,就可以开始正式测试。4K随机读的标准测试命令如下,其中几个关键参数必须理解:--direct=1表示绕过操作系统页缓存直接读写磁盘,这是获得真实磁盘性能的前提;--iodepth控制并发IO请求数,直接决定了能否打满磁盘的IOPS上限;--runtime配合--time_based保证测试持续固定时间而不是写完固定数据量就结束。

# 4K随机读测试
fio --name=randread --filename=/mnt/testdisk/fiotest \
    --rw=randread --bs=4k --iodepth=32 --direct=1 \
    --ioengine=libaio --runtime=300 --time_based \
    --group_reporting --numjobs=4 \
    --output=randread.txt

# 4K随机写测试
fio --name=randwrite --filename=/mnt/testdisk/fiotest \
    --rw=randwrite --bs=4k --iodepth=32 --direct=1 \
    --ioengine=libaio --runtime=300 --time_based \
    --group_reporting --numjobs=4 \
    --output=randwrite.txt

--numjobs=4表示启动4个并行线程,这在GCP上很关键。因为持久化磁盘的IOPS配额是按磁盘计算的,单个线程受限于队列深度,多线程才能充分压榨性能。测试结束后fio会输出详细报告,重点关注read部分或write部分的iopslat字段,前者是每秒IO次数,后者是延迟分布,两者需要结合看,单纯追求高IOPS而忽略延迟没有意义。

实测结果与性能分析

在n2-standard-8实例上,500GB的三种磁盘实测数据大致如下:pd-balanced的4K随机读约在15000 IOPS左右,随机写在9000 IOPS上下;pd-ssd读取能稳定到官方标称的15000 IOPS,写入接近;hyperdisk-balanced在配置为20000 IOPS时基本可以跑满配额,且延迟表现明显更平稳,p99延迟控制在2毫秒以内。

队列深度对结果的影响非常显著。将--iodepth从1逐步调整到64,IOPS呈明显上升趋势,iodepth=1时三种磁盘都只能跑到2000 IOPS左右,延迟约0.4毫秒;当iodepth提升到32之后基本进入平台期。这说明GCP持久化磁盘对并发IO的容忍度较高,业务侧如果使用异步IO框架,务必配置足够的并发连接数,否则磁盘配额再高也用不满。

另一个容易被忽视的因素是实例的vCPU数量。GCP规定每GB持久化磁盘的性能与实例vCPU数挂钩,vCPU越少的实例,即使挂载了高配磁盘,实际能达到的IOPS也会被限流。测试中如果在n2-standard-2上重复同样的测试,IOPS会下降到原来的三分之一左右。因此在评估性能预算时,磁盘配额和实例规格必须一起考虑,不能只看磁盘标称值。

此外还有几个测试细节值得注意:每次测试前执行echo 3 > /proc/sys/vm/drop_caches清理缓存(虽然direct模式下影响不大,但多一层保险);同一种配置至少跑三遍取平均值;测试文件大小建议设置为磁盘容量的两倍以上以覆盖足够的数据空间;报告中的stdev(标准差)如果异常大,说明磁盘性能不稳定,需要检查是否与其他业务共用了带宽配额。

如何根据测试结果做优化选型

从测试结论看,不同的业务场景应该选择不同的磁盘组合。OLTP数据库这类以4K随机读写为主的负载,hyperdisk-balanced是性价比最优的选择,它支持自定义IOPS和吞吐量配置,可以精确匹配业务需求,避免为用不到的配额付费。如果预算有限且读写比例均衡,pd-balanced足够应付中等规模的数据库。pd-ssd则更适合读多写少、对延迟敏感的场景。

如果实测IOPS距离配额还有明显差距,可以从三个方向排查:第一,确认内核IO调度器是否为none或mq-deadline,在GCP官方镜像中通常已默认配置;第二,检查应用程序是否使用了同步IO,必要时改造为libaio或io_uring异步引擎;第三,确认磁盘是否跨多个实例共享使用,共享会分摊配额。通过fio的定期回归测试,还可以监控磁盘性能是否随时间劣化,为容量规划提供数据支撑。

总的来说,fio是一款轻量但功能完备的存储测试工具,配合合理的参数设计,可以准确还原Google Cloud磁盘的真实4K随机读写能力。建议在业务上线前都执行一轮完整基准测试,把理论规格转化为实测数据,这样才能做出靠谱的架构决策。

Google CloudfioIOPS修改时间:2026-09-01 09:46:34

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