3、CPU选型:核心频率、核心数量、缓存架构、NUMA架构、Intel vs AMD vs ARM

CPU选型,说白了就是给交易系统选大脑。这个大脑既要反应快,又要能同时处理多路信息,还得保证数据不丢不乱。我做了这么多年高频系统,见过太多因为CPU选型翻车的案例——要么延迟高得离谱,要么吞吐量上不去,要么干脆跑着跑着就崩了。

今天咱们就把CPU选型的几个核心维度掰开揉碎讲清楚。嗯,这里要注意,每个维度都不是孤立的,它们之间会互相影响。

3.1 核心频率:越快越好?不一定

核心频率,就是CPU每秒能执行多少个指令周期。3GHz意味着每秒30亿次。听起来很猛对吧?

但我在项目中遇到过一个问题:某款4.5GHz的CPU,跑我们的交易逻辑,延迟反而比3.8GHz的还高。为什么?因为频率越高,发热越大,一旦触发降频保护,性能直接腰斩。

核心观点:

  • 单线程延迟敏感型任务(比如信号生成、订单发送):频率越高越好,但必须保证散热跟得上
  • 多线程并行任务(比如行情解析、风控计算):频率够用就行,核心数更重要
  • 避坑指南:我曾经选过一款号称5.2GHz的CPU,结果满载跑3分钟就降频到3.6GHz。后来我学乖了,只看「全核满载频率」,不看单核峰值频率

实战建议:高频交易场景,优先选全核频率≥4.0GHz的CPU。如果预算允许,上液冷或高规格风冷,确保满载不降频。

3.2 核心数量:8核够用吗?32核浪费吗?

核心数量这个问题,我经常被问到。有人说「核心越多越好」,有人说「高频交易用不了那么多核」。其实都对,也都不对。

咱们先看一个典型的高频交易系统需要哪些线程:

任务类型 建议核心数 说明
行情接收与解析 1-2核 绑定专用核心,避免中断干扰
策略计算(信号生成) 1-2核 延迟敏感,独占核心
订单管理与发送 1核 必须独占,不能共享
风控与监控 1-2核 可以与其他低优先级任务共用
日志与统计 1核 后台任务,不参与实时路径

你看,一个完整的交易节点,核心需求大概在6-8核左右。但为什么很多人推荐16核、32核?因为还有操作系统、网络中断、内存管理这些开销。我个人习惯留2-4个核心给系统用,剩下的全给交易逻辑。

我的经验:8核12线程以上的CPU,基本能满足大多数高频交易场景。核心太多反而可能引入NUMA问题(下面会讲)。别盲目追求核心数,够用就好。

3.3 缓存架构:L1/L2/L3,谁更重要?

缓存,是CPU和内存之间的「高速公路」。你想想看,CPU每秒处理几十亿次指令,但内存访问一次要几十纳秒。如果没有缓存,CPU大部分时间都在等数据。

高频交易对缓存的要求非常苛刻。因为我们的数据访问模式很特殊:

  • 行情数据:连续写入,频繁读取,数据量不大但实时性极高
  • 订单簿:随机访问,更新频繁,对L1缓存命中率要求极高
  • 策略参数:只读为主,适合放在L2/L3

缓存选型要点:

  • L1缓存:越大越好,尤其是数据缓存(L1-D)。我见过一款CPU,L1-D从32KB提升到64KB,订单簿操作延迟降低了12%
  • L2缓存:每个核心独享,建议≥512KB。太小的话,频繁的缓存未命中会拖死性能
  • L3缓存:所有核心共享,建议≥16MB。L3大一点,可以减少跨核心数据共享的延迟

注意:缓存不是越大越好。缓存越大,访问延迟也会略微增加。我曾经测试过两款CPU:一款L3 32MB,另一款L3 64MB。结果64MB的那款在随机访问场景下反而慢了3%。因为缓存太大,命中率没提升多少,但访问路径变长了。

3.4 NUMA架构:多路CPU的甜蜜陷阱

NUMA(非统一内存访问架构),说白了就是「每个CPU有自己的本地内存,访问别人的内存要绕路」。这个绕路,在高频交易里可能是致命的。

我画了一张图,帮你理解NUMA的核心逻辑:

