Aby uzyskać pełny obraz, musisz spojrzeć na liczbę wątków na rdzeń, rdzenie na gniazdo i gniazda . Jeśli pomnożycie te liczby, otrzymacie liczbę procesorów w systemie.
Procesory = liczba wątków na rdzeń X rdzeni na gniazdo X gniazda
Procesory są tym, co widać po uruchomieniu htop
(nie są równe procesorom fizycznym).
Oto przykład z komputera stacjonarnego:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
I serwer:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 32
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
Wyjście nproc
odpowiada liczbie procesorów od lscpu
. W przypadku komputera stacjonarnego powyżej powinno to być 8 procesorów zgłoszonych przez lscpu
:
$ nproc --all
8
Dane wyjściowe /proc/cpuinfo
powinny pasować do tych informacji, na przykład w powyższym systemie stacjonarnym widać, że jest 8 procesorów (procesorów) i 4 rdzenie (identyfikator rdzenia 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
cpu cores
Donosi /proc/cpuinfo
odpowiada Core(s) per socket
donosi lscpu
. W przypadku komputera stacjonarnego powyżej powinno to odpowiadać 4 rdzeniom na gniazdo zgłoszonym przez lscpu:
$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores : 4
Aby dokładnie odpowiedzieć na twoje pytanie, powiedz, ile masz rdzeni, mnożąc liczbę rdzeni na gniazdo przez liczbę gniazd.
Rdzenie = Rdzenie na gniazdo X Gniazda
Na przykładowe systemy powyżej pulpitu mają 4 rdzenie:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4
Podczas gdy serwer ma 16:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 16
Innym przydatnym narzędziem jest to, dmidecode
które dane wyjściowe przypadają na gniazdo. W przypadku wyżej wymienionego systemu serwerów oczekujemy 8 rdzeni na gniazdo i 16 wątków na gniazdo:
$ 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
lscpu
Komenda posiada wiele przydatnych opcji, które może chcesz sprawdzić, na przykład:
$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'
Zobacz man lscpu
szczegóły.
W podsumowaniu:
- Musisz być świadomy gniazd, rdzeni i gwintów
- Musisz być ostrożnym z terminem „CPU”, ponieważ oznacza różne rzeczy w różnych kontekstach