16 núcleos não estão sendo utilizados em 80 núcleos

11

Recentemente, descobri que nosso servidor não utiliza mais todos os 80 threads do sistema. Parece que 16 núcleos estão sempre ociosos, apesar da alta carga do sistema.

É um servidor Dell powerEdge R900, com 4 soquetes, 4 vezes um Xeon de 10 núcleos. Então 40 núcleos, com HT seus 80 threads. (CPU E7- 4850 a 2,00 GHz). A memória do sistema é de 512 GB com o Ubuntu 14.04.1 LTS. Ainda não reinicializei o servidor, esperava evitar isso.

uname -a
Linux assembly 3.13.0-35-generic # 62-Ubuntu SMP sexta-feira, 15 de agosto 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU / Linux

Vou verificar o seguinte:

Temperatura medida com i7z: (não pode exibir 4 soquetes

Velocidade da CPU a partir de cpuinfo 1994.00Mhz
Frequência Verdadeira (sem contabilidade Turbo) 1994 MHz

Soquete [0] - [núcleos físicos = 10, núcleos lógicos = 20, máximo de núcleos on-line sempre = 10]
  Multiplicador de CPU 15x || Frequência de clock do barramento (BCLK) 132,93 MHz
  TURBO ATIVADO em 10 núcleos, com Hyper Threading
  Frequência máxima sem considerar o Turbo 2126,93 MHz (132,93 x [16])
  O multiplicador máximo de TURBO (se ativado) com núcleos 1/2/3/4/5/6 é 0x / 0x / 0x / 0x / 0x / 0x
  Frequência de Corrente Real 1994,02 MHz (Máximo de abaixo)
        Núcleo [id do núcleo]: Freq real (Mult.) C0% Parada (C1)% C3% C6% Temp
        Núcleo 1 [1]: 1994.01 (15.00x) 100 0 0 0 75
        Núcleo 2 [5]: 1994,00 (15,00x) 100 0 0 0 77
        Núcleo 3 [9]: 1994.02 (15.00x) 100 0 0 0 76
        Núcleo 4 [13]: 1994,00 (15,00x) 100 0 0 0 77
        Núcleo 5 [17]: 1994,00 (15,00x) 100 0 0 0 77
        Núcleo 6 [21]: 1994,00 (15,00x) 97,7 0,404 0 1,86 77
        Núcleo 7 [25]: 1994,00 (15,00x) 94,5 0 1 5,27 77
        Núcleo 8 [29]: 1994,00 (15,00x) 100 0 0 0 76
        Núcleo 9 [33]: 1994,00 (15,00x) 99,8 0 1 1 75
        Núcleo 10 [37]: 1994,00 (15,00x) 100 0 0 0 73
  Frequência máxima sem considerar o Turbo 2126,93 MHz (132,93 x [16])
  O multiplicador máximo de TURBO (se ativado) com núcleos 1/2/3/4/5/6 é 0x / 0x / 0x / 0x / 0x / 0x
  Frequência de Corrente Real 1994,02 MHz (Máximo de abaixo)
        Núcleo [id do núcleo]: Freq real (Mult.) C0% Parada (C1)% C3% C6% Temp
        Núcleo 1 [1]: 1994.02 (15.00x) 100 0 0 0 74
        Núcleo 2 [5]: 1994,00 (15,00x) 100 0 0 0 76
        Núcleo 3 [9]: 1994.02 (15.00x) 100 0 0 0 76
        Núcleo 4 [13]: 1994,00 (15,00x) 100 0 0 0 77
        Núcleo 5 [17]: 1994,00 (15,00x) 100 0 0 0 76
        Núcleo 6 [21]: 1994,00 (15,00x) 97 0 1 2,43 77
        Núcleo 7 [25]: 1994,00 (15,00x) 92,9 0 1 6,81 77
C0 = Processador rodando sem parar00x) 100 0 0 0 75
C1 = Processador executando com paradas (Estados> C0 economizam energia) 1 1 75
C3 = Núcleos em execução com PLL desativado e cache de núcleo desativado 0 0 73
C6 = Tudo no estado principal do C3 + salvo no último nível de cache
  Os valores acima na tabela estão em porcentagem nos últimos 1 segundo
[core-id] refere-se ao número do core-id em / proc / cpuinfo
Mensagem 'Valores do Lixo' impressa quando os valores do lixo são lidos
  Ctrl + C para sair

Inativo: os últimos 16 núcleos estão 100% inativos:

mpstat -p ALL 1:
Média: CPU% usr% nice% sys% iowait% irq% soft% steal% guest% gnice% ocioso
Média: todos 70,69 0,00 0,70 0,00 0,00 0,00 0,00 0,00 0,00 0,00 28,61
Média: 0 92,93 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 7,07
Média: 1 94,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 6,00
Média: 2 100,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
Média: 3 83,33 0,00 2,08 0,00 0,00 0,00 0,00 0,00 0,00 0,00 14,58
Média: 4 100,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
Média: 5 100,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
.................................................. ........
Média: 64 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 65 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 66 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 67 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 68 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 69 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 70 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 71 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 72 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 73 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 74 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 75 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 76 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 77 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Média: 78 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 79 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00

Principais números de carga:

