7

Как получить количество ЦПУ/ядер в Linux через командную строку?

6

У меня есть следующий скрипт, но я не знаю, как получить последний элемент в выводе:

cat /proc/cpuinfo | awk '/^processor/{print $3}'

Последний элемент должен быть равен количеству процессоров минус 1. Как это реализовать?

5 ответ(ов)

8

Команда

grep -c ^processor /proc/cpuinfo

посчитает количество строк, начинающихся с "processor" в файле /proc/cpuinfo.

Для систем с гипертредингом можно использовать

grep ^cpu\\scores /proc/cpuinfo | uniq | awk '{print $4}'

Эта команда вернёт (например) 8 (в то время как предыдущая команда вернёт 16).

0

Команда lscpu извлекает информацию о архитектуре процессора из файла /proc/cpuinfo и выводит ее в удобочитаемом формате.

Вот пример вывода команды lscpu:

# lscpu

Architecture:          x86_64                     # Архитектура процессора
CPU op-mode(s):        32-bit, 64-bit             # Поддерживаемые режимы работы CPU
Byte Order:            Little Endian                # Порядок байтов
CPU(s):                8                           # Количество процессоров
On-line CPU(s) list:   0-7                         # Список активных процессоров
Thread(s) per core:    1                           # Количество потоков на ядро
Core(s) per socket:    4                           # Количество ядер на сокет
CPU socket(s):         2                           # Количество сокетов
NUMA node(s):          1                           # Количество узлов NUMA
Vendor ID:             GenuineIntel                 # Идентификатор производителя
CPU family:            6                           # Семейство процессоров
Model:                 15                          # Модель процессора
Stepping:              7                           # Степень процессора
CPU MHz:               1866.669                    # Тактовая частота (МГц)
BogoMIPS:              3732.83                     # BogoMIPS
Virtualization:        VT-x                        # Поддержка виртуализации
L1d cache:             32K                        # Размер кэша L1 для данных
L1i cache:             32K                        # Размер кэша L1 для инструкций
L2 cache:              4096K                       # Размер кэша L2
NUMA node0 CPU(s):     0-7                        # Процессоры в узле NUMA 0

Дополнительную информацию можно найти по ссылке.

0

Чтобы подсчитать количество физических ядер, которые находятся в онлайне на Linux, я использую следующий способ:

lscpu --online --parse=Core,Socket |
grep --invert-match '^#' |
sort --unique |
wc --lines

Более короткая версия:

lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l

Пример с 1 сокетом:

$ lscpu
...
CPU(s):                28
Thread(s) per core:    2
Core(s) per socket:    14
Socket(s):             1
...

$ lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
14

Пример с 2 сокетами:

$ lscpu
...
CPU(s):                56
Thread(s) per core:    2
Core(s) per socket:    14
Socket(s):             2
...

$ lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
28

Пример с 4 сокетами:

$ lscpu
...
CPU(s):                64
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             4
...

$ lscpu -b -p=Core,Socket | grep -v '^#' | sort -u | wc -l
32

Таким образом, вы можете легко определить количество физических ядер, которые в данный момент активны на вашей системе.

0

Вы также можете использовать Python! Чтобы получить количество физических ядер, выполните следующий код:

$ python -c "import psutil; print(psutil.cpu_count(logical=False))"
4

А чтобы узнать количество ядер с гипертредингом, воспользуйтесь командой:

$ python -c "import psutil; print(psutil.cpu_count(logical=True))"
8
0

Для получения общего числа физических ядер можно использовать следующую команду:

grep '^core id' /proc/cpuinfo | sort -u | wc -l

На многопроцессорных машинах (или всегда) умножьте результат на количество сокетов:

echo $(($(grep "^physical id" /proc/cpuinfo | awk '{print $4}' | sort -un | tail -1) + 1))

@mklement0 привел довольно красивый ответ ниже, используя команду lscpu. Я написал более лаконичную версию в комментариях.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь