2. 硬件选型:CPU、内存、网卡与PCIe的博弈

做低延迟交易系统,说白了就是在跟物理定律赛跑。你写的代码再漂亮,算法再牛逼,如果硬件选型没跟上,一切都是白搭。我见过太多团队,软件优化做到极致了,结果发现瓶颈在PCIe总线上,那种感觉,就像你开着一辆法拉利,结果轮胎是自行车胎——根本跑不起来。

这一章,咱们就聊聊硬件选型那些事儿。CPU、内存、网卡、PCIe,这四个家伙凑在一起,就是一场微秒级的博弈。选对了,你的系统如虎添翼;选错了,嗯,你懂的。

2.1 CPU:核心频率 vs. 核心数量

很多人一上来就问:「我该买多少核的CPU?」

我的回答通常是:「你先告诉我,你的延迟预算多少?」

交易系统里,CPU的核心频率远比核心数量重要。为什么?因为你的任务大多是单线程的——行情解析、订单生成、风控检查,这些活儿一个线程就能干完。你搞个64核的CPU,结果每个核频率只有2.0GHz,那还不如一个4核5.0GHz的来得实在。

我个人习惯,选CPU时先看三样东西:

  • 单核Turbo频率:越高越好,5.0GHz起步
  • L3缓存大小:至少20MB以上,越大越好
  • 内存通道数:4通道是底线,6通道更佳

我在项目中遇到过一件事,印象特别深。有个团队用了一款服务器级CPU,32核,频率只有2.6GHz。他们觉得核多就是王道,结果行情来了,单线程处理延迟飙到50微秒。后来换了颗8核5.2GHz的消费级CPU,延迟直接降到12微秒。你想想看,这差距有多大?

核心观点:交易系统是延迟敏感型,不是吞吐量敏感型。宁可要4个高频核,也不要32个低频核。

2.2 内存:延迟 vs. 带宽

内存这玩意儿,很多人只看容量。8GB够不够?16GB够不够?其实在低延迟场景下,延迟比容量重要得多。

你想想看,你的行情数据、订单状态、风控参数,全都在内存里。每次访问内存,如果多花10纳秒,累积下来就是几微秒的延迟。对于高频交易来说,这已经不可接受了。

我建议你关注这几个参数:

  • CL值(CAS Latency):越低越好,DDR5的CL30以下算合格
  • 频率:DDR5-6000起步,但别盲目追求高频,CL值更重要
  • Rank数量:单Rank延迟最低,双Rank次之

这里有个坑,我曾经踩过。有一回我选了DDR5-8000的内存,频率很高,但CL值高达40。结果实际测试下来,延迟比DDR4-3200 CL14还高。为什么?因为高频内存的CL值太大,导致绝对延迟反而变差了。嗯,这里要注意,绝对延迟 = CL值 × 周期时间,别被频率忽悠了。

实战技巧:如果你预算有限,优先选低CL值的内存,而不是高频率。DDR4-3200 CL14在延迟上往往优于DDR5-6000 CL40。

2.3 网卡:硬件卸载与内核旁路

网卡是交易系统的咽喉。数据从网络进来,经过网卡、PCIe、内存,最后到CPU。每一步都是延迟。

传统的网卡,数据进来后先走内核协议栈,再拷贝到用户态。这一套下来,几十微秒就没了。对于微秒级交易系统来说,这简直是灾难。

所以,我们得用智能网卡,支持硬件卸载和内核旁路。具体来说:

  • 硬件时间戳:网卡自己打时间戳,精度到纳秒级
  • RSS(接收端缩放):把不同流分配到不同队列,避免CPU争抢
  • DPDK / Solarflare OpenOnload:绕过内核,直接用户态收发包

我个人习惯用Solarflare的网卡,配合OpenOnload,延迟能压到1微秒以内。当然,Mellanox的ConnectX系列也不错,支持RDMA,适合做极低延迟场景。