top - 17:41:48 até 35 dias, 6:28, 15 usuários, média de carga: 77.69, 70.48, 62.73
Tarefas: 1327 total, 44 em execução, 1281 em suspensão, 2 paradas, 0 zumbi
% Cpu (s): 63,7 us, 13,6 sy, 0,0 ni, 22,3 id, 0,2 wa, 0,0 hi, 0,2 si, 0,0 st
KiB Mem: 52837942 + total, 52553190 + usado, 2847524 grátis, 535660 buffers
Troca KiB: 78124032 total, 2105608 usado, 76018416 grátis. 40637328 + Mem em cache

Às vezes, o% ocioso não é mais 100, mas um pouco menos, como você pode ver aqui, mas geralmente fica 100% ocioso.

Média: CPU% usr% nice% sys% iowait% irq% soft% steal% guest% gnice% ocioso
Média: todos 70,69 0,00 0,70 0,00 0,00 0,00 0,00 0,00 0,00 0,00 28,61
Média: 64 0,13 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 99,87
Média: 65 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 66 0,00 0,00 2,63 0,00 0,00 0,00 0,00 0,00 0,00 97,37
Média: 67 0,00 0,00 0,13 0,13 0,00 0,00 0,00 0,00 0,00 99,75
Média: 68 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 69 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 70 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 71 0,00 0,00 0,12 0,00 0,00 0,00 0,00 0,00 0,00 99,88
Média: 72 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 73 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 74 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 75 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 76 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 77 0,00 0,00 0,13 0,00 0,00 0,00 0,00 0,00 0,00 99,87
Média: 78 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00
Média: 79 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 100,00

Também executei este comando para garantir que todos estejam online:

para COUNT no `seq 01 79`; faça eco 1> / sys / devices / system / cpu / cpu $ {COUNT} / online; 

Com o programa HTop, eu posso visualizar uma barra de uso da CPU por thread e ver 64 barras preenchidas e 16 vazias (as últimas 16).

Quando tento iniciar um processo em um núcleo> 63, também falha ao fazê-lo:

root @ server: ~ # taskset -c 63 vez
Uso: time [-apvV] [-f formato] [-o arquivo] [--append] [--verbose]
       [--portabilidade] [--format = formato] [- saída = arquivo] [- versão]
       Comando [--quiet] [--help] [arg ...]
root @ server: ~ # taskset -c 64 vezes
conjunto de tarefas: falha ao definir a afinidade do pid 0: argumento inválido
root @ server: ~ # taskset -c 65 vezes
conjunto de tarefas: falha ao definir a afinidade do pid 0: argumento inválido

Tópico relacionado: /ubuntu/536541/ubuntu-uses-only-2-out-of-4-processor-cores

Edição: Acontece que os núcleos são desligados em tempo real, mas não inicializam corretamente. Parece que existem processos em execução nesses núcleos indisponíveis, mas é impossível iniciar qualquer novo processo neles. De acordo com o log do dmesg, os núcleos são desativados e ativados rapidamente um após o outro. Devo dizer que era a intenção de desligar esses núcleos, então desativamos esse 'recurso'. Exemplo de log DMESG:

[12 de janeiro 12:42:40 2015] kvm: desativando a virtualização na CPU79
[12 de janeiro 12:42:40 2015] smpboot: CPU 79 agora está offline
....
[12 de janeiro 12:43:12 2015] smpboot: Processador de inicialização 0 do nó 0 79 APIC 0xf3
[12 de janeiro 12:43:12 2015] kvm: habilitando a virtualização na CPU79

Ativando / desativando núcleos via:

para COUNT no `seq 64 79`; faça eco 1> / sys / devices / system / cpu / cpu $ {COUNT} / online; concluído

Nunca vinculamos esses comandos aos nossos 16 núcleos indisponíveis, pois normalmente os comandos acima funcionam corretamente. (também tentamos desativar o gerenciador de energia, mas isso não ajudou)

HenrivdGeest
fonte
1
Por que você ou sua empresa não escolheram o servidor Ubuntu, e não o Ubuntu, para PCs normais?
XperianX 15/01
1
Não é impossível que 16 de seus núcleos estejam realmente sendo usados ​​para maximizar a capacidade, deixando 16 núcleos virtuais sem margem utilizável.
anonymous2
1
Todos os 8 núcleos (16 virtuais) em uma CPU física ou estão espalhados pelos quatro soquetes? Se eles estiverem localizados em uma CPU física, é possível que esses núcleos tenham falhado?
Jibberish51
2
Gostaria de saber se em algum lugar do sistema existe um código que represente a máscara de afinidade da CPU com apenas 64 bits, impedindo que os processos utilizem os últimos 16 núcleos.
kasperd
Dado que 80-16 = 64, parece-me que há algum limite artificial em algum lugar no número máximo de núcleos a serem usados. Possivelmente, qualquer software que você esteja executando esteja configurado para um máximo de 64 núcleos ou, possivelmente, não poderá gerar mais de 64 threads.
Clonkex

Respostas:

1

Nem todos os programas podem usar vários threads. php é um por exemplo. Se um processo php precisa de muita CPU, apenas 1 CPU chega ao máximo. E os outros ficarão ociosos.

Carl
fonte