GNU/Linux >> Linux Esercitazione >  >> Linux

Come conoscere il numero di core di un sistema in Linux?

Per avere un quadro completo è necessario esaminare il numero di thread per core, core per socket e socket. Se moltiplichi questi numeri otterrai il numero di CPU sul tuo sistema.

CPU =Thread per core X core per socket X socket

Le CPU sono ciò che vedi quando esegui htop (non corrispondono a CPU fisiche).

Ecco un esempio da una macchina desktop:

$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s):                8
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1

E un server:

$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s):                32
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2

L'output di nproc corrisponde al conteggio della CPU da lscpu . Per la macchina desktop sopra questo dovrebbe corrispondere alle 8 CPU riportate da lscpu :

$ nproc --all
8

L'output di /proc/cpuinfo dovrebbe corrispondere a queste informazioni, ad esempio sul sistema desktop sopra possiamo vedere che ci sono 8 processori (CPU) e 4 core (core id 0-3):

$ grep -E 'processor|core id' /proc/cpuinfo
processor   : 0
core id     : 0
processor   : 1
core id     : 0
processor   : 2
core id     : 1
processor   : 3
core id     : 1
processor   : 4
core id     : 2
processor   : 5
core id     : 2
processor   : 6
core id     : 3
processor   : 7
core id     : 3

Il cpu cores riportato da /proc/cpuinfo corrisponde al Core(s) per socket riportato da lscpu . Per la macchina desktop sopra questo dovrebbe corrispondere ai 4 core per socket riportati da lscpu:

$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores   : 4

Per rispondere in modo specifico alla tua domanda, indica quanti core hai moltiplicando il numero di core che hai per socket per il numero di socket che hai.

Core =Core per socket X socket

Per i sistemi di esempio sopra il desktop ha 4 core:

$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4

Mentre il server ha 16:

$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 16

Un'altra utile utilità è dmidecode che emette informazioni per socket. Nel caso del sistema server sopra elencato, ci aspettiamo di vedere 8 core per socket e 16 thread per socket:

$ sudo dmidecode -t 4 | grep -E 'Socket Designation|Count'
    Socket Designation: CPU1
    Core Count: 8
    Thread Count: 16
    Socket Designation: CPU2
    Core Count: 8
    Thread Count: 16

Il lscpu command ha una serie di opzioni utili che potresti voler controllare, ad esempio:

$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'

Vedi man lscpu per i dettagli.

In sintesi:

  • Devi essere consapevole di socket, core e thread
  • Devi stare attento al termine CPU in quanto significa cose diverse in contesti diversi

Devi guardare socket e core per socket. In questo caso hai 1 CPU fisica (socket) che ha 4 core (core per socket).


Puoi ottenere queste informazioni per nproc(1) comando

$ nproc --all
12

Non richiede privilegi di root.


Linux
  1. Come configurare la virtualizzazione su Redhat Linux

  2. Come impostare o modificare il nome host del sistema in Linux

  3. Come modificare il nome host in Linux

  4. come conoscere il numero di interrupt/GPIO per un pin specifico in Linux

  5. Su Linux, come sapere quanti core della macchina sono attivi?

Come deframmentare il tuo sistema Linux

Come trovare il numero di core della CPU dalla riga di comando in Linux

Come ottenere il numero di processori/core in Linux

Come sapere se il tuo sistema ha una porta USB 3.0 in Linux [Suggerimento rapido]

Come eseguire il ping di un numero di porta in Linux

Come elencare i servizi su Linux