每天有超过 11 亿个唯一 IP 地址通过 Cloudflare 网络; 它每秒处理超过 100 万个 HTTP 请求; 她与 95% 的互联网人口的差距在 200 毫秒之内。 我们的网络覆盖 90 多个国家的 XNUMX 个城市,我们的工程师团队构建了极其快速、可靠的基础设施。
我们对我们的工作感到非常自豪,并致力于帮助使互联网变得更好、更安全。 Cloudflare 的硬件工程师对服务器及其组件有深入的了解,可以了解和选择最佳硬件以最大限度地提高其性能。
我们的软件堆栈可处理高负载计算,并且高度依赖 CPU,这要求我们的工程师在堆栈的每个级别不断优化 Cloudflare 的效率和可靠性。 在服务器端,提高处理能力的最简单方法是添加 CPU 内核。 服务器可以容纳的核心越多,它可以处理的数据就越多。 这对我们来说很重要,因为我们的产品和客户的种类随着时间的推移而不断增加,而请求的增长需要服务器性能的提高。 为了提高它们的性能,我们需要增加核心的密度 - 这正是我们所实现的。 下面我们提供了自 2015 年以来我们部署的服务器处理器的详细数据,包括核心数量:
-
PCIE 6
PCIE 7
PCIE 8
PCIE 9
入门
2015
2016
2017
2018
中央处理器
英特尔至强E5-2630 v3
英特尔至强E5-2630 v4
Intel Xeon Silver 4116
英特尔至强白金6162
物理核心
2 x 8
2 x 10
2 x 12
2 x 24
TDP
2 X 85W
2 X 85W
2 X 85W
2 X 150W
每个核心的 TDP
10.65W
8.50W
7.08W
6.25W
2018 年,我们通过 Gen 9 在每台服务器的核心总数上实现了巨大飞跃。 与第 33 代相比,环境影响减少了 8%,使我们有机会增加每个机架的容量和计算能力。 散热设计要求(
我们的主要定义指标是每瓦特的请求数量。 我们可以通过添加核心来增加每秒的请求数,但我们需要保持在功率预算范围内。 我们受到数据中心电力基础设施的限制,它与我们选择的配电模块一起,为我们每个服务器机架提供了一定的上限。 将服务器添加到机架会增加功耗。 如果我们超过每个机架的能源限制并且必须添加新机架,运营成本将显着增加。 我们需要提高处理能力,同时保持在相同的功耗范围内,这将增加每瓦请求数,这是我们的关键指标。
正如您可能已经猜到的,我们在设计阶段就仔细研究了能耗。 上表显示,如果每个核心的 TDP 高于当前一代,我们不应该浪费时间部署更多耗能的 CPU - 这将对我们的指标(每瓦请求数)产生负面影响。 我们仔细研究了市场上 X 代的现成运行系统并做出了决定。 我们正在从 48 核 Intel Xeon Platinum 6162 双插槽设计转向 48 核 AMD EPYC 7642 单插槽设计。
-
英特尔
AMD公司
中央处理器
至强Platinum 6162
EPYC 7642
微架构
《天湖》
“禅宗2”
代码名称
“天湖 SP”
“罗马”
技术流程
14nm
7nm
核心
2 x 24
48
频率
1.9 GHz
2.4 GHz
L3 缓存/套接字
24×1.375MiB
16×16MiB
内存/插槽
6 通道,最高可达 DDR4-2400
8 通道,最高可达 DDR4-3200
TDP
2 X 150W
225W
PCIe/插槽
48车道
128车道
ISA
x86 64
x86 64
从规格中可以清楚地看出,AMD 的芯片将允许我们在降低 TDP 的同时保持相同数量的核心。 第 9 代的每核心 TDP 为 6,25 W,第 X 代为 4,69 W。 减少 25%。 由于频率的增加,或许还有一个插槽的更简单的设计,可以认为AMD芯片在实践中会表现得更好。 我们目前正在运行各种测试和模拟,看看 AMD 的表现会好多少。
现在,我们要注意的是,TDP 是制造商规格的简化指标,我们在服务器设计和 CPU 选择的早期阶段使用了该指标。 谷歌快速搜索显示,AMD 和英特尔定义 TDP 的方法不同,导致该规范不可靠。 真实的CPU功耗,更重要的是服务器功耗,才是我们在做出最终决定时真正使用的。
生态系统准备情况
为了开始选择下一代处理器,我们研究了来自不同制造商的各种 CPU,这些 CPU 非常适合我们的软件堆栈和服务(用 C、LuaJIT 和 Go 编写)。 我们已经详细描述了一套测量速度的工具
我们测试了具有不同核心数量、插槽数量和频率的各种处理器。 由于本文是关于我们选择 AMD EPYC 7642 的原因,因此本博客中的所有图表都重点关注 AMD 处理器与 Intel Xeon Platinum 6162 相比的性能
结果对应于一台服务器使用每种处理器变体的测量结果 - 即使用两个来自 Intel 的 24 核处理器,或使用一个来自 AMD 的 48 核处理器(Intel 服务器有两个插槽,AMD EPYC 服务器有一个插槽)。 在BIOS中我们设置与正在运行的服务器相对应的参数。 AMD 为 3,03 GHz,Intel 为 2,5 GHz。 大大简化后,我们预计在相同数量的核心下,AMD 的性能将比 Intel 好 21%。
加密
AMD 看起来很有希望。 它在公钥加密方面的性能提高了 18%。 使用对称密钥时,它会失去 AES-128-GCM 加密选项,但总体性能相当。
压缩
在边缘服务器上,我们压缩大量数据以节省带宽并提高内容交付速度。 我们通过 C 库 zlib 和 brotli 传递数据。 所有测试均在内存中的 blog.cloudflare.com HTML 文件上运行。
使用 gzip 时 AMD 平均获胜 29%。 就 brotli 而言,在我们用于动态压缩的质量为 7 的测试中,结果甚至更好。 在 brotli-9 测试中,出现了急剧下降 - 我们通过 Brotli 消耗大量内存并溢出缓存这一事实来解释这一点。 然而,AMD以较大优势获胜。
我们的许多服务都是用 Go 编写的。 在下图中,我们使用字符串库在 32 KB 行上通过 RegExp 仔细检查了 Go 中的加密和压缩速度。
去密码学
去压缩
去正则表达式
围棋弦乐
AMD 在 Go 的所有测试中都表现更好,除了 ECDSA P256 Sign,它落后了 38%——这很奇怪,因为它在 C 中的表现要好 24%。 值得弄清楚那里发生了什么。 总体而言,AMD 获胜不多,但仍然显示出最好的成绩。
LuaJIT
我们经常在栈上使用LuaJIT。 这是将 Cloudflare 所有部分粘合在一起的粘合剂。 我们很高兴 AMD 也在这里获胜。
总体而言,测试表明 EPYC 7642 的性能优于两个 Xeon Platinum 6162。AMD 在多项测试中失败 - 例如 AES-128-GCM 和 Go OpenSSL ECDSA-P256 Sign - 但平均而言,在所有其他测试中获胜25% 。
工作负载模拟
经过快速测试后,我们通过另一组模拟运行服务器,其中将合成负载应用于软件边缘堆栈。 这里我们模拟一个场景工作负载,其中包含实际工作中可能遇到的不同类型的请求。 请求因数据量、HTTP 或 HTTPS 协议、WAF 源、Workers 和其他许多变量而异。 下面是两个 CPU 对于我们最常遇到的请求类型的吞吐量的比较。
图表中的结果是根据第 9 代基于 Intel 的机器的基线进行测量的,x 轴上的值标准化为 1,0。 例如,通过 HTTPS 获取简单的 10 KiB 请求,我们可以看到 AMD 在每秒请求数方面比 Intel 好 1,5 倍。 平均而言,AMD 在这些测试中的表现比英特尔高出 34%。 考虑到单个 AMD EPYC 7642 的 TDP 为 225 W,两个 Intel 处理器的 TDP 为 300 W,事实证明,就“每瓦请求数”而言,AMD 的结果是 Intel 的 2 倍!
此时,我们已经明显倾向于 AMD EPYC 7642 作为我们未来的 X 代 CPU 的单插槽选项。我们非常有兴趣了解 AMD EPYC 服务器在实际工作中的表现,我们立即向他们发送了几台服务器。一些来自数据中心。
真实的工作
当然,第一步是让服务器做好实际工作的准备。 我们机队中的所有机器都使用相同的流程和服务,这为正确比较性能提供了绝佳的机会。 与大多数数据中心一样,我们部署了几代服务器,并将服务器收集到集群中,以便每个类别都包含大致相同代的服务器。 在某些情况下,这可能会导致集群之间的回收曲线不同。 但不是我们。 我们的工程师对各代的CPU利用率进行了优化,因此无论特定机器的CPU是8核还是24核,CPU利用率通常与其他机器相同。
该图说明了我们对利用率相似性的评论 - X 代服务器中使用 AMD CPU 和第 9 代服务器中使用 Intel 处理器之间没有显着差异。这意味着测试服务器和基准服务器的负载相同。 伟大的。 这正是我们在服务器中努力追求的目标,我们需要这个来进行公平的比较。 下面两张图显示了服务器级别一个 CPU 核心和所有核心处理的请求数。
每个核心的请求数
向服务器发出请求
可以看出,AMD 平均多处理 23% 的请求。 一点也不差! 我们经常在博客上撰写有关提高第 9 代性能的方法。现在我们拥有相同数量的核心,但 AMD 以更少的功耗完成更多的工作。 从核心数量和 TDP 的规格中可以清楚地看出,AMD 提供了更高的速度和更高的能效。
但正如我们已经提到的,TDP并不是一个标准规格,对于所有制造商来说也不是一样的,所以让我们看看实际的能源使用情况。 通过并行测量服务器的能耗与每秒请求数,我们得到了下图:
根据每瓦每秒请求数计算,运行在 AMD 处理器上的 X 代服务器的效率提高了 28%。 鉴于 AMD 的 TDP 降低了 25%,人们可以期待更多,但应该记住,TDP 是一个模糊的特性。 我们发现,在远高于基准频率的情况下,AMD 的实际功耗与标称的 TDP 几乎相同; 英特尔没有这个。 这是 TDP 不是可靠的能源消耗估算的另一个原因。 我们的第 9 代服务器中的 Intel CPU 集成到多节点系统中,而 AMD 的 CPU 在标准 1U 外形服务器中运行。 这对 AMD 不利,因为多节点服务器应该提供更高的密度,同时每个节点的功耗更低,但 AMD 在每个节点的功耗方面仍然超过了英特尔。
在大多数规格、测试模拟和实际性能的比较中,1P AMD EPYC 7642 配置的性能明显优于 2P Intel Xeon 6162。在某些情况下,AMD 的性能可以提高高达 36%,我们相信通过优化硬件和软件,我们可以持续实现这一改进。
结果AMD赢了。
其他图表显示 99 小时内运行 NGINX 的平均延迟和 p24 延迟。 平均而言,AMD 上的进程运行速度快了 25%。 在 p99 上,它的运行速度会快 20-50%,具体取决于一天中的时间。
结论
Cloudflare 的硬件和性能工程师进行了大量的测试和研究,以确定适合我们客户的最佳服务器配置。 我们喜欢在这里工作,因为我们可以解决此类大问题,并且我们可以通过无服务器边缘计算等服务以及 Magic Transit、Argo Tunnel 和 DDoS 保护等一系列安全解决方案来帮助您解决问题。 Cloudflare 网络中的所有服务器均配置为可靠运行,我们始终努力使每一代服务器都比前一代服务器更好。 我们相信 AMD EPYC 7642 是 X 代处理器的答案。
使用 Cloudflare Workers,开发人员可以将他们的应用程序部署在我们遍布全球的不断扩展的网络上。 我们很自豪能够让我们的客户专注于编写代码,而我们专注于云中的安全性和可靠性。 今天,我们更高兴地宣布,他们的工作将部署在运行第二代 AMD EPYC 处理器的 X 代服务器上。
EPYC 7642 处理器,代号“Rome”[罗马]
通过使用 AMD EPYC 7642,我们能够提高性能并更轻松地将网络扩展到新城市。 罗马不是一天建成的,但它很快就会离你们许多人更近。
在过去几年中,我们一直在尝试使用 Intel 和 AMD 的许多 x86 芯片以及 ARM 的处理器。 我们期待这些CPU厂商未来能够继续与我们合作,共同建设更加美好的互联网。
来源: habr.com