Hotplug delle CPU in Linux

Intel Pentium Pro 512kIl kernel di Linux permette di disabilitare da riga di comando una singola CPU o un singolo core.

Questa funzione è utile per i test di stress, per debug, oppure in un ambiente virtuale per rilasciare CPU all’hypervisor.

Non è detto che l’hardware sottostante supporti l’hotplug fisico della CPU. Generalmente questa funzione è presente solamente nei server di fascia alta, quindi è bene resistere alla tentazione di togliere una CPU, a meno di non voler sperimentare la regola del fumo magico.

La maggior parte delle CPU attuali è multicore, quindi anche se il vostro computer ha un solo socket, Linux potrebbe vedere più CPU. Da qui in avanti con CPU si intende non il socket, ma la CPU logica vista dal sistema operativo.

I comandi che seguono richiedono ovviamente i privilegi di root; nel caso di ridirezione dell’I/O il comando sudo da solo non è sufficiente e si deve diventare root oppure utilizzare sudo -i

Innanzi tutto vediamo quante CPU vengono viste dal sistema; per ottenere questa informazione ci sono essenzialmente tre modi.

Con

ls -l /sys/devices/system/cpu

si possono vedere le directory relative alle singole CPU.

Oppure attraverso il comando lscpu si ottiene un output simile a questo

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 26
Model name:            Intel(R) Core(TM) i7 CPU  920  @ 2.67GHz
Stepping:              5
CPU MHz:               2668.000
BogoMIPS:              5346.68
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

Come potete vedere, il numero di CPU viste da Linux (ma la regola vale anche per altri sistemi operativi) è dato dal numero di socket moltiplicato il numero di core moltiplicato il numero di thread per core.

Essendoci solamente un socket l’unico nodo NUMA è 0; se ci fossero stati due socket, si sarebbe visto anche un nodo 1 con assegnate delle CPU.

Un terzo modo, più verboso, è quello di consultare il file di testo /proc/cpuinfo

Per conoscere quali sono le CPU online si utilizza

cat /sys/devices/system/cpu/online

che restituisce il range delle CPU online viste da Linux.

Per mettere offline una CPU è sufficiente questo comando

echo 0 > /sys/devices/system/cpu/cpu3/online

Una volta eseguito, verificando con il file /sys/devices/system/cpu/online si vede che la cpu3 non è più online e che quella CPU è inclusa nell’elenco del file /sys/devices/system/cpu/offline

Per rimettere online la CPU si esegue

echo 1 > /sys/devices/system/cpu/cpu3/online

che rende di nuovo disponibile la CPU.

Per come funziona l’architettura Linux, è bene evitare di mettere offline la cpu0, cosa impossibile da fare in molti casi; se si guarda in /sys/devices/system/cpu/cpu0/ si noterà l’assenza del file online, che controlla lo stato di hotplug della CPU.

Se proprio proprio proprio non volete diventare root per fare la ridirezione dell’I/O e non volete nemmeno utilizzare sudo -i, l’alternativa è lanciare solamente tee come root in questo modo

echo 0 | sudo tee /sys/devices/system/cpu/cpu3/online

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

Un pensiero riguardo “Hotplug delle CPU in Linux”

Spazio per un commento