Cloudflare 于 2026 年 3 月正式发布第 13 代服务器,基于 AMD EPYC 第五代 Turin 处理器。与上一代 Gen12 采用大规模 3D V-Cache 不同,Gen13 选择了高核心密度路线,每核心 L3 缓存从 12MB 降至 2MB。这一看似退步的设计选择,最终实现了 2 倍边缘计算吞吐量的突破。本文将深入剖析这一硬件架构权衡背后的工程逻辑。

从缓存优先到核心优先的架构转变

Gen12 服务器采用 AMD EPYC 第四代 Genoa-X 处理器,其中 9684X 型号配备 96 核心 192 线程,每核心拥有 12MB L3 缓存。这一海量缓存设计非常适合 Cloudflare 当时的 FL1 请求处理层 —— 基于 NGINX 和 LuaJIT 构建的代码高度依赖缓存局部性。然而,当 Cloudflare 评估下一代硬件时,发现了一个两难局面:提供最大吞吐量提升的 CPU 伴随着显著的缓存缩减。

AMD EPYC Turin 处理器家族带来了惊人的核心数增长。最高密度的 Turin 9965 提供 192 核心 384 线程(启用 SMT 后),相比 Gen12 实现了 100% 的核心数增长。然而,高密度 OPN 做出了一种明确的架构取舍:优先考虑吞吐量而非每核心缓存。经过仔细分析,Turin 的 192 核心共享 384MB L3 缓存,这意味着每核心仅能访问 2MB 缓存 —— 仅相当于 Gen12 的六分之一。对于任何严重依赖缓存局部性的工作负载而言,这种削减构成了严峻挑战。

具体而言,Gen13 三个处理器选项的规格对比如下:Turin 9755 提供 128 核心 256 线程,每核心 4MB L3 缓存;Turin 9845 提供 160 核心 320 线程,每核心 2MB L3 缓存;Turin 9965 提供 192 核心 384 线程,每核心 2MB L3 缓存。相比之下,Gen12 的 Genoa-X 9684X 提供 96 核心 192 线程,每核心 12MB L3 缓存。这一代际变化意味着缓存容量的缩减幅度远超核心数的增长幅度。

性能计数器诊断出的瓶颈

面对缓存大幅缩减,Cloudflare 工程团队并未假设存在问题,而是通过 AMD uProf 工具收集 CPU 性能计数器和分析数据来精确诊断。测试结果揭示了几个关键问题:L3 缓存未命中率相比配备 3D V-Cache 的 Gen12 服务器急剧上升;内存获取延迟主导了请求处理时间,因为原本保存在 L3 中的数据现在需要访问 DRAM;延迟惩罚随着 CPU 利用率提升而加剧,因为缓存争用情况恶化。

这一问题的根本原因在于延迟数量级的差异。L3 缓存命中大约需要 50 个周期完成;而 L3 缓存未命中需要 DRAM 访问则需要 350 个以上周期,差距接近一个数量级。由于每核心缓存减少了 6 倍,FL1 在 Gen13 上更频繁地访问内存,从而产生严重的延迟惩罚。

初步测试结果验证了这一分析。在 Gen13 上运行 FL1 时,虽然 Turin 处理器能够达到更高吞吐量,但代价是极高的延迟成本。具体数据显示:相比 Gen12 基线,Turin 9755(FL1)吞吐量提升 10%,但低至中等 CPU 利用率下延迟增加 10%,高利用率下延迟增加超过 20%;Turin 9845(FL1)吞吐量提升 31%,低至中等利用率下延迟增加 30%,高利用率下延迟增加超过 50%;Turin 9965(FL1)吞吐量提升 62%,但延迟表现与 9845 相似,高利用率下延迟增加同样超过 50%。

这意味着虽然 Turin 9965 能带来 60% 的吞吐量增益(这对于 Cloudflare 的总体拥有成本 TCO 是最有吸引力的),但超过 50% 的延迟惩罚是不可接受的。请求处理延迟的增加将直接影响客户体验。

硬件调优的有限突破

面对这一困境,Cloudflare 与 AMD 合作进行针对性优化实验。团队系统测试了多种配置方案。

硬件调优方面,调整硬件预取器和 Data Fabric(DF)Probe Filters 仅显示了边际收益。扩展 Workers 方面,启动更多 FL1 workers 虽然提升了吞吐量,但损害了其他生产服务的资源。CPU 固定与隔离方面,调整工作负载隔离配置以寻找最佳组合,成功有限。

最终发现最有价值的配置是 AMD 的 Platform Quality of Service(PQOS)扩展。PQOS 能够对共享资源(如缓存和内存带宽)进行细粒度 regulation。由于 Turin 处理器由一个 I/O Die 和最多 12 个 Core Complex Dies(CCD)组成,每个 CCD 在最多 16 个核心之间共享 L3 缓存,团队对此进行了测试。

