Como fazer com que o Linux inicialize de forma confiável em máquinas multi-cpu?

2

Tenho duas máquinas, uma com núcleos AMD Opteron 4x12 (processador AMD Opteron ™ 6176), uma com núcleos Xeon 2x8 (HT desativado; CPU Intel Xeon® E5-2660 0 @ 2.20 GHz). Em ambas as máquinas, tenho dificuldades durante a inicialização do Linux usando kernels recentes. O sistema trava durante a inicialização do kernel, antes ou apenas quando o initramfs iniciou a inicialização do hardware. A última coisa que foi exibida foi um stacktrace assim:

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

Eu mesmo compilei o kernel e ele funciona bem, se eu inicializar com o nolapic. No entanto, apenas um núcleo é usado. Além disso, o kernel do RHEL6 parece funcionar bem. Eu suspeito que existem alguns patches usados para fazer as coisas funcionarem. Usar o arquivo de configuração do kernel do RHEL6 e construir um kernel mais recente produz os mesmos problemas. Na máquina Xeon, as coisas melhoraram, desabilitando o Hyperthreading completamente. A máquina agora inicializa com sucesso em pelo menos 4 de 5 vezes. E se ele for iniciado, o material multicore funciona bem. No entanto, estou pensando sobre o que fazer com a máquina AMD.

Então, para resumir:

  1. O kernel 3.6 - 3.11 do Gentoo não inicializa de forma confiável essas máquinas, a menos que você reduza a quantidade de núcleos (por exemplo, via nolapic).
  2. O kernel RHEL6 (que é 2.6.32) inicializa bem.
  3. A configuração do kernel do RH usada para criar um kernel 3.x não renderá um kernel funcional.
  4. Não específico da distribuição (além do kernel sendo usado).
  5. Esses rastreamentos de pilha foram impressos a cada minuto ou mais. O kernel parece estar preso em um loop infinito.

No entanto, um kernel recente é necessário por várias razões.

Então a questão é:

  1. O que faz o kernel RHEL6, o que os kernels baunilha ou gentoo não fazem?
  2. Existe uma opção de inicialização que pode levar a uma inicialização confiável com todos os núcleos habilitados?

Melhor Adam

    
por Adam Tabi 27.10.2013 / 08:56

1 resposta

0

Eu percebi que o kernel do disco de instalação do Gentoo funciona bem. Construir um kernel usando sua configuração resolve o problema. No entanto, ainda não sei qual opção causou o problema em primeiro lugar.

    
por 31.10.2013 / 07:06