三年前,我们在评估 Qualcomm Centriq 后接受了 ARM 生态系统。 Centriq 及其 Falkor 内核显着降低了功耗,同时保持了与当时为我们的服务器群提供动力的处理器相当的性能。当我们完成移植我们的软件堆栈以与 ARM 兼容时,高通决定退出服务器业务。从那时起,我们一直在等待另一款服务器级 ARM 处理器,希望能够提高我们全球网络的能效,现在我们的全球网络遍布 100 多个国家/地区的 200 多个城市。 ARM 推出了 Neoverse N1 平台,这是创建高能效处理器的蓝图,授权机构可以定制原始设计以满足其特定要求。 Ampere 授权 Neoverse N1 平台创建 Ampere Altra,这是一种处理器,允许拥有和管理自己的服务器群的公司(如我们自己)利用不断扩大的 ARM 生态系统。我们一直在与 Ampere 合作,以确定 Altra 是否适合为我们的第一代 ARM 边缘服务器提供动力。 AWS Graviton2 是唯一可公开访问的其他基于 Neoverse N1 的处理器,但只能通过亚马逊的云产品组合提供。我们想了解两者之间的差异,因此我们比较了 Ampere 的单插槽服务器,名为 Mt。 Snow 配备了 Ampere Altra Q80-30 以对抗 AWS Graviton2 的 EC2 实例。 Ampere Altra 和 AWS Graviton2 都基于 ARM 的 Neoverse N1 平台,采用 TSMC 7nm 工艺制造。 N1 参考内核具有 11 级乱序执行流水线以及以下 ARM 命名法规范。一个 N1 内核包含 64KiB 的 L1 指令和 64KiB 的 L1 数据缓存以及一个专用的 L2 缓存,每个内核最多可以实现 1MiB。 L3 缓存或系统级缓存可以通过所有内核共享的高达 256MiB(每片最多 4MiB,最多 64 个片)来实现。一对 N1 核心可以选择通过组件聚合层组合成双核心配置,然后放置在名为 Coherent Mesh Network 或 CMN-600 的网状互连中,该网状互连支持多达 64 对核心,总共 128 个核心。我们可以通过检查cpuinfo中的CPU部分来验证这两个处理器是基于Neoverse N1平台的,它返回0xd0c,即Neoverse N1的指定部件号。
Ampere 将各种功能向后移植到 Ampere Altra 中,特别是推测性侧信道攻击缓解措施,包括来自 ARMv8.5 指令集架构的 Meltdown 和 Spectre(变体 1 和 2),在其 ISA (ARMv8.2 +)。 Ampere Altra 包含比 AWS Graviton2 多 25% 的物理内核和高 20% 的工作频率。由于 Altra 的核心数和频率更高,我们应该期望 Ampere Altra 在计算密集型工作负载中的性能比 AWS Graviton2 高 50%。 Ampere 和 AWS 都决定为每个内核实施 1MiB 的 L2 缓存,但只有 32MiB 的 L3 或系统级缓存,尽管 CMN-600 规范允许高达 256MiB。这使得 Ampere Altra 的 L3 每核缓存比率低于 AWS Graviton2,并在应用程序的工作集不适合 L3 缓存的情况下使 Altra 处于潜在劣势。我们使用 Debian Buster 对两个系统进行了映像,并下载了我们的开源基准测试套件 cf_benchmark。该基准套件在大约 15 到 30 分钟内执行 49 种不同的工作负载。每个工作负载都使用一个库,该库要么在我们的堆栈中使用过,要么在某个时候考虑过。由于基准测试和工作负载调用的库的持续时间相对较短,我们在任何新系统上运行 cf_benchmark 作为我们的冒烟测试以进行评估。我们在讨论新硬件(主要是处理器)时向我们的技术合作伙伴推荐 cf_benchmark,以确保这些工作负载能够成功编译和运行。我们多次运行 cf_benchmark 并没有观察到显着的运行间变化。与行业标准基准测试类似,我们使用几何平均值计算总分,以提供比使用各自工作负载子集的所有 49 个工作负载和类别分数的算术平均值更保守的结果。在单核场景中,cf_benchmark 会产生一个应用线程,占用一个硬件线程。在多核场景中,cf_benchmark 将根据需要产生尽可能多的应用程序线程,直到处理器上的所有硬件线程都被占用。两个处理器都实现了同步多线程,因此每个物理内核一次只能执行一个硬件线程。鉴于 Altra 在工作频率和核心数量方面的优势,Ampere Altra 在单核和多核性能方面处于领先地位。
在单核性能方面,Ampere Altra 比 AWS Graviton2 高出 16%。两种处理器之间的工作频率差异使 Ampere Altra 在我们超过一半的单核工作负载中具有高达 20% 的比例优势。在多核性能方面,Ampere Altra 继续保持比 AWS Graviton2 高 31% 的优势。我们预计 Ampere Altra 将获得 20% 到 50% 的理论优势,因为 Altra 的工作频率和内核数更高,同时考虑到与增加内核数相关的固有开销,主要是扩展网状网络。我们观察到,我们的大部分多核工作负载都在 20% 到 50% 的范围内。在 OpenSSL 和 LuaJIT 中,Ampere Altra 在单核性能方面与其工作频率成比例地扩展,并在多核性能方面继续随着其内核数量而横向扩展。 Ampere Altra 在绝大多数压缩和 Golang 工作负载中保持领先地位,但 Brotli 9 级压缩和一些无法在 100% CPU 利用率下保持两个处理器忙碌的 Golang 多核工作负载除外。如前所述,我们在诸如 TLS 握手处理之类的地方使用名为 BoringSSL 的 OpenSSL 分支。最初的 OpenSSL 带有一个名为“速度”的内置基准测试,用于测量单核和多核性能。此处发现的非对称和对称加密工作负载使处理器达到 100% 的 CPU 利用率。 Altra 的性能与我们在整个类别中的预期一致,在单核方面保持了比 AWS Graviton2 高 20% 的一贯优势,并继续随着其核心数量进行扩展,并且在多核性能方面平均提高了 47%。我们通常将 LuaJIT 描述为将 Cloudflare 结合在一起的粘合剂。 LuaJIT 在 Cloudflare 拥有悠久的历史,原因与它广泛用于视频游戏行业的原因相同,在这些行业中,性能和响应能力是不容商量的要求。尽管我们一直在从 LuaJIT 过渡到 Rust,但我们欢迎在 Ampere Altra 中实现的指令缓存一致性。指令缓存一致性旨在解决与 LuaJIT 相关的缺点,例如其自修改属性,其中需要提取的下一条指令不在指令缓存中,而是在数据缓存中。启用此功能后,指令缓存会变得一致或了解数据缓存中所做的更改。 L2 缓存包含 L1 指令缓存,这意味着在 L1 指令缓存中找到的任何缓存行也应该存在于 L2 缓存中。此外,L2 缓存拦截对任何 L2 缓存行进行的任何无效或存储,并将这些更改传播到 L1 指令缓存。 Ampere Altra 在单核性能方面表现良好,除了 fasta 两个处理器都停在管道前端。在 fasta 的多核版本中,由于 Ampere 实现了指令缓存一致性,Altra 并没有在前端花费那么多周期。所有其他工作负载在多核工作负载中继续扩展,其中二叉树占 73%。由于多核变体未能在两台服务器上运行,因此省略了 Spectral。
Brotli 和 Gzip 是我们在 Cloudflare 使用的两种主要压缩类型。我们发现高效压缩算法的价值,因为它帮助我们在更快的处理器上花费更多资源或拥有更大的存储容量之间找到平衡,除了能够更快地传输内容。除了 Brotli 9 级和 Gzip 4 级多核性能外,Ampere Altra 在两种压缩类型上都表现良好。在整个基准测试套件中,Brotli 9 级导致 Ampere Altra 和 AWS Graviton2 之间的最大增量。虽然我们在执行动态压缩时不使用 Brotli 7 级及更高级别,但我们决定进一步调查。根据历史观察,我们注意到大多数处理器在级别 9 时往往会出现显着的性能下降。压缩工作负载通常由更高的分支指令组合组成,我们发现大约 15% 到 20% 的动态指令是分支指令。直观地,我们首先查看了错误预测率,因为高错误率会迅速增加惩罚周期。然而,令我们惊讶的是,我们发现第 9 级的错误预测率非常低。通过进一步分析我们的数据集,我们发现常见的根本原因似乎是级别 9 发生的大量页面错误。 Ampere 已经证明,通过将页面大小从 4K 增加到 64K 字节,我们可以缓解瓶颈并带来 Ampere Altra 与 AWS Graviton2 持平。随着我们继续评估 Altra,我们计划在未来尝试大页面尺寸。 LuaJIT、Rust、C++ 和 Go 是我们的一些主要语言;此处发现的 Golang 工作负载包括加密、压缩、正则表达式和字符串操作。在绝大多数单核性能中,Ampere Altra 与 AWS Graviton2 的运行频率成正比。在多核性能方面,无法使处理器达到 100% CPU 利用率的工作负载不会与两个处理器各自的工作频率和内核数量成比例地扩展。我们无法在 AWS Graviton2 上收集任何遥测数据。功率本来是 AWS Graviton2 上一个有趣的数据点,但 EC2 实例没有公开频率或功率传感器。我们测试的安培型号是 Altra Q80-30,额定工作频率为 3.0GHz,热设计功率 (TDP) 为 210W。 Ampere Altra 在整个 cf_benchmark 中保持持续的工作频率,而 Altra 的动态电压和频率缩放 (DVFS) 机制偶尔会根据需要在工作负载之间降低其工作频率以降低功耗。封装功率因工作负载而异,但 Altra 从不消耗接近其额定 TDP 的任何地方,而默认风扇曲线将温度保持在 70C 以下。在系统层面,通过IPMI简单查询基板管理控制器,我们观察到安培服务器消耗不超过300W。更节能的服务器直接转化为在我们如何填充机架方面具有更大的灵活性,我们希望这种趋势将在生产中继续下去。
在我们自上而下的评估中,Ampere Altra 在整个基准测试套件中的表现基本上符合我们的预期。我们定期观察到两个 Neoverse N1 处理器在各自的工作频率和核心数上的表现,Ampere Altra 在这些关键领域中超过 AWS Graviton2。由于更高的工作频率,Ampere Altra 产生了更好的单核性能,并通过与 AWS Graviton2 相比在多核性能中使用更高的核数进行横向扩展,进一步扩大了其影响。我们还发现我们的 Ampere 评估服务器消耗的功率低于我们的预期,并希望这种趋势在生产中继续下去。在整个初始测试集和更多地了解底层架构的过程中,与当代 x86 对应物相比,我们发现了许多有趣的部分,例如没有同步多线程或动态频率提升。我们期待看到哪种设计理念对云更有意义。我们目前正在根据我们的服务器群评估 Altra 的性能,并与 Ampere 合作定义基于 Altra 的可大规模部署的 ARM 边缘服务器。 Ampere ARM 硬件数据中心 Cloudflare Network