实验结果显示,在 CCD 级别为 FL1 分配专用 L3 缓存份额收效甚微。然而,当将概念扩展到插槽级别、 dedicating 一整个 CCD 专用于 FL1 时,团队看到了有意义的吞吐量提升,同时将延迟保持在可接受范围内。具体而言,NUMA 感知的核心亲和性(等效于插槽级别的 PQOS)使用 6 个 CCD(与 NUMA 域对齐)运行 FL1,在每个 CCD 中共享 32MB L3 缓存,实现了超过 15% 的增量吞吐量增益。相比之下,PQOS 配置 1、2、3 在每个 CCD 的 32MB L3 缓存中为 FL1 分配 50% 至 75% 的配置,增量吞吐量增益均小于 5%,且其他服务显示出轻微降级迹象。

这些结果表明,单纯的缓存隔离无法根本解决问题。真正的突破来自于软件栈的重新设计。

FL2:消除缓存依赖的软件革命

硬件调优和资源配置仅提供了温和的收益,Cloudflare 意识到必须重写软件栈从根本上改变系统资源的利用方式。幸运的是,他们并非从零开始。在 2025 年生日周期间,Cloudflare 宣布已从零开始重建 FL1。FL2 是使用 Rust 对请求处理层进行全面重写,构建在 Pingora 和 Oxy 框架之上,取代了 15 年的 NGINX 和 LuaJIT 代码。

FL2 项目并非为解决 Gen13 缓存问题而启动,而是出于对更好安全性的需求(Rust 的内存安全)、更快的开发速度(严格的模块系统)以及整体性能提升(更少的 CPU、更少的内存、模块化执行)。然而,这一架构的清洁设计具有更好的内存访问模式和更少的动态分配,可能不像 FL1 那样依赖大规模 L3 缓存。这为 Cloudflare 提供了一个机会:通过 FL2 过渡来验证 Gen13 的吞吐量增益能否在无延迟惩罚的情况下实现。

当 FL2 推出时,Gen13 服务器的生产指标验证了团队的假设。结果显示:在 AMD Turin 9965(FL2)上,每 CPU% 的 FL 请求数比 FL1 提升 50%;相比 Gen12,延迟降低 70%;相比 Gen12,吞吐量提升 100%(即 2 倍)。

FL2 的新栈开箱即用的效率提升显著,甚至在系统优化之前就已实现。FL2 将延迟惩罚削减了 70%,使 Cloudflare 能够在严格遵守延迟 SLA 的情况下将 Gen13 推向更高的 CPU 利用率。在 FL1 上,这是不可能实现的。通过有效消除缓存瓶颈,FL2 使吞吐量能够随核心数线性扩展。在高密度 AMD Turin 9965 上,效果不可否认:团队实现了 2 倍的性能提升,解锁了硬件的全部潜力。

架构权衡的工程启示

Gen13 服务器的成功部署揭示了硬件软件协同设计的关键价值。Cloudflare 的 FL1 请求服务层在 Gen13 上遭遇了缓存争用墙,迫使在吞吐量和延迟之间做出不可接受的权衡。然而,团队没有妥协,而是构建了 FL2。

通过采用极简的内存访问模式设计,FL2 消除了对大规模 L3 缓存的依赖,允许性能随核心数线性扩展。在 Gen13 AMD Turin 平台上运行,FL2 解锁了 2 倍的吞吐量提升了 50% 的电源效率提升,同时将延迟保持在 SLA 范围内。这一飞跃有力地证明了硬件软件协同设计的重要性。

对于基础设施工程师而言,Gen13 案例提供了重要启示。首先,硬件规格的表面数字并不能直接映射到实际性能 —— 缓存与核心的权衡需要根据具体工作负载特性来评估。其次,现代 CPU 的 PQOS 功能为资源隔离提供了有价值的手段,但其效果受限于工作负载的缓存敏感性。第三,软件架构的演进可以彻底改变硬件选择的可行性 ——FL2 的 Rust 重写使高核心数低缓存的 CPU 成为最优选择。最后,在大规模边缘计算场景中,吞吐量与延迟的平衡需要综合考量 ——2 倍吞吐量配合 SLA 合规的价值远超单纯追求峰值性能。

Gen13 服务器的部署正在进行中,Cloudflare 计划通过进一步系统调优从 Gen13 集群中榨取更多性能。这一代服务器现在已准备好部署到 Cloudflare 全球边缘网络的各个位置,为数百万请求提供服务。


参考资料:Cloudflare 官方博客 Gen13 服务器发布公告(2026 年 3 月 23 日)