É possível influenciar a maneira como as CPUs são enumeradas no Linux?

32

Eu tenho um HP DL380 G7 com 2 CPUs incompatíveis. Uma é uma CPU quad core com núcleos mais rápidos e uma é uma CPU de 6 núcleos com núcleos mais lentos.

Nesta caixa, eu executo um aplicativo que, por motivos de licenciamento, usará apenas CPU0-CPU3.

Para mim, seria desejável que os núcleos mais rápidos na CPU quad core enumerassem CPU0-CPU3 no sistema operacional, me dando um bônus de desempenho por a) usar núcleos com clock mais rápido eb) manter todos os threads na mesma CPU física .

Existe uma maneira de fazer isso acontecer, dentro do BIOS, ou em um arquivo de configuração ou opção de inicialização no Linux?

Os modelos específicos de CPU são:

CPU Intel (R) Xeon (E5) E5649 a 2,53GHz (núcleo hexadecimal)

CPU Intel (R) Xeon (E) E5640 a 2,67 GHz (quad core)

paulos
fonte
Por favor, poste os modelos específicos de CPU em cat /proc/cpuinfo.
precisa saber é o seguinte
24
Upvoting porque eu nem sabia CPUs desiguais fosse possível, sempre algo novo para aprender ...
Kyle Brandt
2
@kyle é possível, mas não suportado ou endossado pela HP.
precisa saber é o seguinte
1
@kasperd No HP-land, se você carregar duas CPUs de diferentes steppings, receberá um CPU mismatch detectederro no POST. Isso pode acontecer dentro de uma geração de CPU; por exemplo, um Intel 5606 e 5690 no mesmo chassi.
precisa saber é
3
Se alguém estiver interessado no que realmente fez aqui, tivemos uma viagem de carro até o centro de dados e removido fisicamente o CPU quad core dos servidores
Paulos

Respostas:

27

Wut?!?

Isso é loucura , sabia? Não é suportado e provavelmente não é bom para o seu hardware. Você deve usar processadores com as mesmas especificações em seu servidor.

Suponho que você simplesmente execute seu aplicativo em um cgroup ou shield (ou via taskset) que contém apenas os núcleos da CPU que você deseja usar. Você também pode fixar o acesso à memória dessa CPU com numactl. Mas, na verdade, por que você não removeu completamente a CPU mais lenta ou pagou o que é necessário para incluir o sistema nas especificações.

Talvez o mais óbvio, se o seu aplicativo for codificado para usar CPU0-CPU3, seja trocar fisicamente os soquetes ... mas, na verdade, basta executar com uma CPU aqui.

Se você está se referindo ao hardware ProLiant DL380 G7, sua CPU "mais rápida" provavelmente é um processo da série Nehalem 5500, com a CPU de núcleo hexadecimal mais lenta sendo uma Westmere. Você já comparou? Quais CPUs específicas estão instaladas?

Editar:

Ok, então essas são pelo menos CPUs da mesma geração / etapa. Mas ainda é uma má idéia ... A diferença nas especificações da CPU nem é tão grande (em comparação com algo como um Intel X5690 a 3,47 GHz).

ewwhite
fonte
4
Todo mundo tem a mesma reação! Eu sei que, idealmente, os CPUs seriam os mesmos, mas foi isso que a HP nos deu de volta naquele dia. Essa é a mão que eu lidei, então eu tenho que fazer o melhor possível até a próxima atualização de hardware. As CPUs são Xeon E5649 a 2.53GHz (núcleo hexadecimal) e E5640 a 2.67GHz (núcleo quádruplo). Remover a CPU de 6 núcleos completamente, na verdade, é uma das opções na tabela. Seria mais fácil desativar o soquete inteiramente no BIOS, mas não parece possível.
paulos
@paulos Que aplicação é essa?
ewwhite 8/08/2014
É realmente funcionar como um ponto de verificação firewall
Paulos
3
@paulos Então por que 2.67GHz versus 2.53GHz importa? Basta colocar a CPU de 6 núcleos no servidor e remover os 4 núcleos.
precisa saber é o seguinte
re: especificação da CPU, sim, eu acho que é apenas cerca de 5% mais rápido ou algo assim. Espero que o ganho de desempenho seja atribuído a ter todos os threads de trabalho e, em particular, a tempestade de irq das placas de rede na mesma CPU física. editar: Sim, usar apenas a CPU de 6 núcleos também é uma possibilidade.
paulos