CPU 0 (Socket 0) 核心0 核心1 核心2 核心3 L1/L2缓存 (每核独享) L3缓存 (共享) 本地内存 (Local) 低延迟 (~80ns) CPU 1 (Socket 1) 核心4 核心5 核心6 核心7 L1/L2缓存 (每核独享) L3缓存 (共享) 本地内存 (Local) 低延迟 (~80ns) 跨Socket通信 远程内存访问 (~140ns) NUMA架构示意图 本地内存访问延迟约80ns,远程内存访问延迟约140ns 跨Socket通信会增加30%-50%的延迟

NUMA对高频交易的影响:

  • 内存访问延迟翻倍:访问远程内存比本地内存慢40%-80%。如果你的交易线程和它要访问的数据不在同一个NUMA节点,延迟会飙升
  • 缓存一致性开销:两个CPU核心频繁修改同一块数据,会导致缓存一致性协议(MESI)频繁通信,性能急剧下降
  • 中断亲和性:网卡中断要绑定到正确的CPU核心,否则中断处理线程和数据消费线程跨NUMA通信,延迟直接爆炸

NUMA优化三板斧:

  1. 绑定核心和内存:使用 numactltaskset 将线程绑定到指定核心,同时分配本地内存
  2. 避免跨Socket通信:行情接收、策略计算、订单发送尽量放在同一个NUMA节点
  3. 中断隔离:将网卡中断绑定到专用核心,不要和交易逻辑核心混用

3.5 Intel vs AMD vs ARM:三足鼎立怎么选?

这三家的CPU我都用过,各有各的脾气。咱们直接上干货对比:

维度 Intel (Xeon) AMD (EPYC) ARM (Ampere Altra)
单核性能 ★★★★★ 最强 ★★★★☆ 很强 ★★★☆☆ 中等
核心密度 ★★★☆☆ 最多28核 ★★★★★ 最多128核 ★★★★★ 最多128核
缓存架构 ★★★★★ L3大且高效 ★★★★☆ L3大但延迟略高 ★★★☆☆ 缓存较小
NUMA复杂度 ★★★☆☆ 2-4路 ★★☆☆☆ 4-8路,复杂 ★★★★★ 单路为主,简单
生态兼容性 ★★★★★ 最好 ★★★★☆ 好 ★★☆☆☆ 需重新编译
功耗/性能比 ★★★☆☆ 一般 ★★★★☆ 较好 ★★★★★ 最佳

我的选择建议:

  • 追求极致单线程延迟:选Intel。我目前在用的主力机型就是Intel Xeon Gold 6xxx系列,单核性能确实没对手。但要注意,Intel的AVX-512指令集在高频交易里很有用,做向量化计算能大幅降低延迟
  • 需要高核心密度+性价比:选AMD。EPYC的核心数多,价格还便宜。但NUMA架构复杂,需要花时间调优。我曾经在一个AMD平台上踩过坑——跨CCD(核心复合体)通信延迟高达200ns,后来通过绑定核心才解决
  • 低功耗+云原生场景:选ARM。Ampere Altra的单核性能虽然不如Intel,但功耗只有一半。如果你做的是中低频策略,或者需要大规模部署,ARM是个好选择。不过要注意,很多交易软件还没有ARM版本,需要自己编译

避坑指南:我曾经在一个项目中,为了省钱选了AMD EPYC 64核。结果因为NUMA节点太多(8个),跨节点通信导致延迟不稳定。后来我们换成了Intel 28核,虽然核心数少了,但延迟稳定在2微秒以内。所以,核心数不是越多越好,稳定才是王道。

3.6 实战选型清单

最后,我整理了一份CPU选型检查清单,你可以直接拿来用:

  1. 全核满载频率:≥4.0GHz,确保散热不降频
  2. 核心数量:8-16物理核,够用就好
  3. L1数据缓存:≥32KB,最好64KB
  4. L2缓存:≥512KB/核
  5. L3缓存:≥16MB,但不要超过32MB(避免延迟增加)
  6. NUMA节点数:≤2个,越少越好
  7. 支持指令集:AVX-512(Intel)、AVX2(AMD)、NEON(ARM)
  8. 中断重定向:支持MSI-X,方便绑定中断
  9. 功耗:TDP ≤ 200W,否则散热成本太高

最后提醒一句:别只看参数,一定要实测。我见过太多「纸面性能完美,实际跑起来拉胯」的案例。拿你的交易逻辑,在目标CPU上跑一遍延迟分布图,比看任何评测都靠谱。


公众号:蓝海资料掘金营,微信deep3321