Для отримання повної картини потрібно подивитися кількість ниток на ядро, ядра на розетку та розетки . Якщо ви помножите ці числа, ви отримаєте кількість процесорів у вашій системі.
ЦП = Нитки на ядро X ядер на розетку X розеток
Процесори - це те, що ви бачите під час запуску htop
(вони не прирівнюються до фізичних процесорів).
Ось приклад з настільної машини:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
І сервер:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 32
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
Вихід від nproc
відповідає кількості процесора від lscpu
. Для настільних машин вище це повинно відповідати 8 процесорам, про які повідомляє lscpu
:
$ nproc --all
8
Вихідні дані /proc/cpuinfo
повинні відповідати цій інформації, наприклад, на настільній системі вище ми бачимо, що є 8 процесорів (ЦП) та 4 ядра (основний ідентифікатор 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
Повідомив /proc/cpuinfo
відповідає Core(s) per socket
повідомленням lscpu
. Для настільних машин вище це повинно відповідати 4-х основним (ям) на сокет, повідомлених lscpu:
$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores : 4
Щоб конкретно відповісти на ваше запитання, ви скажіть, скільки ядер у вас є, помноживши кількість ядер у сокеті на кількість розеток у вас.
Cores = Ядра на розетку X Sockets
Для прикладу системи над робочим столом мають 4 ядра:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4
Поки сервер має 16:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 16
Ще одна корисна утиліта - dmidecode
це виведення інформації на розетку. У випадку перерахованої вище серверної системи ми очікуємо, що ми побачимо 8 ядер на сокет і 16 потоків на сокет:
$ 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
Команда має ряд корисних опцій , які ви можете , як перевірити, наприклад:
$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'
Детальніше man lscpu
див.
Підсумовуючи:
- Потрібно знати про розетки, сердечники та нитки
- Вам потрібно бути уважним до терміна CPU, оскільки він означає різні речі в різних контекстах