Linux kernel 为通用x86/64编译的linux内核与Xeon或其他内核有什么区别

Linux kernel 为通用x86/64编译的linux内核与Xeon或其他内核有什么区别,linux-kernel,Linux Kernel,在linux内核配置中,可以选择更改CPU系列,大多数预编译内核都是通用x86/64 我有一个Xeon E3 CPU,所以我想知道如果我在那里选择Core duo/更新的Xeon会发生什么 这里到底有什么区别?为我的CPU系列编译内核,而不是为通用CPU系列编译内核,有什么意义吗?为Xeon优化的内核会在非Xeon CPU上工作吗?有人测量过性能等方面的差异吗?它将选择相应的配置选项(从arch/x86/Kconfig.cpu): 一般来说,CONFIG\u MCORE2将在32位构建和-mar

在linux内核配置中,可以选择更改CPU系列,大多数预编译内核都是
通用x86/64

我有一个Xeon E3 CPU,所以我想知道如果我在那里选择
Core duo/更新的Xeon
会发生什么


这里到底有什么区别?为我的CPU系列编译内核,而不是为通用CPU系列编译内核,有什么意义吗?为Xeon优化的内核会在非Xeon CPU上工作吗?有人测量过性能等方面的差异吗?

它将选择相应的配置选项(从arch/x86/Kconfig.cpu):

一般来说,
CONFIG\u MCORE2
将在32位构建和
-march=core2
上启用编译器选项
-mtune=core2
(可以在Makefiles
arch/x86/Makefile
arch/x86/Makefile\u 32.cpu
中找到)

GCC手册页中描述了这些选项:

-march=cpu类型

为机器类型cpu类型生成指令。与-mtune=cpu类型不同,它仅为指定的cpu类型调整生成的代码,-march=cpu类型允许GCC生成可能根本无法在指定处理器以外的处理器上运行的代码

指定-march=cpu类型意味着-mtune=cpu类型

core2

具有64位扩展、MMX、SSE、SSE2、SSE3和SSSE3指令集支持的Intel Core 2 CPU

说到编译选项对应用程序性能的总体影响,它应该相对较低:

  • 在内核中,总体架构很重要。也就是说,争用锁可能很容易破坏性能,而无锁数据结构有助于获得性能。不管编译器选项如何,它们都可以工作
  • 内核中有少量操作需要通过该优化启用的SIMD操作(复制数组或字符串除外)。内核中有少量CPU密集型操作。但是缓存线大小的优化可能会很好
  • 对于不受内核限制的应用程序,它们的大部分时间都花在用户空间中,很少使用系统调用调用内核,优化的效果会成比例地降低。也就是说,对于只在内核上花费10%的应用程序,如果内核性能提高2%,那么总体性能只会提高0.2%

好的,当使用此选项时,系统性能或稳定性是否有显著改善?它是被广泛使用,还是很少使用?我一直认为内核本身使用自己的ASM代码在引导期间决定哪些CPU功能可用,并尽可能多地利用它们(例如,一些特殊的指令集,如MMX.SSE等)。@Petr:大多数内核代码都是用C编写的。对于像Linux这样的大型内核,总体架构很重要,因此,除了一些CPU密集型算法(如解压或加密)外,性能改进将非常小。大多数Linux发行版都提供带有
CONFIG\u GENERIC\u CPU
的预编译内核,除了可能类似Gentoo的内核。问问你自己(或你的
top
命令)在内核上花了多少时间。在大多数情况下,它非常小,比如百分之几。因此,如果您将内核代码的速度提高50%(这至少比我预期的这种优化要高一个数量级),那么总体上不会给您带来太多性能提升。另一方面,如果您的工作负载非常不寻常,并且大部分时间都花在内核空间,那么这可能值得考虑。也就是说,我不知道有什么基准测试可以测试它。那么这会加速内核本身,但不会加速运行在内核上的用户空间进程?我在想,这会影响整个系统的性能,如果只是为了内核,这可能并不重要。如果这是真的,那么这是一个非常重要的事实,现在答案中没有。有趣的是,如果你看加密模块,有多个模块用于相同的密码,但表示支持不同的向量指令。奇怪的是,这似乎不是由MCORE2标志驱动的,而是让您可以在不同的实现之间进行显式选择。
config MCORE2
     bool "Core 2/newer Xeon"