我有一台 HP DL380 G7,里面有 2 个不匹配的 CPU。一个是四核 CPU,内核速度更快,另一个是六核 CPU,内核速度较慢。
在这个盒子上我运行一个应用程序,由于许可原因,它将只使用 CPU0-CPU3。
对于我来说,希望四核 CPU 上的更快内核能够在操作系统中枚举到 CPU0-CPU3,从而为我带来性能奖励,因为 a) 使用更快的时钟内核,并且 b) 将所有线程保留在同一个物理 CPU 上。
有没有办法实现这一点,是在 BIOS 中,还是在 Linux 中的配置文件或启动选项中?
具体CPU型号为:
Intel(R) Xeon(R) CPU E5649 @ 2.53GHz(六核)
Intel(R) Xeon(R) CPU E5640 @ 2.67GHz(四核)
答案1
什么?!?
这是疯狂的,你知道吗?它不受支持,而且可能不适合你的硬件。你应该在服务器上使用同等规格的处理器。
我想您可以简单地在 cgroup 或 shield(或通过taskset
)中执行您的应用程序,这些 cgroup 或 shield 仅包含您希望使用的 CPU 核心。您还可以使用 锁定对该 CPU 的内存访问numactl
。但实际上,您为什么不完全移除较慢的 CPU 或支付使系统符合规格所需的费用呢?
也许显而易见的事情是,如果您的应用程序硬编码为使用 CPU0-CPU3,则物理上交换插槽......但实际上,这里只需使用一个 CPU 运行。
如果您指的是 ProLiant DL380 G7 硬件,那么您的“较快”CPU 可能是 Nehalem 5500 系列处理器,而较慢的六核 CPU 则是 Westmere。您是否进行过基准测试?安装了哪些特定 CPU?
编辑:
好吧,至少这些是同一代/步进的 CPU。但这仍然是一个坏主意……CPU 规格的差异甚至不是很大(与 3.47GHz 的 Intel X5690 等相比)。