Как узнать количество ядер в системе в Linux?

Что делает a

ps  -p 1983  -f   # 1983 being the PID your screenshot shows

скажите Вам об этом?

242
09.11.2018, 19:43
11 ответов

Вы должны посмотреть количество сокетов и ядер на сокет. В этом случае у вас есть 1 физический процессор (сокет), который имеет 4 ядра (ядра на сокет).

122
27.01.2020, 19:27

При передаче аргументов в SSH требуется больше кавычек. Попробуйте:

ssh localhost "df -k / | awk '{print \$3/1024/1024/1024}'"
0
0.00623375

Обратите внимание на \ перед $3 .

-121--216975-
find $(find -name "[0-9][0-9][0-9][0-9]") -name "[test]*" -mtime -7 -exec rm -i {} \; || echo "There are no recovery files older than 7 days"

Оператор | | ( или ) просматривает результат команды слева и запускает команду справа, только если команда слева не удалась (на основе кода возврата).

Если при поиске не будут найдены соответствующие файлы, возвращается значение 1, в результате чего | | запускает команду echo .

-121--229196-

Можно также использовать команду cat/proc/cpuinfo , которая выведет часть данных для каждого ядра. Каждый блок начинается с этой информации:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 60
model name  : Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz
(...)

Ядра нумеруются начиная с 0, поэтому, если последний блок говорит processor: 3 , как в этом случае, у машины есть 4 ядра.

14
27.01.2020, 19:27

Семейство процессоров здесь не имеет значения.

  • CPU(s) = физические сокеты
  • Core(s) на сокет - как говорится
  • поэтому общее количество ядер = CPU(s) * Core(s) на сокет

В вашем случае всего 4 полных ядра.

Также важным может быть "Поток(и) на одно ядро". Но у вас есть 1, так что не в вашем случае.

-2
27.01.2020, 19:27

Вы можете получить эту информацию с помощью nproc (1) команды

$ nproc --all
12

Для этого не требуются привилегии root.

61
27.01.2020, 19:27
[root@xxxxx ~]#  dmidecode -t 4 | egrep -i "Designation|Intel|core|thread"
    Socket Designation: CPU1
    Manufacturer: Intel
            HTT (Multi-threading)
    Version: Intel(R) Xeon(R) CPU           L5640  @ 2.27GHz
    Core Count: 6
    Core Enabled: 6
    Thread Count: 12
    Socket Designation: CPU2
    Manufacturer: Intel
            HTT (Multi-threading)
    Version: Intel(R) Xeon(R) CPU           L5640  @ 2.27GHz
    Core Count: 6
    Core Enabled: 6
    Thread Count: 12
4
27.01.2020, 19:27

Чтобы получить полную картину, вам нужно посмотреть количество потоков на ядро, ядер на сокет и сокеты . Если вы умножите эти числа, вы получите количество процессоров в вашей системе.

CPUs = потоков на ядро ​​X ядер на сокет X сокетов

CPU - это то, что вы видите при запуске 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

Ядра процессора , указанные в / proc / cpuinfo , соответствуют Количество ядер на сокет , о которых сообщает lscpu .Для настольной машины, приведенной выше, это должно соответствовать 4 ядрам на сокет, о которых сообщает lscpu:

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

Чтобы конкретно ответить на ваш вопрос, вы указываете, сколько ядер у вас есть, умножая количество ядер, которые у вас есть на сокет, на количество сокетов. у тебя есть.

Ядра = Количество ядер на сокет X Сокетов

В приведенных выше примерах систем у рабочего стола 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, поскольку он означает разные вещи в разных контекстах
250
27.01.2020, 19:27
$ grep -c processor /proc/cpuinfo
8

Это все, что вам нужно. Это количество ядер в сети, независимо от того, включена ли гиперпоточность.

$ ls -d /sys/devices/system/cpu/cpu* | wc -l
8

Другой простой способ.

4
27.01.2020, 19:27
getconf _NPROCESSORS_ONLN

(getconf является частью glibc)

7
27.01.2020, 19:27

Я нашел так:

echo $((`cat /sys/devices/system/cpu/present | sed 's/0-//'` + 1))
1
27.01.2020, 19:27

A простой способ определить количество процессоров - ввести следующие команды:

cat /proc/interrupts | egrep -i 'cpu'
-3
27.01.2020, 19:27

Чтобы ответ не был запутанным, вам нужно понять пару простых концепций компьютерной архитектуры:

  • Вы запускаете процессы ("программы") в вашей системе linux. Каждый процесс состоит из одного или нескольких потоков
  • Каждый поток представляет собой отдельную последовательность инструкций. Два потока могут выполняться параллельно.
  • Каждая инструкция передается центральному процессору для выполнения. Центральный процессор имеет логику, которая определяет, что означают биты инструкции, и решает, что с ней делать.
  • Существуют различные типы инструкций. Логика принятия решений внутри центрального процессора направляет различные инструкции в различные аппаратные блоки. Например, арифметические инструкции выполняются ALU (арифметико-логическим блоком), а инструкции загрузки/записи из памяти выполняются каким-либо блоком памяти.

  • Под ядром понимается набор фактического оборудования для выполнения инструкций (т.е. каждое ядро имеет АЛУ, блок памяти и т.д.)

  • Вы можете иметь несколько процессоров, которые совместно используют одно ядро - это называется гиперпоточностью.

    • Идея: поток A в данный момент выполняет арифметические действия, а поток B загружает что-то из памяти. Когда это так, потоки A и B могут эффективно использовать одно ядро, не мешая друг другу (A использует ALU, B - блок памяти). Конечно, иногда обе программы хотят использовать ALU, и тогда им приходится ждать друг друга...
  • Сокет сокет - это физический слот на материнской плате, в который вставляется микросхема. Этот чип имеет определенное количество ядер.

Примеры:

Пример ОП:

CPU(s):                4
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
  • один физический сокет, который содержит чип с
  • 4 физическими ядрами (считайте, что всего 4 ALU и 4 блока памяти)
  • Только один поток может отдавать инструкции ядру (без гиперпоточности), что означает, что на одно ядро приходится
  • один CPU, или 4 * 1 = 4 CPU

Другой пример:

CPU(s):                16
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             2

два физических сокета, каждый из которых содержит чип с 4 физическими ядрами, итого 8 ядер. Два потока выдают инструкции каждому ядру (у этой машины есть гиперпоточность), что означает, что к каждому ядру должно быть подключено два процессора, что в сумме составляет 8 * 2 = 16 процессоров

Первая машина может выполнять ровно четыре инструкции в любой момент времени, точка. Вторая машина может выполнять от 8 до 16 инструкций в любой момент времени: 16 будет достигнуто только тогда, когда каждая пара CPU будет выполнять разные типы инструкций и сможет разделить ядро без ожидания.

22
27.01.2020, 19:27

Теги

Похожие вопросы