Сколько физических процессоров в моем компьютере?

Сколько физических процессоров в моем компьютере?

Я немного запутался в количестве процессоров на моем сервере.

Он работает на Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHzкотором согласноофициальные документы Intelсодержит 20 физических ядер.

Проблема здесь заключается в выводе lscpuкоманды (некоторые строки отфильтрованы):

CPU(s):                          80
On-line CPU(s) list:             0-79
Thread(s) per core:              2
Core(s) per socket:              20
Socket(s):                       2
NUMA node(s):                    2
Model name:                      Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
NUMA node0 CPU(s):               0-19,40-59
NUMA node1 CPU(s):               20-39,60-79

Насколько я понимаю actual physical cores = CPU(s) / thread(s) per core, я получаю 40, что вдвое больше, чем я ожидал.

Может ли кто-нибудь объяснить мне, что здесь происходит и что именно это CPU(s), thread(s) per core, core(s) per socket, socet(s)означает?

решение1

  • Socketsпоказывает, сколько физических процессоров находится в системе.

  • Cores per socketсколько полных ядер ЦП (включая логику загрузки/декодирования) приходится на один физический ЦП.

  • Threads per coreсколько потоков может быть запланировано на одном ядре (HyperThreading). Проще говоря, оборудование в ЦП, которое используетсядофактическое выполнение кода удваивается, что позволяет ЦП иметь несколько различных задач, готовых к выполнению. Это позволяет ЦП извлекать/декодировать инструкции до того, как они попадут в исполняющее ядро ​​ЦП. Это предотвращает или уменьшаетзатор на трубопроводе.

  • CPUозначает «планируемые сущности», это то, сколько очередей выполнения будет у операционной системы, так что это будетsockets x cores per socket x threads per core

В вашем случае у вас есть 2 физических процессора, каждый из которых имеет 20 ядер, каждый из которых может запускать 2 потока (гиперпоточность). Итак 2x20x2 = 80, какое число CPUsотображается.

решение2

Путаница возникает из-за очень простой детали, которая может быть неясна из информации, которую lscpuвам показывает команда.

Дело в том, что на вашем сервере на самом деле их 2 Intel(R) Xeon(R) Gold 6242R CPU, что и указано в Socket(s)строке.

Как указано в документации Intel, каждый из этих процессоров содержит 20 физических ядер ( Core(s) per socketлиния), что в общей сложности дает 40 физических ядер.

Каждое из этих ядер способно запускать 2 потока «одновременно» (линия Thread(s) per core).

Итак: 2 Intel Xeon, по 20 физических ядер каждый, по 2 потока на каждое ядро, дают в общей сложности 80 «единиц, которые могут выполнять процесс» или «ЦП».

решение3

Идея ЦП сейчас немного абстрагирована, и это началось с гиперпоточности (конец 90-х), а затем с серии Intel Core (начало 00-х). До этого у вас определенно были многопроцессорные системы, но все они были многопроцессорными физическими.

Однако при использовании гиперпоточности и многоядерных отдельных ЦП физическое количество ЦП отличается от логического количества ЦП, которое видит работающий на ЦП код.

Socket(s):                       2

У вас есть 2 физических процессора, как в «штуке с радиатором, подключенной к вашей материнской плате»

Core(s) per socket:              20

Каждый физический ЦП имеет 20 ядер, которые выглядят и в основном работают как независимые ЦП для Linux. Ядра используют как минимум один и тот же кэш L3, вероятно, кэш L2 и, вероятно, имеют свой собственный кэш L1 — так что они не так производительны, как отдельные сокеты с собственными L3/L2/L1, но почти так же.

Поскольку это каждое гнездо, у вас есть 2 * 20 = 40.

Thread(s) per core:              2

Каждое ядро ​​имеет 2 потока SMT, которые реализованы микроархитектурой вашего ЦП, чтобы в целом выглядеть как независимые ЦП для Linux.

Они не будут такими быстрыми, как настоящие независимые ядра.

Потоки на микроархитектуре пытаются захватить неиспользуемые в данный момент этапы конвейера из ядер, но, если они заняты, им, возможно, придется ждать, а процессоры и так стараются быть очень занятыми, так что, опять же, 2 потока на 2 ядрах далеко не эквивалентны 4 ядрам, но это то, что может немного ускорить выполнение кода.

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

В любом случае, поскольку это на ядро, а также на сокет, то это 2 * 20 * 2, что дает вам:

CPU(s):                          80

решение4

Ваш сервер использует 2 «процессорных чипа» (на 2 сокетах), каждый из которых имеет 20 физических ядер.

И каждое ядро ​​может обрабатывать 2 потока.

Вот почему он отображает 2 (чипов процессора) * 20 (ядер на часть) * 2 (потока, которое может обрабатывать каждое ядро) = 80 ЦП.

В данном случае ЦП означает «планируемая сущность», т.е. количество потоков, которые может запустить машина.

Связанный контент