dbaplus社群公众号文章

为啥国产CPU插满内存才跑得快?英特尔却不用?!

明明同样是服务器NUMA架构!

dbaplus社群

公众号 · 39 篇文章


不少运维、国产化落地工程师都遇到过同一个疑惑:搭建国产服务器集群时,厂商硬性要求:内存插槽必须成对、全通道均匀插满,少插一组内存,数据库、虚拟化业务性能直接下滑三成甚至过半;反观英特尔至强服务器,随意搭配 2 条、4 条内存照常运行,带宽与延迟衰减微乎其微,日常业务几乎感知不到差异。


同样都是NUMA非一致内存访问架构,二者为何会出现截然不同的内存使用门槛?今天从芯片架构、片间互联、固件内核、生态适配四个维度,拆解这份肉眼可见的性能鸿沟。


一、表象背后:不是挑剔,是芯片底层架构天生不一样


1、英特尔至强:单颗 CPU 近乎统一内存 UMA,NUMA 粒度极粗


英特尔传统服务器 Xeon,长久采用一体式大芯片 + 环形 Ring 总线设计:一颗 CPU 内部所有计算核心、三级缓存、内存控制器全部挂载在环形总线上,整颗处理器整体算作 1 个 NUMA 节点。只有双路、四路多插槽整机场景,才会按照 CPU 插槽划分 NUMA 节点,节点总数最多 4 个,粒度宽泛。

内存通道归属于 CPU 全局资源,即便只插入一半内存,空闲通道仅小幅缩减总带宽;BIOS 自带内存交错机制,系统会自动打散内存布局,抹平不均衡带来的负面影响。本地内存与跨插槽远程内存延迟差距仅有 1.2~1.5 倍,即便偶尔触发跨节点访问,开销极低,普通业务完全不受影响。


2、国产 CPU:Chiplet 芯粒拼接,一颗 CPU 拆成一堆微型 NUMA 节点


因为国内DUV工艺的缺陷密度扛不住大Die良率,当前主流国产服务器 CPU,无论是海光 x86 架构、鲲鹏 / 飞腾 ARM 架构,普遍采用多芯粒堆叠的 Chiplet 方案:


  • 海光:承袭 AMD CCD 模块化设计,单颗 CPU 被切分为多个计算芯粒,内部拆分出 4~8 个微型 NUMA 单元,每个单元独立绑定专属内存通道;


  • 鲲鹏、飞腾:多 Die Mesh 互联架构,单颗 CPU 原生划分 4 组计算区块,各自独占内存通道,天然碎片化 NUMA 拓扑。


核心痛点就此诞生:内存没有均匀填满全部通道时,部分 NUMA 节点无本地内存可用。CPU 核心运算时,只能跨越片间互联总线,去往其他节点调取内存数据。本地内存和跨节点内存延迟差距直接拉大至 2 倍以上,并发场景下片间总线拥堵,带宽大幅缩水,数据库读写、虚拟机调度、中间件转发都会出现明显卡顿。


二、核心瓶颈:片间互联总线,拉开体验差距的关键


NUMA 架构的体验上限,永远由跨节点互联总线决定:


1、英特尔 UPI 互联总线


历经十余年迭代优化,带宽冗余充足、拥塞控制成熟,跨 CPU 插槽数据传输延迟低、衰减平缓;环形总线的一致性协议打磨完善,少量跨节点访问不会造成系统抖动。


2、国产片间互联总线(Infinity Fabric/HCCS)


起步时间晚,带宽上限、延迟控制、并发拥堵抗性均存在代差:节点数量越多,跨节点访问的损耗会持续累积;大量零散远程内存读写涌入后,总线极易拥堵,性能损耗被进一步放大。硬件层面没有足够冗余去包容内存排布不均衡带来的额外流量,想要规避拥堵,最稳妥的方案就是:让每一个微型 NUMA 节点都拥有专属本地内存。


三、固件 + Linux 内核调度:数十年生态积累难以短期追赶


硬件差距之外,软件适配的积累差距同样不容忽视:


1、英特尔内核深度适配


英特尔持续数十年参与 Linux 内核开发,针对粗粒度 NUMA 做了海量调优:后台内存自动均衡、延迟感知线程调度、远程访问预判等机制十分成熟。即便内存布局不均,系统也会悄悄迁移内存、调整线程绑定,弱化 NUMA 负面影响。


2、国产 CPU 适配尚在完善期


国产服务器 CPU 商用落地周期较短,内核专属优化覆盖面不足:系统自带的 NUMA 自动均衡策略效果有限,盲目开启内存迁移反而容易引发业务抖动;多数场景下需要运维人员手动绑核、划定内存节点,上手门槛更高。硬件厂商为了降低运维出错概率、保障交付稳定性,统一定下硬性规范:内存全通道均匀插满,从源头规避细碎 NUMA 带来的性能隐患。


除此之外,MySQL、Oracle、虚拟化平台等商用软件,长久以来均以英特尔 NUMA 拓扑为基准完成调优;迁移至国产细碎 NUMA 环境后,内存排布失衡极易触发各类性能 bug,满配内存成为落地国产化项目的标配稳妥方案。


四、误区厘清:英特尔并非完全不用满配内存


很多人会误以为英特尔全程无内存填充要求,这里纠正两点常识:


高性能计算、内存数据库、超大并发缓存等极致带宽场景,英特尔同样推荐满通道插内存,以此拉满内存总带宽;只是半配场景损耗可控,普通业务无需苛求;


AMD EPYC 与海光架构同源,同样属于细碎 NUMA 设计,对内存均匀度要求远高于英特尔,这也是 x86 小众多核芯片的共性特征。


结尾总结


国产 CPU 强制要求内存插满,本质并非设计缺陷,而是现阶段Chiplet 碎片化架构 + 片间互联带宽延迟受限 + 软件生态打磨不足共同作用下的折中最优解;英特尔凭借一体式大芯片架构、成熟互联总线与长年累月的系统生态积累,拥有更高的容错空间。


随着国产芯片迭代、片间互联技术升级、Linux 内核持续适配优化,未来国产服务器 CPU 的内存使用容错性会不断提升,但现阶段做国产化算力建设,遵循全通道均匀插内存的原则,依旧是保障业务稳定高性能运行的第一准则。


作者丨张振磊
来源丨公众号:磊哥谈技术(ID:lgtjs1012)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:[email protected]

前往微信阅读全文

内容来自公众号,可前往微信查看原文。

查看作者的更多文章 →订阅更新、RSS 与阅读指南 →