Linux: arresto del core della CPU anziché dello stato di sospensione


10

In Linux puoi spegnere i core della CPU (o della CPU fisica) con echo 0> / sys / devices / system / cpu / cpu1 / online Supponendo che l'hardware spenga completamente la CPU e interrompa l'alimentazione se non fosse meglio disabilitarlo i core invece di fare affidamento sui vari stati di sospensione di un processore?

Per illustrare il principio stavo pensando a qualcosa del genere (pseudocodice) per un sistema con quattro 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

Risposte:


6

L'impostazione dello stato online del core della CPU indica semplicemente all'utilità di pianificazione del processo di non utilizzare quel core per alcun processo. A livello hardware, il core è semplicemente inattivo (facendo NOP), ma ancora alimentato. Sebbene ciò risparmierà energia, non risparmerà quasi la stessa energia di mettere il computer in sospensione. Perché?

Bene, la tua scheda madre, CPU e GPU sono ancora in esecuzione ! Quando si mette in sospensione il computer, tutti questi componenti sono letteralmente non alimentati e viene utilizzata la potenza sufficiente per mantenere viva la RAM (nell'ordine di un paio di watt).

Ancora una volta, mentre sono d'accordo sul fatto che risparmierà energia, anche spegnendo metà dei core della tua CPU potrebbe dimezzare il consumo di energia del processore (anche se in realtà, potresti risparmiare solo il 30-40% poiché quei core devono ancora rimanere inattivi), ma questo è ben lungi dall'essere l'unico componente del sistema che utilizza energia. Anche se risparmi 50 W in questo modo, l'intero computer sta ancora assorbendo molta più energia rispetto ai semplici watt in modalità di sospensione.


Considerazioni finali: anche se concordo che questa è una grande idea in pratica, questo è anche il motivo per cui molti produttori di CPU includono il ridimensionamento dinamico della frequenza ("Speed ​​Step" di Intel), con supporto per Linux. È possibile ottenere prestazioni complessive migliori, nonché efficienza energetica, impostando queste frequenze in modo più appropriato per le proprie esigenze. Questo può essere fatto sia in hardware (impostazioni del BIOS), sia in software (il kernel Linux consente di modificare alcuni parametri della CPU, vedere il link che ho pubblicato sopra o questo sito Web per i dettagli).

Questo funziona, poiché la seguente è l'equazione generica per il consumo di energia di un circuito CMOS:

P = CV 2 f, dove C = capacità (presuppone fissa), V = tensione e f = frequenza.

Pertanto, dividendo la frequenza per 2 si dimezza il consumo di energia originale. Dividere la tensione per 2 ridurrà il consumo di energia a 1/4 dell'originale.


Almeno su processori compatibili x86 / amd64, suppongo che se possibile un'istruzione HLT sarebbe più semplice sulla CPU di un NOP. Mi riferivo anche ai vari stati di sospensione (o correttamente stati del processore C0-C3 (ACPI)). Inoltre, pensavo di più ai sistemi che funzionano sempre dove l'intero sistema non può essere messo in sospensione. In tal caso, sono curioso di sapere se l'hardware taglierà effettivamente la CPU e se questo è implementato in alcune configurazioni. Grazie per la tua risposta, ma lascio che la domanda rimanga aperta un po 'più a lungo.
Waxhead,

@Waxhead dopo aver interrotto l'alimentazione della CPU, l'intero computer è logicamente "spento" (e può essere riacceso solo tramite interruzione esterna), anche se altro hardware è ancora alimentato. Inoltre, potresti avere ragione sull'uso HLTinvece di NOP, ma ciò si ricollega all'uso degli interrupt (che è come portare un processore fuori dallo stato di arresto). Invece di ridurre la potenza, la maggior parte dei processori cambia dinamicamente la velocità e la tensione di clock (aggiunta equazione alla mia risposta).
Sfondamento

Ho fatto qualche ricerca in più su questo. Si scopre che Linux supporta effettivamente hotplug di una CPU. In tal caso, se il BIOS / la scheda madre lo supporta, è possibile arrestare la CPU e sostituirli, ad esempio strappare la CPU dal suo socket mentre il sistema è in esecuzione e sostituirla. Rif: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu se non sbaglio questo ridurrebbe l'alimentazione di una CPU se il BIOS / la scheda madre lo supportano.
Waxhead,

@Breakthrough Grazie per il tuo bel post. Puoi fornire alcuni documenti di riferimento sui dettagli di come possiamo mettere la CPU in uno stato di basso consumo (senza il sistema di riavvio) e
riaverlo

@Breakthrough "il core è semplicemente inattivo (facendo NOP)," Quando facciamo offline su un particolare core della CPU, scompare da "/ proc / interrupt". Come si può dire che il Core sta elaborando un'operazione NOP?
iDebD_gh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.