Linux kernel 为通用x86/64编译的linux内核与Xeon或其他内核有什么区别
在linux内核配置中,可以选择更改CPU系列,大多数预编译内核都是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
通用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
(可以在Makefilesarch/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%
CONFIG\u GENERIC\u CPU
的预编译内核,除了可能类似Gentoo的内核。问问你自己(或你的top
命令)在内核上花了多少时间。在大多数情况下,它非常小,比如百分之几。因此,如果您将内核代码的速度提高50%(这至少比我预期的这种优化要高一个数量级),那么总体上不会给您带来太多性能提升。另一方面,如果您的工作负载非常不寻常,并且大部分时间都花在内核空间,那么这可能值得考虑。也就是说,我不知道有什么基准测试可以测试它。那么这会加速内核本身,但不会加速运行在内核上的用户空间进程?我在想,这会影响整个系统的性能,如果只是为了内核,这可能并不重要。如果这是真的,那么这是一个非常重要的事实,现在答案中没有。有趣的是,如果你看加密模块,有多个模块用于相同的密码,但表示支持不同的向量指令。奇怪的是,这似乎不是由MCORE2标志驱动的,而是让您可以在不同的实现之间进行显式选择。
config MCORE2
bool "Core 2/newer Xeon"