优化 Ubuntu 在 amd64 架构上的性能
by Canonical on 6 February 2024
每个人都希望自己使用的 Linux 发行版运行速度快。当然,这一点不言自明:谁会希望自己的发行版运行速度慢呢?
但是,发行版运行速度快又意味着什么呢?例如,Ubuntu 21.10 将软件包的默认压缩算法改为 zstd,这使得软件包下载和解压缩速度变得更快,从而提高了 Ubuntu 上一项重要操作的性能。当然,还有诸多其他方面的性能,但本篇文章将着眼于一些完全不同的东西——Ubuntu 假定可用的处理器功能。
在本篇文章中,笔者将浅谈一下 amd64 架构的发展史,以及我们正在携手 Intel 进行的一些调研,以更好地利用新一代处理器。
背景
到目前为止,Ubuntu 最常用的架构是 amd64,在某些情况下也称为 x86-64。Ubuntu 仍是针对最早的 amd64 CPU, 即 2003 年的 AMD K8 和 2004 年的 Intel 64 位 Prescott 构建而成,使用的是最原始的指令集架构(ISA)。
多年来,Intel 和 AMD 增加了许多的 ISA 扩展,例如:
- SIMD:SSE3、SSE4、AVX、AVX512 等
- 专用的:RDRAND、AES-NI、VNNI
- 更通用的:cmpxchg16b(原子比较和交换)、vfmadd*(浮点数的融合乘加)、movbe(字节顺序转换)
如不使用这些新指令来提高整个发行版的性能,可就错失良机了。诸如 glibc 和 openssl 这样的核心软件包会在运行时进行检测,以便在新的指令可用时使用新指令,但有更多的软件包并不会这样做。
像 amd64 这样的架构与 POWER 架构之间的一个重大区别在于实现的多样性。多年来,POWER 架构已通过多种方式进行了扩展,但是可以合理假定 2018 年的处理器支持 2013 年处理器所支持的全部指令。这对于 amd64 架构而言却并非完全如此。例如,2007 年在 Penryn 微架构中引入了 SSE4.1,但直到 2012 年才发布了不支持 SSE4.1 的设计(例如,Centerton 系列 Atoms)。此外,AMD 和 Intel 都推出了对方最终实现的扩展(以及从未真正被广泛使用并最终消失的扩展,如 3DNow! 和 TSX)。
长期以来,动态加载器(glibc 的一部分)允许发行版在检测到支持新的 CPU 属性时通过搜索额外的目录来利用这些新的 CPU 属性,但是在 2.33 之前的 glibc 的 amd64 版本上,这些额外的目录系基于特定的、定义不明确的功能选择。例如,据笔者所知,自 2014 年以来,大多数 Intel 处理器上对 /lib/x86_64-linux-gnu/haswell 进行了搜索,但在 AMD 处理器上却完全没有。
2020 年,glibc 开发人员,特别是来自 Red Hat 的 Florian Weimer,受够了这种混乱现状,于是在 libc-alpha 邮件列表上提出了一个解决方案:将合理的 CPU 属性集组合到大多数连同支持的“层级”中,并让动态加载器根据这些层级名称来搜索目录。
然后是解决一些意义不大的技术问题,定义了四个层级,每个层级都包括上一层级:“V1”或基线、“v2”、“v3”、“v4”,这些定义被添加到 “psABI” 规范(大致而言,即定义 amd64 Linux 系统二进制代码的文档):
| 层级名称 | CPU 属性 | 示例指令 |
|---|---|---|
| (baseline) | CMOV | cmov |
| CX8 | cmpxchg8b | |
| FPU | fld | |
| FXSR | fxsave | |
| MMX | emms | |
| OSFXSR | fxsave | |
| SCE | syscall | |
| SSE | cvtss2si | |
| SSE2 | cvtpi2pd | |
| x86-64-v2 | CMPXCHG16B | cmpxchg16b |
| LAHF-SAHF | lahf | |
| POPCNT | popcnt | |
| SSE3 | addsubpd | |
| SSE4_1 | blendpd | |
| SSE4_2 | pcmpestri | |
| SSSE3 | phadd | |
| x86-64-v3 | AVX | vzeroall |
| AVX2 | vpermd | |
| BMI1 | andn | |
| BMI2 | bzhi | |
| F16C | vcvtph2ps | |
| FMA | vfmadd132pd | |
| LZCNT | lzcnt | |
| MOVBE | movbe | |
| OSXSAVE | xgetbv | |
| x86-64-v4 | AVX512F | kmovw |
| AVX512BW | vdbpsadbw | |
| AVX512CD | vplzcntd | |
| AVX512DQ | vpmullq | |
| AVX512VL | n/a |
参考:psABI 第 14 页
如上所述,很难说特定一代的处理器支持某个特定层级,但大体上,2009 年以后的大多数处理器都支持 v2, 2015 年以后的大多数处理器都支持 v3。
V4 较为复杂:Intel 第 11 代处理器支持,但第 12 代和第 13 代处理器不支持,AMD 新推出的 Zen 4 微架构增加了 V4 支持功能。AVX512 的未来会怎样难以知晓,本文将不予赘述。
从 glibc 到工具链
虽然定义的这些层级的初衷是将动态加载器寻找共享库的过程合理化,但它们也为一组假定在发行版所有部分都可用的指令提供了一个实用标签。支持使用“x86-64-v$N”作为 -march 标记值的功能已添加至 11 版中的 GCC 和 12 版的 LLVM 中。
值得注意的是,我们在本文档中只讨论 C 和 C++ 工具链。虽然发行版显然包含了大量且不断增加的其他语言代码(Python、Go、Rust、Java、Ruby 等),但大部分代码都是 C/C++ 语言。对于部分语言生态系统,特别是 Python,许多性能敏感的代码都是用 C/C++ 语言编写的(例如 numpy)。其他静态编译工具链(如 Rust 和 Go)确实支持选择精确的目标 ISA,但在本文中,我们将只讨论 C 和 C++。
突破基线?
更改 -march 的默认值是 GCC 打包的一项细微改变,并且部分发行版已经进行了此更改——RHEL9 和 SUSE Tumbleweed(自 2022 年 11 月开始)所针对的目标都是 x86-64-v2。
这些改变虽然会产生成本,但也带来了好处:
- 对于硬件太过老旧而无法支持 v2 指令的用户而言,这些操作系统根本无法工作。
- 对于购买了更好硬件的用户而言,这些操作系统可以更好地利用这些硬件。
对于 RHEL 等商业发行版,这或许仍有一定的意义:如果花钱购买 RHEL(或 SLES,亦或者其他)许可证,则可能已经运行了最新的硬件,或者至少更新不到 10 年以内的硬件所产生的额外成本相当微不足道。值得注意的是,SUSE 推出的新款“自适应 linux 平台”产品最初所针对的目标是 v3,后来又降至 v2。
对于 Ubuntu(或 Fedora)等免费发行版,计算有所不同:允许用户通过安装免费的 linux 发行版来延长硬件寿命是开源世界的一个重要积极的方面,而且仍在Ubuntu 中使用 2008 年一代硬件的用户很有可能是最不能够升级的用户。
也就是说,硬件寿命不是永恒的。几年前,维护对 32 位 x86 电脑的全面支持的成本开始超过收益,于是我们停止构建大多数软件包。做出这样深思熟虑的决定需要以数据作为支持。具体包括:
- 使用情况——有多少 Ubuntu 用户使用的硬件只支持 v1 或 v2?
- 性能——将默认值更改为 x86-64-v2 或 x86-64-v3 会带来多少性能改进?
以上两个问题都不容易回答。
亲自尝试
我们在继续自身的性能分析和进一步评估用户需求的同时,已在社区发布了体验版 Ubuntu 23.04 服务器构建器——可使用 -march=x86-64-v3 和 -mtune=icelake-server,供用户试用。我们考虑了在系统范围内使用 v3 的潜在优点和缺点,您的反馈和观感对我们而言非常宝贵。以下是我们对自己提出的一些问题:
- 总体而言,Ubuntu 的 v3 版本是否比基线 v1 版本更快?正如上面所提到的,这可能意味着从定量基准测试到用户角度对速度更宽松、定性的感觉的诸多差别。
- 是否有某些领域的性能因 v3 而显著提高或出现了下降?
- 这些变化是否会带来破坏?
本篇文章将介绍在哪里可以找到该构建器的安装程序,该构建器不仅是使用重新构建的软件包构建而成的,而且默认安装重新构建存档中的软件包。请注意,此构建器仅用于测试。使用此安装程序安装的系统将不会收到任何安全(或任何其他)更新,并且不适合在生产中使用。
基准测试完成后,我们将发布另一篇文章介绍测试内容和测试结果。请持续关注!
订阅博客文章
查看更多内容
83% 的企业肯定开源软件的应用价值,但也表示在安全与治理方面存在重大缺口
Linux Foundation 最新报告揭示了全球企业对开源软件的采用情况、使用现状及认知态度。 Linux Foundation 携手 Canonical 发布的最新报告《全球开源现状》,是继今年早些时候 Linux Foundation 欧洲地区报告之后的全球性报告。报告证实,欧洲地区报告中揭示的诸多趋势在全球范围内同样存在。这份全球报告尤其证实了开源软件在全球范围内作为关键业务系统基础所发挥的重要作用,并且表明采用率的持续攀升。不过,企业仍然缺乏战略性且安全管理开源软件所需的治理机制、安全测试体系及战略成熟度。 报告指出,多数企业期望开源软件能达到企业级性能标准,但在所需治理框架、安全实践及社区协作方面投入不足。 下载报告 83% 的企业承认开源对其未来发展具 […]
Canonical 获得 ISO 27001 认证
该认证是符合网络安全标准的有力证明,可在最严苛的企业环境中全面保障开源产品和服务的应用安全。 Canonical 自豪地宣布,经过知名认证提供商 A-LIGN 的广泛评估,其信息安全管理系统(ISMS)已获得 ISO/IEC 27001 认证。这一里程碑彰显了 Canonical 致力于遵守政策,完善流程和控制措施,这些措施旨在保障企业内部数据、客户数据及供应商信息的保密性、完整性及可用性,并推进公司的企业基础设施环境建设。 Canonical 首席信息安全官 Stephanie Domas 表示:“获得 ISO 27001 认证,有力地证明了我们团队对信息安全的坚定承诺。这证实了我们的流程符合全球最高标准,让我们的客户和合作伙伴确信他们的数据受到最周全、最严谨的保护。安 […]
如何借 Anbox Cloud 构建出色的云游戏平台
为何选择云游戏? 云游戏正在改变我们的游戏方式。玩家无需购买昂贵的硬件,而是从云端流式传输游戏,就像游戏界的 Netflix 一样。 这已不再是未来主义的构想,它就在眼前。NVIDIA GeForce Now、Sony PS Plus 以及 Xbox Cloud Gaming 等服务已展示出可能的图景:将所有心仪游戏(包括独立游戏和 AAA 游戏)从强大的云服务器流式传输至低端设备,从而畅玩高端游戏。 但云游戏的意义不仅在于通过云端运行游戏,更在于让玩家摆脱硬件的束缚。手机可以变身游戏主机,笔记本电脑甚至不需要专用 GPU 就可以成为游戏级电脑。为了实现这一目标,平台必须做到: 构建自有云游戏平台是一项艰巨的任务。游戏的资源需求量大,并且高度依赖 GPU 运算。但网络混乱 […]