如何让Linux在多CPU机器上可靠启动?

如何让Linux在多CPU机器上可靠启动?

我有两台机器,一台有 4x12 个 AMD Opteron 核心(AMD Opteron(tm) 处理器 6176),另一台有 2x8 个 Xeon 核心(禁用 HT;Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz)。在这两台机器上,我使用较新的内核启动 Linux 时都遇到了困难。系统在内核初始化期间挂起,在 initramfs 开始初始化硬件之前或刚开始初始化硬件时。最后显示的是这样的堆栈跟踪:

CPU: 31 PID: 0 Comm: swapper/31 Tainted: G      D      3.11.6-hardened #11
Hardware name: Supermicro X9DRT-HF+/X9DRT-HF+, BIOS 3.00 07/08/2013
task: ffff880854695500 ti: ffff880854695a28 task.ti: ffff880854695a28
RIP: 0010:[<ffffffff8100a82e>]  [<ffffffff8100a82e>] default_idle+0x6/0xe
RSP: 0000:ffff8808546b3ec8  EFLAGS: 00000286
RAX: ffffffff8100a828 RBX: ffff880854695a28 RCX: 00000000ffffffff
RDX: 0100000000000000 RSI: 0000000000000000 RDI: ffff88107fdec690
RBP: ffff8808546b3ec8 R08: 0000000000000000 R09: ffff880854695500
R10: ffff880854695500 R11: 0000000000000001 R12: ffff880854695a28
R13: ffff880854695a28 R14: ffff880854695a28 R15: 0000000000000000
FS:  0000000000000000(0000) GS:ffff88107fde0000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000002b43256a960 CR3: 00000000016b5000 CR4: 00000000000607f0
Stack:
 ffff8808546b3ed8 ffffffff8100aec9 ffff8808546b3f10 ffffffff8109ce25
 334ab55852ec7aef 000000000000001f ffffffff8102d6c0 0000000000000000
 0000000000000000 ffff8808546b3f48 ffffffff810276e0 ffff8808546b3f28
Call Trace:
 [<ffffffff8100aec9>] arch_cpu_idle+0x20/0x2b
 [<ffffffff8109ce25>] cpu_startup_entry+0xed/0x138
 [<ffffffff8102d6c0>] ? flat_init_apic_ldr+0x80/0x80
 [<ffffffff810276e0>] start_secondary+0x2c9/0x2f8

我自己编译了内核,如果使用 nolapic 启动,它运行良好。但是,只使用了一个核心。此外,RHEL6 的内核似乎运行良好。我怀疑有一些补丁可以使它正常工作。使用 RHEL6 中的内核配置文件并构建较新的内核会产生相同的问题。在 Xeon 机器上,通过完全禁用超线程,情况会有所改善。机器现在至少 5 次中有 4 次成功启动。如果它启动,多核的东西就运行良好。但是,我想知道该如何处理 AMD 机器。

总结一下:

  1. 除非您减少核心数量(例如通过 nolapic),否则 Gentoo 内核 3.6 - 3.11 将无法可靠地启动这些机器。
  2. RHEL6 内核(2.6.32)启动正常。
  3. 用于构建 3.x 内核的 RH 内核配置不会产生可运行的内核。
  4. 不特定于分布(除了正在使用的内核)。
  5. 这些堆栈跟踪每隔一分钟左右就会打印一次。内核似乎陷入了无限循环。

然而,由于各种原因,需要最新的内核。

所以问题是:

  1. RHEL6 内核能做什么,vanilla 或 gentoo 内核不能做什么?
  2. 是否存在一个启动选项,可以在所有核心启用的情况下实现可靠​​启动?

最好的,亚当

答案1

我意识到 Gentoo 安装盘的内核运行正常。使用它的配置构建内核解决了这个问题。但是,我仍然不知道到底是什么选项导致了这个问题。

相关内容