Redhat 5.5: O processo multi-thread usa apenas 1 CPU dos 8 disponíveis

3

Situação estranha: Redhat Enterprise 5.5 (instalação de estoque, sem atualizações, x64) em uma estação de trabalho HP z800. (Dual Xeon 2,2 Ghz. 8 núcleos, 16 se você contar Hyper-threading. RH vê 16 núcleos.)

Temos um aplicativo que pode utilizar 1, 2 ou 4 threads para cálculos pesados. De alguma forma, todos esses threads são executados no mesmo núcleo com 100% de carga (os outros 15 núcleos estão quase inativos), portanto, não há absolutamente nenhum benefício dos encadeamentos extras. Na verdade, há um ligeiro abrandamento à medida que os fios se encaixam no núcleo único.

Como faço para executá-los em núcleos separados (se possível)? A aplicação é de 64 bits. Não é possível alterar nada sobre o software, exceto alterar a configuração de threads. Existe alguma configuração obscura do Linux que eu possa tentar mudar? (Eu sou um cara True64 e Aix. Eu uso Linux, mas não tenho conhecimento profundo do processo de programação no Linux.)

/ proc / cpuinfo al lista 16. top en gnome cpu-monitor ambos indicam que apenas 1 núcleo é usado. Eu tentei algo semelhante a essa coisa perl também. Podemos carregar toda a CPU para quase 100%, se quisermos. Reivindicações do fornecedor do aplicativo: Sim, ele é multiencadeado, mas ainda não está otimizado. Essa será a próxima versão (em agosto).

Então, eu acho que o aplicativo está fazendo sub-threading dentro de seu próprio espaço de processo em vez de encadear processos reais separados. Realmente nada que eu possa fazer sobre isso, então ...

    
por Tonny 16.02.2011 / 10:57

2 respostas

1

Faça o download do stress utilitário do RPMforge ou yum e execute-o com:

stress --cpu 16 para gerar 16 trabalhadores. Conforme mencionado acima, execute top com a opção 1 para mostrar todas as CPUs na listagem.

Depois de verificar a listagem e a atividade da CPU, mantenha Ctrl-C sem estresse e execute seu aplicativo. Inicie top com o mesmo switch e use a opção H para mostrar todos os threads do processo.

    
por 16.02.2011 / 13:52
0

Você tem 100% de certeza de que está sendo executado em apenas um núcleo? Como você checou? topo e, em seguida, pressionou "1"? Você vê todos os seus 16 núcleos em "top" depois de pressionar "1"? Ou em "cat / proc / cpuinfo"?

O que acontece com outras aplicações? Se você começar algo como

perl -e 'foreach (1..9e9) { sqrt(1234) }' &

16 vezes, você vê no topo todos os seus 16 núcleos em 100%?

Eu acho que isso é mais uma configuração do seu aplicativo e nada específico para o sistema linux.

    
por 16.02.2011 / 11:28