Linux: apagado del núcleo de la CPU en lugar del estado de suspensión

10

En Linux, puede apagar los núcleos de la CPU (o las CPU físicas) con echo 0> / sys / devices / system / cpu / cpu1 / online Suponiendo que el hardware apaga completamente la CPU y corta la alimentación, no sería mejor desactivarla los núcleos completamente en lugar de depender de los diversos estados de suspensión de un procesador?

Para ilustrar el principio, estaba pensando algo en este sentido (pseudocódigo) para un sistema con cuatro CPU:

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
Cabeza de cera
fuente

Respuestas:

6

Establecer el estado en línea del núcleo de la CPU solo le dice al planificador de procesos que no use ese núcleo para ningún proceso. En un nivel de hardware, el núcleo simplemente está inactivo (haciendo NOPs), pero aún con energía. Si bien esto ahorrará energía, no ahorrará casi tanta energía como poner la computadora en suspensión. ¿Por qué?

Bueno, ¡tu placa base, CPU y GPU siguen funcionando ! Cuando pones la computadora en suspensión, todos estos componentes están literalmente sin alimentación, y se usa la potencia suficiente para mantener viva tu RAM (del orden de un par de vatios).

Nuevamente, aunque estoy de acuerdo en que ahorrará energía, incluso apagar la mitad de los núcleos de su CPU puede reducir a la mitad el consumo de energía del procesador (aunque en realidad, solo puede ahorrar un 30-40% ya que esos núcleos aún deben permanecer inactivos), pero esto está lejos de ser el único componente en el sistema que usa energía. Incluso si ahorra 50 W al hacer esto, toda su computadora aún consume mucha más energía que meros vatios en modo de suspensión.


Reflexiones finales: si bien estoy de acuerdo en que esta es una gran idea en la práctica, esta es también la razón por la cual muchos fabricantes de CPU incluyen escalado de frecuencia dinámico ("Speed ​​Step" de Intel), con soporte para Linux. Puede obtener un mejor rendimiento general, así como eficiencia energética, al configurar estas frecuencias de manera más adecuada para sus necesidades. Esto se puede hacer tanto en hardware (configuración del BIOS) como en software (el kernel de Linux le permite modificar algunos parámetros de la CPU, consulte el enlace que publiqué anteriormente o este sitio web para más detalles).

Esto funciona porque la siguiente es la ecuación genérica para el consumo de energía de un circuito CMOS:

P = CV 2 f, donde C = capacitancia (se supone fijo), V = voltaje yf = frecuencia.

Por lo tanto, dividir la frecuencia por 2 reducirá la mitad del consumo de energía original. Dividir el voltaje por 2 reducirá el consumo de energía a 1/4 del original.

Penetración
fuente
Al menos en procesadores compatibles con x86 / amd64, supondría que, de ser posible, una instrucción HLT sería más fácil en la CPU que un NOP. También me refería a los diversos estados de suspensión (o correctamente los estados del procesador C0-C3 (ACPI)). También estaba pensando más en sistemas que se ejecutan siempre en los que no se puede dormir todo el sistema. En ese caso, tengo curiosidad por saber si el hardware realmente cortará la alimentación de la CPU y si eso se implementa en algunas configuraciones. Gracias por su respuesta, pero dejaré que la pregunta permanezca abierta un poco más.
Waxhead
@Waxhead una vez que corta la alimentación de la CPU, toda la computadora está "apagada" lógicamente (y solo se puede volver a encender mediante una interrupción externa), incluso si otro hardware todavía está encendido. Además, puede tener razón sobre el uso en HLTlugar de NOP, pero eso se relaciona con el uso de interrupciones (que es cómo sacar un procesador del estado detenido). En lugar de cortar la energía, la mayoría de los procesadores cambian dinámicamente la velocidad del reloj y el voltaje (ecuación agregada a mi respuesta).
Avance el
Investigué un poco más sobre esto. Resulta que Linux realmente soporta hotplug de una CPU. En ese caso, si el BIOS / Motherboard lo admite, puede apagar las CPU y reemplazarlas, por ejemplo, extraer la CPU de su zócalo mientras el sistema está en funcionamiento y reemplazarla. Ref: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu si no me equivoco, esto cortaría la alimentación de una CPU SI el BIOS / Motherboard lo admite.
Waxhead
@Breakthrough Gracias por tu bonita publicación. ¿Puede proporcionar algunos documentos de referencia sobre los detalles de cómo podemos poner la CPU en estado de baja potencia (sin sistema de reinicio) y puede recuperarla cuando sea necesario
IDebD_gh
@Breakthrough "el núcleo simplemente está inactivo (haciendo NOP)," Cuando lo hacemos sin conexión en un núcleo de CPU en particular, desaparece de "/ proc / interrupts". ¿Cómo se puede decir que el Core está procesando la operación NOP?
iDebD_gh