Il 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
Lascia un commento