Linux: compartilhamento de carga da CPU no novo servidor

0

Nós temos um novo servidor Linux el6.x86_64 e depois de mover todos os nossos processos de jobs (principalmente java / C ++ / python / shell) para este novo servidor, nós observamos os processos rodando lentamente. Por exemplo. Um script python em execução no servidor anterior terminaria em 30 minutos, no novo servidor leva 4 horas para ser processado.

Abaixo estão as estatísticas de uso da CPU (capturadas com o topo) do novo servidor, que mostra apenas uma tarefa ativa por vez. Preciso da sua ajuda para entender o seguinte:

  • Se tiver 32CPUs, não deverá haver 32 tarefas sendo executadas em paralelo?
  • Todas essas CPUs estão online, verificadas em / sys / devices / system / cpu. Poderia haver algum outro sistema definindo a disponibilidade da CPU muito baixa?
 
top - 02:04:04 up 5 days,  6:56, 32 users,  load average: 3.63, 3.91, 3.47
Tasks: 1208 total,   1 running, 1207 sleeping,   0 stopped,   0 zombie
Cpu0  : 23.4%us,  3.0%sy,  0.0%ni, 73.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 15.4%us,  5.6%sy,  0.0%ni, 79.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  : 12.2%us,  1.0%sy,  0.0%ni, 86.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  3.9%us,  0.3%sy,  0.0%ni, 95.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  : 19.3%us,  2.0%sy,  0.0%ni, 78.4%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu5  :  6.9%us,  0.3%sy,  0.0%ni, 92.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  1.3%us,  0.0%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu8  :  0.3%us,  0.3%sy,  0.0%ni, 99.0%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu9  :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu10 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu11 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu12 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu13 :  1.0%us,  0.3%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu14 :  1.0%us,  0.0%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu15 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu16 : 42.2%us,  4.0%sy,  0.0%ni, 53.5%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu17 :  0.7%us,  0.7%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu18 : 26.0%us,  2.0%sy,  0.0%ni, 71.7%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu19 :  0.7%us,  0.3%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu20 : 53.8%us,  4.0%sy,  0.0%ni, 41.2%id,  0.0%wa,  0.0%hi,  1.0%si,  0.0%st
Cpu21 : 29.3%us,  1.3%sy,  0.0%ni, 69.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu22 :  2.0%us,  0.7%sy,  0.0%ni, 97.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu23 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu24 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu25 :  0.7%us,  1.0%sy,  0.0%ni, 98.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu26 :  0.7%us,  1.3%sy,  0.0%ni, 98.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu27 :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu28 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu29 :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu30 :  2.6%us,  0.0%sy,  0.0%ni, 97.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu31 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  396867664k total, 391584344k used,  5283320k free,   414764k buffers

    
por user3305937 06.01.2017 / 10:38

1 resposta

3

Os processos não utilizarão os núcleos extras para serem executados com mais rapidez, a menos que sejam projetados para isso usando encadeamentos ou outros mecanismos para paralelismo.

O Python em particular normalmente é ruim em explorar múltiplos núcleos devido ao GIL ( Global interpreter Lock ). Você poderia tentar usar o módulo Python 'multiprocessamento' para obter mais softwares de preferência.

Não há muito o que fazer para aumentar o desempenho de processos single-core, não de E / S, exceto a compra de CPUs com velocidades de clock mais altas. Mas às vezes você pode encontrar gargalos de acesso à memória e de cache de memória. Por exemplo, se sua máquina contém várias CPUs conectadas por conexões NUMA , e processos se movem freqüentemente entre essas CPUs, a situação pode surgir onde as CPUs precisam acessar freqüentemente a memória em NUMA conexões através de outras CPUs (Memória conectada a outra CPU pode ser significativamente mais lenta para acessar então a memória conectada diretamente a ' este ' CPU).

Pode valer a pena tentar fixar processos a CPUs específicas usando o comando cpuset (1). Se isso funcionar, você também deve examinar os vários parâmetros de ajuste de comportamento do Kenel NUMA.

Editar para adicionar: Outra área a considerar é o gerenciamento de energia, talvez as frequências da CPU estejam diminuindo devido aos processos de economia de energia. Você pode usar o comando cpupower (1) para verificar e definir as configurações de gerenciamento de energia da VPU.

    
por 06.01.2017 / 11:27