Comando lscpu in Linux: leggere architettura, core e CPU logiche
lscpu mostra l’architettura della CPU riconosciuta da Linux, il numero di CPU logiche, la struttura di core e socket e le informazioni sulle cache. È un punto di partenza per capire la configurazione di un server, non una misura delle sue prestazioni.
Il comando raccoglie dati soprattutto da sysfs e /proc/cpuinfo. Una CPU logica è un’unità di esecuzione vista dal sistema operativo: non coincide necessariamente con un core fisico. In una macchina virtuale, i dati descrivono normalmente la configurazione esposta al sistema ospite, che può differire dall’hardware dell’host.
Sintassi di base
lscpu [opzioni]
Le parentesi indicano opzioni facoltative e non vanno digitate. Esegui questi comandi di sola lettura in un terminale Linux; normalmente non serve sudo. In SSH esamini il server remoto. lscpu fa parte di util-linux: controlla lscpu --version, lscpu --help e man lscpu per le opzioni e le colonne disponibili nella versione installata.
Esempi pratici
Panoramica della CPU
lscpu
Leggi insieme architettura, CPU logiche, thread per core, core per socket e numero di socket. Un socket è il contenitore topologico di un processore; un core può esporre più thread hardware con il multithreading simultaneo (SMT). Nella macchina virtuale questi raggruppamenti possono essere virtuali.
Elenco delle CPU
lscpu -e
Ottieni una riga per CPU con informazioni quali identificatore, core, socket e stato online, secondo le colonne disponibili. Per un confronto ripetibile puoi richiedere esplicitamente lscpu -e=CPU,CORE,SOCKET,ONLINE. Non inserire spazi intorno a = o tra i nomi. Una colonna presente ma vuota può indicare un dato non disponibile nell’architettura.
Informazioni sulle cache
lscpu -C
Controlla livelli, dimensioni e condivisione delle cache, se l’opzione è supportata. Distingui la dimensione di una singola istanza da quella complessiva: una cache può essere condivisa da più core. La rappresentazione del riepilogo è cambiata in util-linux 2.34; non moltiplicare automaticamente ogni valore per il numero di core.
Distinguere CPU logiche e core fisici
Per leggere soltanto l’inizio del riepilogo puoi usare:
lscpu | head -n 8
Questo limita l’output alle prime otto righe, senza garantire quali campi vi compaiano. Il seguente è un estratto illustrativo selezionato per spiegare la topologia, non la trascrizione esatta di quelle otto righe né un risultato misurato:
Architecture: x86_64
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Se il sistema ha un solo socket, quattro core uniformi e due thread attivi per ciascun core, otto CPU logiche sono coerenti con quattro core fisici. L’estratto non mostra il numero di socket né lo stato online: da solo non dimostra questa configurazione. Controlla il riepilogo completo e le righe di -e prima di fare il conto, specialmente con CPU disattivate, topologie non uniformi o virtualizzazione.
Per vedere l’utilizzo corrente affianca un monitor come top: lscpu descrive la configurazione e non dice quanto lavoro stia svolgendo ogni CPU. Otto CPU logiche non equivalgono automaticamente al doppio delle prestazioni di quattro core senza SMT.
Opzioni principali
| Opzione | Uso |
|---|---|
-e |
Tabella leggibile per CPU; per impostazione predefinita include CPU online e offline. |
-p |
Formato destinato all’elaborazione; per impostazione predefinita limita le righe alle CPU online. |
-C |
Dettagli sulle cache, secondo opzioni e dati supportati dalla versione. |
-a |
Include CPU online e offline; va usata insieme a -e o -p. |
-J |
Output JSON, nelle versioni che lo supportano; va verificata anche la struttura dei dati. |
Limiti e verifiche prima di usare i dati
Per uno script scegli le colonne, per esempio lscpu -p=CPU,CORE,SOCKET, anziché dividere il riepilogo in posizioni fisse. Gestisci anche le righe di commento che iniziano con # e i dati mancanti. Usa -a se ti servono anche le CPU offline: altrimenti non confrontare i conteggi di -p e -e come se avessero necessariamente lo stesso insieme di righe.
Il formato predefinito può variare tra versioni e tra terminale e pipe; le etichette possono dipendere dalla lingua. LC_ALL=C lscpu rende prevedibile la lingua delle etichette, ma non fissa per sempre l’ordine o l’insieme dei campi. Anche usando JSON, verifica struttura e campi della versione in uso.
In una macchina virtuale, confronta il risultato con la configurazione delle CPU virtuali assegnate dall’hypervisor. Non dedurre il numero di core fisici dell’host solo dal guest: la topologia virtuale può essere incompleta o imprecisa.
In un container, le CPU visibili e la quota effettivamente utilizzabile possono essere diverse. I control group (cgroup) di Linux possono limitare il tempo CPU o le CPU assegnate: in cgroup v2, cpu.max rappresenta un limite di tempo per periodo. Il solo valore CPU(s) non certifica quindi la quota concessa al processo. Verifica anche i limiti configurati nel runtime o nell’orchestratore.
In questo ambiente Windows con Git Bash lscpu non è disponibile. Sono state controllate la documentazione ufficiale e la sintassi shell degli esempi; non sono state misurate topologia, cache o prestazioni Linux e non è stato collaudato un guest o un container.
Domande frequenti
Il valore CPU(s) indica il numero di core fisici?
No. Indica le CPU logiche viste dal sistema. Leggi anche socket, core, thread e stato online, tenendo conto della virtualizzazione e degli eventuali limiti del container.
Documentazione ufficiale
Consulta il manuale di lscpu nel repository ufficiale util-linux per opzioni e limiti della topologia. I controlli sulle risorse dei container sono descritti nella documentazione ufficiale del kernel sui cgroup v2.




