1. 项目概述:从“能用”到“好用”的国产服务器性能实战
最近几年,信创产业从试点走向全面推广,国产CPU和服务器不再是实验室里的概念机,而是真刀真枪地进入了数据中心、办公系统和关键业务领域。作为一名长期关注基础设施性能的从业者,我经历了从早期“能用就行”的兼容性测试,到现在必须深入评估“好不好用”、“划不划算”的性能对比阶段。这次,我决定系统性地梳理一下当前主流国产CPU的发展现状,并基于真实的业务场景,对几款典型的信创服务器进行一次深度的性能测试对比。这不仅仅是为了跑个分,更是想搞清楚:在去掉了“国产化”这个政治正确的滤镜后,这些服务器在实际负载下的表现究竟如何?它们的性能基线在哪里?瓶颈可能出现在什么地方?以及,作为最终的用户或运维人员,我们该如何建立自己的性能测试标准,来做出更明智的选型决策。
2. 国产CPU发展现状与核心架构解析
要测试服务器,必须先理解其“大脑”——CPU。目前市场上的国产CPU主要形成了三条清晰的技术路线,它们各有渊源,也决定了后续生态和性能特性的不同。
2.1 ARM架构阵营:鲲鹏与飞腾的竞合
这条路线基于ARM指令集授权,是目前在通用服务器领域生态最活跃、产品线最丰富的。
华为鲲鹏(Kunpeng):基于ARMv8架构永久授权,华为可以进行深度微架构设计。其核心优势在于华为强大的芯片设计能力和全栈协同。最新的鲲鹏920系列处理器,最多支持64核,主频最高可达2.6GHz,并集成了丰富的I/O接口,如PCIe 4.0。华为围绕鲲鹏构建了从硬件、操作系统(openEuler)到数据库(GaussDB)、中间件的完整生态体系,软硬件垂直整合优化做得比较深入。在实际应用中,其多核并发处理能力,尤其是在云计算、分布式存储和数据库场景下,表现往往比较突出。
飞腾(Phytium):同样基于ARM指令集,飞腾的研发历史更久,在政务、金融等领域有深厚的积累。其最新的腾云S2500系列处理器,采用多芯片互联技术,可以构建多路服务器,提供更高的核心密度。飞腾的生态策略相对开放,与国内众多操作系统厂商(麒麟、统信)、整机厂商和软件开发商建立了广泛的合作。它的优势在于对传统党政办公应用的兼容性和优化做得比较扎实,在流版签软件、OA系统等场景下运行稳定。
注意:虽然同为ARM,但鲲鹏和飞腾的CPU核心是各自独立设计的,二进制指令并不完全兼容。这意味着为鲲鹏编译的应用,不能直接在飞腾上运行,反之亦然。这是选型时必须考虑的首要因素。
2.2 MIPS架构阵营:龙芯的自主之路
龙芯(Loongson):走的是完全不同的道路,其指令集为自主设计的LoongArch,此前长期兼容MIPS。龙芯强调从指令集到微架构的完全自主可控。最新的3A5000/3C5000系列处理器,性能提升显著,达到了主流桌面和服务器级应用的水平。龙芯的生态是挑战也是其护城河,需要软件厂商专门为其架构进行移植和优化。目前,其生态正在快速建设中,在特定领域的专用系统中已经得到应用。选择龙芯,意味着更彻底的技术自主,但也需要承担一定的生态适配成本和早期风险。
2.3 x86架构阵营:海光与兆芯的兼容性选择
这条路线通过技术合作获得x86授权,最大优势是生态兼容性。
海光(Hygon):通过与AMD的技术合作,获得了Zen架构的授权,其处理器在指令集和微架构上与AMD EPYC系列高度相似。这意味着海光CPU可以无缝运行庞大的x86软件生态,包括复杂的商业数据库、ERP系统等,迁移成本极低。其性能表现也更接近国际主流x86服务器水平,在多核性能和内存带宽上具有竞争力。
兆芯(Zhaoxin):其x86技术来源于VIA,目前也在持续迭代。兆芯的优势在于桌面和嵌入式领域,在入门级服务器和特定行业终端中有应用。
实操心得:对于从现有Intel/AMD平台迁移的业务系统,如果追求最小化的迁移风险和成本,海光几乎是“开箱即用”的最佳选择。但如果从长远自主可控的战略考虑,拥有自主指令集的龙芯和深度定制的ARM阵营,可能后劲更足。这没有绝对的对错,只有基于自身业务优先级(兼容性 vs. 自主性 vs. 性能)的权衡。
3. 信创服务器性能测试的核心思路与标准建立
性能测试不是跑个娱乐软件那么简单,尤其是对于处于成长期的信创平台,测试方法和标准的科学性直接决定了结论的可靠性。我反对直接套用国外平台的测试套件和标准,因为软硬件环境截然不同。我们需要建立自己的、贴合业务场景的测试方法论。
3.1 明确测试目标与场景映射
在开机之前,必须想清楚:这台服务器未来主要干什么?测试必须围绕真实业务场景展开。
- 计算密集型场景:例如科学计算、视频转码、编译构建。这考验CPU的浮点运算能力和单核/多核峰值性能。我们会选用像SPEC CPU 2017这样的国际标准基准测试套件(需获取对应架构的授权版本或使用开源替代方案),以及Stream来测试内存带宽。
- 数据密集型场景:例如数据库(MySQL, PostgreSQL)、大数据分析(Hadoop, Spark)。这考验CPU的多核并发、内存容量与带宽、以及存储I/O。我们会部署真实的数据库,进行TPC-C-like的在线事务处理测试和复杂的查询测试。
- 应用服务器场景:例如Java Web应用(Spring Boot)、中间件(Nginx, Redis)。这考验CPU的调度效率、网络处理能力和JVM在特定架构下的优化水平。我们会使用JMeter或wrk进行压力测试,模拟高并发用户请求。
- 虚拟化/云化场景:这是服务器最常见的归宿。我们会部署KVM或基于它的云平台(如OpenStack),测试虚拟机的创建密度、在不同负载下的性能隔离性,以及虚拟网络、虚拟存储的性能开销。
3.2 构建可对比的测试环境
对比测试的大前提是环境一致,否则结果毫无意义。
- 硬件对齐:尽可能选择核心数、主频相近的CPU型号进行对比。例如,对比8核的鲲鹏920、飞腾S2500和龙芯3A5000。内存容量、频率、通道数必须完全一致。使用同型号的NVMe SSD和网卡。
- 软件栈对齐:
- 操作系统:统一使用一个主流国产Linux发行版,如openEuler或统信UOS服务器版,并确保内核版本、基础库版本完全一致。
- 编译器与运行时:对于计算测试,使用相同版本的GCC/LLVM编译器,并采用针对该CPU架构最优的编译选项(如-march=native)。对于Java应用,使用相同版本的OpenJDK。
- 配置优化:针对不同的测试场景,对操作系统内核参数(如网络参数、虚拟内存参数)、数据库配置、JVM参数进行统一的、合理的优化。记录下所有优化项,这是测试报告的重要组成部分。
- 工具选型与二次开发:像JMeter这样的工具虽然是跨平台的,但其默认实现可能对某些架构优化不足。我们需要确保测试脚本本身不成为瓶颈。有时甚至需要对测试工具或业务应用代码进行针对性的编译优化。
3.3 建立多维度的性能评价指标体系
性能不等于“跑分高”。一个全面的评价体系应包含:
| 维度 | 关键指标 | 测试工具/方法 | 说明 |
|---|---|---|---|
| 计算性能 | 整数/浮点运算速率 (IPS/FLOPS) | SPEC CPU 2017, Linpack | 反映CPU核心的绝对算力 |
| 内存性能 | 带宽 (GB/s), 延迟 (ns) | Stream, LMbench | 内存子系统性能,对数据库等应用至关重要 |
| 存储I/O | 随机/顺序读写IOPS、带宽、延迟 | Fio, Vdbench | 测试本地NVMe SSD和对接存储的性能 |
| 网络性能 | 吞吐量 (Gbps)、包转发率 (PPS)、延迟 | iperf3, netperf, ping | 测试TCP/UDP吞吐及网络栈效率 |
| 应用性能 | 事务处理量 (TPS)、查询响应时间 (QPS)、请求延迟 | 自定义业务脚本、JMeter、数据库基准测试 | 最贴近业务的综合性能体现 |
| 能效比 | 性能/功耗比 | 性能测试结果结合整机功耗仪读数 | 在“双碳”背景下越来越重要的指标 |
| 稳定性 | 长时间高负载下的错误率、性能衰减 | 压力测试(如 stress-ng)持续运行24h+ | 考察系统在极限状态下的可靠性 |
踩坑记录:早期测试时,我们曾只关注峰值性能,忽略了性能一致性。有些机器在短时间内跑分很高,但长时间满载后,可能因为散热或功耗墙限制,出现性能大幅下降。因此,稳定性测试必须作为硬性指标。
4. 实战:基于典型场景的服务器性能对比测试
以下是我近期组织的一次内部对比测试的实录,选取了分别搭载鲲鹏920、飞腾S2500、海光7285(均为8核配置)的三款国产双路服务器,以及一台作为基准的Intel Xeon Silver 4210服务器。所有机器配备256GB DDR4内存、两块同型号NVMe SSD,安装openEuler 22.03 LTS。
4.1 基础算力与内存性能测试
我们首先使用SPEC CPU 2017的整数速率(int_rate)和浮点速率(fp_rate)测试,编译时使用-O3 -march=native优化。
测试结果摘要:
- 单核整数性能:Intel Xeon > 海光 ≈ 鲲鹏 > 飞腾 > 龙芯。海光凭借x86架构和较高的IPC(每时钟周期指令数)在此项领先。
- 多核整数性能(全核):鲲鹏 ≈ 海光 > Intel Xeon > 飞腾。鲲鹏和海光在多核扩展性上表现出色,得益于其核心互联架构的优势。
- 浮点性能:在HPC负载中,海光和鲲鹏的表现接近,均显著优于作为对比的Intel型号(该特定型号),飞腾紧随其后。龙芯在浮点方面进步巨大,但与前列仍有差距。
- 内存带宽(Stream Triad):鲲鹏表现最为突出,远超其他对手,这得益于其优化的内存控制器和多通道设计。这对于内存带宽敏感的应用(如科学计算、大数据)是巨大优势。
结论一:在纯CPU算力上,海光凭借成熟的x86架构,在单核和通用多核应用上表现最均衡,兼容性无敌。鲲鹏则在多核并发和内存带宽上优势明显,特别适合横向扩展的云原生和数据分析场景。
4.2 数据库应用场景测试 (MySQL)
我们在每台服务器上部署MySQL 8.0,使用sysbench进行OLTP读写混合测试,数据集大小为100张表,每表100万行数据。
测试步骤:
- 准备数据:
sysbench --db-driver=mysql oltp_common.lua prepare - 运行测试(16个线程,300秒):
sysbench --db-driver=mysql oltp_read_write.lua run - 关键指标:每秒事务数(TPS)、平均延迟(Avg Latency)、第95百分位延迟(P95 Latency)。
测试结果与分析:
- 峰值TPS:海光服务器略微领先,鲲鹏紧随其后,两者差距在5%以内。飞腾约为前两者的85%。Intel基准机由于核心数较少,TPS最低。
- 延迟稳定性(P95):这是关键发现。鲲鹏服务器的P95延迟最低且最稳定,波动范围很小。海光服务器的平均延迟虽好,但P95延迟的“长尾”现象稍明显。飞腾的延迟相对较高。
- 问题排查:通过
perf工具分析,在海光服务器上观察到更多的缓存未命中(cache-misses)和更频繁的上下文切换。这可能与数据库工作负载的随机内存访问模式有关,鲲鹏的大内存带宽和缓存架构在此受益。
结论二:对于数据库这类核心应用,鲲鹏在提供高吞吐的同时,能保证更稳定、可预测的响应时间,这对在线业务体验至关重要。海光提供了接近的性能和完美的兼容性,是平滑迁移的稳妥选择。
4.3 Web应用中间件场景测试 (Nginx + Redis + Spring Boot)
这个组合模拟了典型的微服务后端。我们使用一个简单的Spring Boot应用,通过Redis缓存数据,Nginx作为反向代理和负载均衡。
- 部署:在每台服务器上,使用Docker容器分别部署Nginx、Redis和Spring Boot应用。
- 测试工具:使用wrk进行HTTP API压测,脚本模拟用户登录、查询等混合操作。
- 测试方法:梯度增加并发连接数(从50到1000),观察每秒请求数(RPS)和错误率的变化。
测试结果与分析:
- 最大RPS:在并发连接数低于500时,四款服务器差距不大。当并发超过800时,鲲鹏和飞腾服务器展现出更好的连接保持能力和更低的错误率。海光服务器在超高并发下,出现了少量的连接超时错误。
- 资源消耗:监控发现,在相同压力下,飞腾服务器的CPU利用率相对较低,而鲲鹏服务器的网络中断处理更高效。海光服务器的整体资源消耗与Intel相当。
- 深度分析:我们使用
sar和pidstat监控发现,海光服务器在网络软中断(si)的CPU占用率上略高。这可能与内核网络栈在x86和ARM上的不同优化程度有关。ARM架构(鲲鹏、飞腾)在近年来针对网络、云负载做了大量内核优化。
结论三:在高并发、轻量级请求的Web应用场景下,ARM架构的服务器(尤其是鲲鹏)表现出了良好的韧性和效率。飞腾的表现也令人惊喜,功耗控制可能更好。海光完全能够胜任,但在极限压力下可能需要更精细的内核调优。
5. 测试过程中的常见问题与排查技巧实录
在实际测试中,我们遇到了各种各样的问题,这里分享几个典型案例和解决思路。
5.1 性能结果波动巨大,缺乏可重复性
- 现象:同一测试用例,连续跑三次,结果相差超过20%。
- 排查:
- 检查后台服务:首先用
systemctl list-units --type=service查看并禁用所有非必要的后台服务,特别是监控代理、安全软件、周期性的维护任务(如updatedb)。 - 检查CPU频率调速器:使用
cpupower frequency-info查看。务必将其设置为performance模式,避免测试期间CPU降频:cpupower frequency-set -g performance。 - 检查NUMA效应:对于多路服务器,内存访问的局部性至关重要。使用
numactl --hardware查看NUMA节点布局。对于数据库等应用,最好将进程和其使用的内存绑定到同一个NUMA节点:numactl --cpunodebind=0 --membind=0 <command>。 - 关闭透明大页(THP):对于某些工作负载,THP可能导致性能波动。尝试设置为
never:echo never > /sys/kernel/mm/transparent_hugepage/enabled。
- 检查后台服务:首先用
- 心得:性能测试的第一步是净化测试环境,确保系统资源尽可能专用于测试负载,排除一切干扰项。建立一个干净的、标准化的测试镜像模板是最高效的做法。
5.2 特定应用在ARM服务器上崩溃或报错
- 现象:一个在x86上运行良好的Java应用,部署到鲲鹏或飞腾服务器后,偶尔出现核心转储(Core Dump)或奇怪的异常。
- 排查:
- 检查依赖库:使用
ldd命令检查应用依赖的动态库,确保所有库都是针对ARM架构(aarch64)编译的,没有混入x86的库。 - 检查JVM:确保使用的是ARM版本的OpenJDK。不同JVM厂商(如华为毕昇JDK、麒麟JDK)对ARM的优化程度不同,可以尝试更换。
- 检查编译选项:如果应用是自行编译的C/C++程序,检查编译时是否指定了正确的
-march参数。错误的参数可能导致生成使用了不支持的指令。 - 分析Core文件:使用
gdb加载core文件和对应的二进制文件,通过bt命令查看崩溃时的堆栈信息,定位问题函数。
- 检查依赖库:使用
- 心得:生态兼容性是ARM服务器最大的挑战。迁移时,必须对应用的全栈(从底层依赖库到上层运行时)进行梳理和验证。优先使用操作系统厂商推荐或提供的软件仓库中的版本。
5.3 网络性能不达预期
- 现象:使用
iperf3测试两台同型号国产服务器间的带宽,远低于万兆网卡的预期值。 - 排查:
- 中断亲和性设置:将网卡中断绑定到特定的CPU核心,避免在多个核心间跳转,可以提升性能。使用
irqbalance服务或手动修改/proc/irq/[irq_num]/smp_affinity文件。 - 调整网络内核参数:增加TCP缓冲区大小,例如
net.core.rmem_max,net.core.wmem_max,net.ipv4.tcp_rmem,net.ipv4.tcp_wmem。对于高速网络,这些默认值可能太小。 - 检查并启用硬件特性:确认网卡的RSS(接收侧缩放)、GRO/GSO(大段卸载)等硬件加速特性是否在内核中启用。使用
ethtool -k <eth_name>查看。 - 绕过内核协议栈:对于极致性能要求,可以研究DPDK或Solarflare的Onload技术,但这对应用改造要求高。
- 中断亲和性设置:将网卡中断绑定到特定的CPU核心,避免在多个核心间跳转,可以提升性能。使用
- 心得:网络性能调优是一个系统工程。国产服务器的网卡驱动和内核网络栈仍在持续优化中,及时更新固件和驱动,并参考操作系统厂商提供的性能调优指南,往往能解决大部分问题。
6. 建立内部性能测试标准与选型建议
经过一系列测试,我认为企业或机构在引入信创服务器时,不能只看厂商提供的宣传数据,必须建立自己的性能测试标准流程(PTP)。
- 确定基准负载模型:从你的真实业务中,提炼出1-3个最具代表性的负载模型(如“订单处理”、“报表生成”、“视频转码”)。
- 开发或选取基准测试工具:为每个负载模型开发对应的基准测试程序或脚本。可以是简化的业务逻辑,也可以是像TPC-DS这样的标准测试集。JMeter在这里可以发挥巨大作用,用于模拟Web和API负载。
- 定义性能KPI和达标线:为核心场景定义明确的、可量化的性能指标(如“订单创建API,在100并发下,P99延迟<200ms”),并设定最低达标线。
- 标准化测试报告模板:报告应包含测试环境详情、所有性能指标数据、资源监控图表(CPU、内存、IO、网络)、以及任何遇到的异常和调优记录。
- 选型决策矩阵:将性能测试结果、生态兼容性、成本(采购与运维)、供应商服务支持、长期技术路线等因素综合起来,形成决策矩阵。
给不同角色的最终建议:
- 对于追求平滑迁移和丰富生态的用户:海光是当前风险最低、见效最快的选择,尤其适合运行传统商业软件和复杂数据库。
- 对于构建新一代云化、分布式平台的技术先锋:鲲鹏强大的多核性能和内存带宽,以及华为全栈生态的协同优化,在云原生、大数据、AI场景下潜力巨大。
- 对于有强自主可控要求,且业务相对固定的领域:飞腾和龙芯值得深入评估。飞腾在政务办公领域成熟,龙芯则代表了终极的自主方向,需要与软件供应商深度合作进行生态共建。
国产CPU和服务器的发展已经驶入了快车道,从“可用”迈向了“好用”。性能测试是我们摸清其真实能力、发现潜在问题、推动其持续优化的重要手段。这个过程没有捷径,唯有脚踏实地,用科学的方法和真实的业务场景去验证。每一次测试,不仅是对产品的考核,也是对我们自身技术判断力的锤炼。