昨天发布了用于清理 x86_64 CPU 上的 x86 32 位内核的新 Linux 内核补丁,作为该补丁系列的一部分,围绕x86_64微架构功能级别引入了新的 Kconfig 构建选项。事实证明,Torvalds 完全反对编译器工具链人员处理x86_64功能级别的方式,并且不希望看到它侵入内核。
作为对 x86_64 微架构功能级别的复习,编译器工具链人员提出了不同的级别/版本来表示多年来引入的常见 x86_64 ISA 扩展集。在 x86_64 基线上,x86_64-v2 要求围绕较旧的 AMD Bulldozer 和 Intel Nehalem CPU 提供 SSE3/SSE4.2 和其他扩展,x86_64-v3 引入了 AVX/AVX2、BMI2、FMA 和其他来自 Intel Haswell 和 AMD Excavator 时代的新扩展,x86_64-v4 要求在 v3 扩展的基础上支持 AVX-512。
针对其中一个补丁重新设计 x86 Kconfig 位中的 CPU 编译器标志,Linus Torvalds 回应道:
“整个 ”v2“、”v3“、”v4“ 等命名似乎是一些疯狂的 glibc 工件,很愚蠢,需要死。
它与任何事情都没有关系。请不要将那个脑子放屁引入内核源代码。
我不知道谁想出了 “microarchitecture levels” 垃圾,但据我所知,这完全是非官方的,而且是一个完全破碎的模型。
有一个非常真实的微架构功能模型,它是 CPUID 位。试图线性化这些位在技术上是错误的,因为这些东西根本不是某种线性级数。
更糟糕的是,这是一种 “简化” 实际上增加了复杂性。现在,问题不再是“这个 CPU 支持 cmpxchgb16 指令吗?”,而是变成了“’v3’又到底是什么意思?
所以没有。我们*不会*在内核中引入这种愚蠢的东西。
Linus 确实在功能级别的线性化方面提出了一个有效的观点,因为 Intel 目前处于一个奇怪的位置,因为他们较新的笔记本电脑/台式机 CPU 不支持 AVX-512,然后 AVX10 有 256 位和 512 位选项,以及其他处理的复杂性。
Linux 的创建者进一步补充说,他赞成降低 x86_64 构建选项的复杂性,因为大多数编译器对特定 CPU 的调整对于内核来说并不值得。Linux 内核很可能只保留通用x86_64并且可能有一个 “-march=native” 选项来优化本地系统。
转自 Linus Torvalds Comes Out Against “Completely Broken” x86_64 Feature Levels – Phoronix