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的核心逻辑:
NUMA对高频交易的影响:
- 内存访问延迟翻倍:访问远程内存比本地内存慢40%-80%。如果你的交易线程和它要访问的数据不在同一个NUMA节点,延迟会飙升
- 缓存一致性开销:两个CPU核心频繁修改同一块数据,会导致缓存一致性协议(MESI)频繁通信,性能急剧下降
- 中断亲和性:网卡中断要绑定到正确的CPU核心,否则中断处理线程和数据消费线程跨NUMA通信,延迟直接爆炸
NUMA优化三板斧:
- 绑定核心和内存:使用
numactl或taskset将线程绑定到指定核心,同时分配本地内存 - 避免跨Socket通信:行情接收、策略计算、订单发送尽量放在同一个NUMA节点
- 中断隔离:将网卡中断绑定到专用核心,不要和交易逻辑核心混用
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选型检查清单,你可以直接拿来用:
- 全核满载频率:≥4.0GHz,确保散热不降频
- 核心数量:8-16物理核,够用就好
- L1数据缓存:≥32KB,最好64KB
- L2缓存:≥512KB/核
- L3缓存:≥16MB,但不要超过32MB(避免延迟增加)
- NUMA节点数:≤2个,越少越好
- 支持指令集:AVX-512(Intel)、AVX2(AMD)、NEON(ARM)
- 中断重定向:支持MSI-X,方便绑定中断
- 功耗:TDP ≤ 200W,否则散热成本太高
最后提醒一句:别只看参数,一定要实测。我见过太多「纸面性能完美,实际跑起来拉胯」的案例。拿你的交易逻辑,在目标CPU上跑一遍延迟分布图,比看任何评测都靠谱。
公众号:蓝海资料掘金营,微信deep3321