我记得有一次,客户用的是一块普通Intel网卡,延迟在10微秒左右。换了Solarflare X2522之后,延迟降到1.2微秒。客户当场就愣住了,说「这网卡是开挂了吧?」其实不是开挂,是硬件卸载的功劳。

注意:DPDK虽然好,但需要你重新写网卡驱动和收发包逻辑。如果你团队没有底层开发经验,建议先用Solarflare的OpenOnload,开箱即用。

2.4 PCIe:带宽与拓扑的博弈

PCIe是连接CPU、网卡、GPU、NVMe SSD的桥梁。很多人忽略它,觉得「插上就能用」。但在我眼里,PCIe是延迟优化的重灾区。

先看带宽。PCIe 3.0 x8的带宽是8GB/s,PCIe 4.0 x16是32GB/s。如果你的网卡是100Gbps(约12.5GB/s),PCIe 3.0 x8勉强够用,但一旦有突发流量,就会卡住。我建议至少用PCIe 4.0 x16,或者PCIe 5.0 x16,给未来留点余量。

再看拓扑。CPU的PCIe通道是有限的,一般消费级CPU只有20-24条,服务器级有48-64条。你插一块网卡用掉16条,插一块NVMe SSD用掉4条,剩下的可能就不够了。

这里有个关键点:PCIe Switch。如果你需要插多块网卡或GPU,就得用PCIe Switch来扩展通道。但Switch会引入额外的延迟,大约100-200纳秒。别小看这200纳秒,在微秒级系统里,这就是20%的延迟预算。

我曾经在一个项目里,为了插4块网卡,用了PCIe Switch。结果延迟从1.5微秒涨到1.8微秒。虽然只多了300纳秒,但客户不干了。最后我们重新设计了拓扑,把两块网卡直接连CPU,另外两块走Switch,只做备份用。这才把延迟压回去。

经验之谈:PCIe拓扑设计,遵循「关键路径直连」原则。你的主网卡、主NVMe SSD,一定要直连CPU,别走Switch。次要设备可以走Switch,但别影响主路径。

2.5 一张图看懂硬件博弈

说了这么多,咱们用一张SVG图来总结一下。这张图展示了CPU、内存、网卡、PCIe之间的延迟关系,以及优化方向。

硬件选型博弈:延迟与带宽的平衡 CPU 核心频率 > 核心数量 内存 CL值 > 频率 网卡 硬件卸载 + 内核旁路 PCIe 直连 > Switch ~50-100ns ~1-5μs ~100-200ns (Switch) 优化方向:高频CPU → 低CL内存 → 智能网卡 → 直连PCIe

这张图里,CPU是核心,内存和网卡是左右护法,PCIe是连接一切的桥梁。每个环节都有它的延迟代价,你的任务就是找到那个「性价比最高」的平衡点。

2.6 实战选型清单

最后,我列一个实战选型清单,供你参考。这是我个人在多个项目中验证过的配置:

组件 推荐型号 关键参数 预算参考
CPU Intel Core i9-13900K / AMD Ryzen 9 7950X 单核5.8GHz, L3 36MB 中高
内存 DDR5-6000 CL30 (如G.Skill Trident Z5) CL30, 2x16GB双通道
网卡 Solarflare X2522 / Mellanox ConnectX-6 Dx 25/100GbE, 硬件时间戳, DPDK支持
PCIe 直连CPU插槽, 避免Switch PCIe 4.0 x16 或 5.0 x16
NVMe SSD Samsung PM9A3 / Kioxia CM6 PCIe 4.0, 延迟< 5μs

避坑指南:我曾经为了省钱,用了PCIe 3.0的网卡和SSD,结果发现PCIe带宽成了瓶颈。后来全换成4.0,延迟降了30%。记住,PCIe版本不要省,这是你整个系统的骨架。

好了,硬件选型这块就聊到这儿。你可能会问:「选好了硬件,然后呢?」嗯,下一章咱们聊聊BIOS调优和操作系统层面的优化。那些东西,才是真正把硬件潜力榨干的关键。


专注资料整理