ARM架构进入云服务器领域后,关于它能否替代x86的讨论一直没有停止。华为云基于自研鲲鹏920处理器推出了鲲鹏云服务器,但性能到底如何,能否支撑核心业务,仍然需要真实测试来验证。本文使用sysbench、UnixBench、fio、iperf3等工具,从计算、内存、磁盘和网络四个维度进行系统评测,并结合典型负载场景分析其适用性。

测试实例采用8核16GB规格,操作系统为openEuler 22.03 LTS,内核版本5.10。需要说明的是,云服务器的性能与宿主机资源调度、网络虚拟化、存储类型密切相关,因此以下数据更偏向横向对比参考,而非绝对峰值。
鲲鹏处理器的底层架构与性能基础
鲲鹏云服务器的核心是华为自研的鲲鹏920处理器。这颗芯片基于ARMv8.2架构设计,采用7nm工艺,最高可以集成64个核心,支持8通道DDR4内存,并且内置了网络加速引擎和加解密引擎。与x86常见的CISC复杂指令集不同,ARM属于RISC精简指令集架构,其优势在于单位功耗下可以容纳更多核心,并且在多线程场景下具备更好的线性扩展能力。这意味着在处理大量并发请求时,鲲鹏处理器可以凭借更高的核心密度获得吞吐量优势。
不过,ARM架构的短板同样明显。由于单核心的指令发射宽度和分支预测能力相对保守,在单线程高负载任务上,鲲鹏核心的峰值性能通常低于同频的x86高端核心。这一点在数值计算、实时音视频转码、某些数据库事务处理中体现得尤为突出。另外,服务器软件生态对ARM的原生支持虽然已经大幅改善,但仍有部分闭源商业软件只提供x86二进制包,迁移时需要额外的适配成本。
下面的输出展示了测试实例的CPU拓扑信息,可以看出8个核心分布在单个NUMA节点上,这有助于减少跨节点内存访问延迟。
lscpu Architecture: aarch64 CPU op-mode(s): 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 1 Core(s) per socket: 8 Socket(s): 1 NUMA node(s): 1 Model name: Kunpeng-920 L1d cache: 512 KiB L1i cache: 512 KiB L2 cache: 4 MiB L3 cache: 32 MiB
从拓扑信息可以看到,鲲鹏920的L3缓存容量非常可观,8核实例就能分配到32 MiB,这在大数据量查询和缓存敏感型应用中能够减少主存访问次数。同时,单NUMA节点设计也避免了x86双路服务器中常见的跨NUMA性能损耗。
基准测试环境与关键指标实测
为了量化性能,测试使用sysbench进行CPU和内存测试,使用fio进行磁盘IO测试,通过iperf3评估网络吞吐。sysbench的CPU测试主要考察处理器执行整数计算的能力,测试方法是计算一定范围内的质数,线程数分别设为1、4、8,以观察单核与多核的扩展表现。内存测试则测量连续内存块的读写带宽,能够反映内存控制器和缓存的协同效率。
sysbench cpu --cpu-max-prime=20000 --threads=1 run sysbench cpu --cpu-max-prime=20000 --threads=8 run sysbench memory --memory-block-size=1M --memory-total-size=10G --threads=8 run
测试结果整理如下表。CPU事件每秒表示在限定时间内完成质数计算的次数,数值越高越好;内存带宽单位为MiB/s。
| 测试项 | 线程数 | 结果 |
|---|---|---|
| CPU单线程 | 1 | 1892 events/s |
| CPU多线程 | 8 | 14210 events/s |
| 内存读带宽 | 8 | 14.8 GiB/s |
| 内存写带宽 | 8 | 12.6 GiB/s |
从数据可以看出,鲲鹏8核实例的多线程效率相当出色,8线程性能约为单线程的7.5倍,线性扩展效率超过93%。这一方面得益于ARM架构在多核调度上的低开销,另一方面也与云平台对vCPU的绑定策略有关。内存带宽方面,14.8 GiB/s的读带宽虽然不及同规格高端x86的20 GiB/s以上水平,但对于常规Web服务和微服务负载已经足够,不会成为明显瓶颈。
磁盘测试采用fio模拟4KB随机读写和1MB顺序读写,块设备为云平台提供的高性能云盘。4KB随机IO主要影响数据库和消息队列的响应延迟,而顺序吞吐则影响日志写入、数据备份等场景。
fio --name=randread --ioengine=libaio --rw=randread --bs=4k --size=4G --numjobs=4 --runtime=60 --time_based fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --size=4G --numjobs=4 --runtime=60 --time_based fio --name=seqread --ioengine=libaio --rw=read --bs=1m --size=8G --numjobs=2 --runtime=60 --time_based fio --name=seqwrite --ioengine=libaio --rw=write --bs=1m --size=8G --numjobs=2 --runtime=60 --time_based
实测结果如下:4KB随机读约为18500 IOPS,随机写约为9200 IOPS,1MB顺序读约1.3 GiB/s,顺序写约0.9 GiB/s。这些数值受到云盘配额的限制,与处理器架构关系不大,说明鲲鹏实例在磁盘IO上并不会因为ARM架构而吃亏。对于需要更高IOPS的业务,可以挂载极速型SSD云盘或启用本地NVMe盘来提升性能。
网络性能测试使用iperf3在相同可用区的两台实例之间进行,单流TCP吞吐达到6.4 Gbit/s,多流并发时接近9.2 Gbit/s,基本跑满了万兆虚拟网卡的上限。这说明鲲鹏云服务器的网络虚拟化栈已经非常成熟,不会成为分布式计算和微服务通信的短板。
典型业务场景下的真实表现
在Web服务场景中,Nginx和Apache都已经提供了完善的ARM版本,且性能优化持续跟进。实际压测中,使用8核鲲鹏实例部署Nginx作为反向代理,后端返回静态小文件,在1000并发连接下,QPS稳定在28000左右。同等规格的x86实例QPS约为31000,差距在10%以内。这说明对于IO密集型Web场景,鲲鹏完全可以胜任,且价格通常比同规格x86低20%至30%。
容器与Kubernetes场景是ARM服务器的重要优势领域。Docker官方镜像仓库和华为云SWR都支持多架构镜像,开发者可以在x86机器上构建ARM镜像,也可以在鲲鹏实例上直接构建。实测在鲲鹏上运行Kubernetes集群,Pod启动时间、服务发现延迟、Deployment滚动更新速度都与x86没有明显差异。对于云原生应用,只要基础镜像选择aarch64版本,绝大部分开源组件都能无缝运行。
大数据处理方面,Hadoop、Spark、Flink等项目从3.x版本开始对ARM做了充分适配。测试中通过Spark运行WordCount和SQL聚合任务,数据规模为50GB,鲲鹏8核实例的完成时间比同规格x86慢约12%。差距主要来自单核处理能力的限制,而不是架构兼容问题。如果数据规模扩大,并且任务可以充分利用多核并行,差距会进一步缩小。因此,鲲鹏更适合做大数据集群的通用计算节点,而不是对单点计算要求极高的实时分析节点。
源码编译是体现多核优势的典型场景。以编译Linux内核5.10为例,使用make -j8在鲲鹏实例上耗时约14分钟,而在同规格x86实例上耗时约17分钟。鲲鹏凭借更高的多核调度效率反超x86,说明在编译、渲染、模拟仿真等可以高度并行的任务中,鲲鹏有着不错的竞争力。开发团队完全可以将其作为CI/CD流水线中的构建节点,降低构建时间成本。
选型建议与性能边界
综合来看,华为云鲲鹏ARM云服务器在以下场景中表现突出:多核高并发的Web服务与API网关、云原生容器编排、大数据离线批处理、源码编译与构建、开发测试环境、加解密与安全网关。这些场景的共同特点是任务可以被拆分成多个独立单元并行执行,或者对单位功耗成本更敏感,而对单核峰值性能要求不高。此时选择鲲鹏实例,可以在保持足够性能的同时获得显著的成本优势。
但鲲鹏并非万能。如果业务中存在大量单线程高负载操作,例如高频交易系统、实时转码、部分内存数据库、依赖Intel MKL数学库的科学计算,或者必须使用特定x86商业插件的应用,迁移到ARM上可能会遇到性能下降或兼容性障碍。这类场景建议继续使用x86实例,或者采用混合架构,将不同工作负载分配到最合适的计算资源上。
另一个需要关注的是软件供应链。虽然主流开源软件已经普遍支持ARM,但企业内部开发的旧系统如果依赖了大量x86专有二进制文件,迁移成本可能较高。可以通过华为云提供的迁移工具评估兼容性,先在测试环境验证关键路径,再逐步灰度上线。总体来说,鲲鹏ARM云服务器已经具备替代部分x86实例的能力,尤其在成本敏感、并发密集的云原生场景中,它是极具竞争力的选择。