Linux: desligamento do núcleo da CPU em vez do estado de suspensão

10

No Linux, você pode desligar os núcleos da CPU (ou CPUs físicas) com eco 0> / sys / devices / system / cpu / cpu1 / online Supondo que o hardware desligue completamente a CPU e corte a energia, não seria melhor desabilitar os núcleos inteiramente em vez de confiar nos vários estados de suspensão de um processador?

Para ilustrar o princípio, eu estava pensando algo nesse sentido (pseudocódigo) para um sistema com quatro CPUs:

if(loadavg > 3.00) echo 1 > /sys/devices/system/cpu/cpu3/online
if(loadavg < 3.00) echo 0 > /sys/devices/system/cpu/cpu3/online

if(loadavg > 2.00) echo 1 > /sys/devices/system/cpu/cpu2/online
if(loadavg < 2.00) echo 0 > /sys/devices/system/cpu/cpu2/online

if(loadavg > 1.00) echo 1 > /sys/devices/system/cpu/cpu1/online
if(loadavg < 1.00) echo 0 > /sys/devices/system/cpu/cpu1/online
Waxhead
fonte

Respostas:

6

Definir o status online do núcleo da CPU apenas informa ao agendador do processo para não usar esse núcleo em nenhum processo. Em um nível de hardware, o núcleo está simplesmente ocioso ( NOPs), mas ainda está ativo. Embora isso economize energia, não poupará tanta energia quanto colocar o computador em suspensão. Por quê?

Bem, sua placa-mãe, CPU e GPU ainda estão em execução ! Quando você coloca o computador em modo de suspensão, todos esses componentes são literalmente desligados, e apenas a energia suficiente para manter sua memória RAM ativa (da ordem de alguns watts).

Novamente, embora eu concorde que economizará energia, até desligar metade dos núcleos da CPU pode reduzir pela metade o consumo de energia do processador (embora, na realidade, você possa economizar apenas 30-40%, pois esses núcleos ainda precisam ficar ociosos), mas isso está longe de ser o único componente do sistema que consome energia. Mesmo se você economizar 50 W ao fazer isso, seu computador inteiro ainda estará consumindo muito mais energia do que os meros watts no modo de suspensão.


Considerações finais: Embora eu concorde que essa seja uma ótima idéia na prática, também é por isso que muitos fabricantes de CPU incluem escala de frequência dinâmica ("Speed ​​Step" da Intel), com suporte para Linux. Você pode obter melhor desempenho geral, bem como eficiência de energia, definindo essas frequências de maneira mais adequada às suas necessidades. Isso pode ser feito tanto no hardware (configurações do BIOS) quanto no software (o kernel do Linux permite modificar alguns parâmetros da CPU, consulte o link que eu publiquei acima ou este site para obter detalhes).

Isso funciona, porque a seguir está a equação genérica para o consumo de energia de um circuito CMOS:

P = CV 2 f, onde C = capacitância (assumida fixa), V = tensão ef = frequência.

Assim, dividir a frequência por 2 resultará na metade do consumo de energia original. Dividir a tensão por 2 reduzirá o consumo de energia para 1/4 do original.

Avanço
fonte
Pelo menos em processadores compatíveis com x86 / amd64, eu assumiria que, se possível, uma instrução HLT seria mais fácil na CPU do que um NOP. Eu também estava me referindo aos vários estados de suspensão (ou estados do processador corretamente C0-C3 (ACPI)). Além disso, eu estava pensando mais em sistemas que funcionam sempre onde todo o sistema não pode ser colocado em suspensão. Nesse caso, estou curioso para saber se o hardware realmente cortará a energia da CPU e se isso será implementado em algumas configurações. Obrigado pela sua resposta, mas deixarei a pergunta em aberto um pouco mais.
Waxhead
@Waxhead Depois de cortar a energia da CPU, todo o computador está logicamente "desligado" (e só pode ser ligado novamente através de uma interrupção externa), mesmo se outro hardware ainda estiver ligado. Além disso, você pode estar certo ao usar em HLTvez de NOP, mas isso está relacionado ao uso de interrupções (que é como tirar um processador do estado interrompido). Em vez de reduzir a potência, a maioria dos processadores altera dinamicamente a velocidade e a tensão do relógio (equação adicionada à minha resposta).
Breakthrough
Eu fiz mais algumas pesquisas sobre isso. Acontece que o Linux realmente suporta hotplug de uma CPU. Nesse caso, se o BIOS / placa-mãe o suportar, você poderá realmente desligar a (s) CPU (s) e substituí-las, por exemplo, retirar a CPU do soquete enquanto o sistema estiver em execução e substituí-la. Ref: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu se não estiver enganado, isso reduziria a energia de uma CPU se o BIOS / placa-mãe o suportasse .
Waxhead
@ Breakthrough Obrigado por seu bom post. Você pode fornecer alguns documentos de referência sobre detalhes de como podemos colocar cpu em estado de baixa energia (com a sistema de reinicialização) e pode recuperá-lo quando necessário
iDebD_gh
@ Breakthrough "o núcleo está simplesmente ocioso (fazendo NOPs)," Quando fazemos o offline em um núcleo específico da CPU, ele desaparece de "/ proc / interrupts". Como você pode dizer que o Core está processando a operação NOP?
iDebD_gh 6/09/16