Включение NUMA для Intel Core i7

22

В ядре Linux документация для CONFIG_NUMAговорит:

Enable NUMA (Non Uniform Memory Access) support. 

he kernel will try to allocate memory used by a CPU on the  
local memory controller of the CPU and add some more
NUMA awareness to the kernel.

For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

У меня есть процессор Intel Core i7, но AFAICT имеет только один узел NUMA:

$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16063 MB
node 0 free: 15031 MB
node distances:
node   0 
  0:  10 

Так в чем же смысл иметь CONFIG_NUMA=y, когда в i7 есть только один узел NUMA?

user1968963
источник

Ответы:

13

Я думаю, что эта картина объясняет достаточно:

                  введите описание изображения здесь

  • сокет или узел numa - это набор ядер с локальным доступом к памяти. Каждый сокет содержит 1 или более ядер. Обратите внимание, что это не обязательно относится к физическому сокету, а скорее к архитектуре памяти компьютера, которая будет зависеть от вашего производителя чипов.

  • Ядро процессора ( ядро процессора, логический процессор) относится к одному процессору, способному выполнять вычисления.

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

Вы можете скомпилировать поддержку NUMA в ядре и запустить ее на однопроцессорной машине. Это похоже на поддержку SMP. Он также скомпилирован, но когда ядро ​​обнаруживает, что в системе есть один процессор, оно не будет его использовать (отключить). То же самое относится и к NUMA. Вы можете проверить dmesgкольцевой буфер ядра или /var/log/dmesgфайл для связанных сообщений:

NUMA - однопроцессорный (или NUMA отключен) X мультипроцессор:

No NUMA configuration found
NUMA: Allocated memnodemap from b000 - b440

SMP - однопроцессорный X мультипроцессор:

SMP: Allowing 1 CPUs, 0 hotplug CPUs
SMP: Allowing 32 CPUs, 0 hotplug CPUs

Ссылки

dsmsk80
источник
2
@slm - то , что вы говорите , имеет смысл, но почему документация ядра (цит мой вопрос) сказать , что я должен включить CONFIG_NUMAв core i7?
user1968963
1
Начиная с Haswell, больше не соответствует действительности, что NUMA бесполезен для «однопроцессорного» компьютера. Некоторые продукты Haswell имеют то, что Intel называет режимом Cluster on Die. Процессор с одним сокетом имеет несколько встроенных контроллеров памяти и, следовательно, несколько путей к памяти, которые с помощью этой функции могут рассматриваться как отдельные области NUMA, все из которых охватывают один сокет.
Пол Caheny
16
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Во-первых, обратите внимание, что Intel Core i7 - это просто маркетинговое обозначение, а фраза Intel Core i7 (или более поздняя версия) очень расплывчата. Так что бы это могло значить?

KconfigРедактирование текста справки ядра Linux с упоминанием Intel Core 7i , затем исправленное в Intel Core i7 , было сделано в ноябре 2008 года. Журнал фиксации гласит:

x86: update CONFIG_NUMA description
Impact: clarify/update CONFIG_NUMA text

CONFIG_NUMA description talk about a bit old thing.
So, following changes are better.

 o CONFIG_NUMA is no longer EXPERIMENTAL

 o Opteron is not the only processor of NUMA topology on x86_64 no longer,
   but also Intel Core7i has it.

Это может относиться только к процессорам Intel Core i7, выпущенным или анонсированным к тому времени. Это будут процессоры Bloomfield , основанные на микроархитектуре Nehalem , которые перенесли контроллер памяти из северного моста в ЦП (что AMD сделала в 2003 году с Opteron / AMD64) и представили QuickPath Interconnect / QPI (как подвеска к гипертранспорту AMD) для соединения CPU / CPU и CPU / IOH (IO-концентратор, бывший северный мост).

Процессоры Bloomdale i7 были первыми элементами новой схемы именования Core i {3,5,7} . Поэтому, когда был написан этот документный документ по Linux, i7 конкретно не ссылался на Core i7, в отличие от i5 (сначала в 09/2009) или i3 (сначала в 01/2010), но, по всей вероятности, на новую микроархитектуру Nehalem с его встроенный контроллер памяти и QPI.

Существует пресс-релиз Intel от 11/2008 о i7 ( Intel запускает самый быстрый процессор на планете ), в котором говорится, что процессор Core i7 более чем удваивает пропускную способность памяти предыдущих платформ Intel "Extreme" , но вообще не упоминает NUMA ,

Думаю, причина в том, что NUMA не имеет значения для настольных ПК, даже для «экстремальных».

NUMA имеет значение для дорогих серверов, которые имеют несколько сокетов ЦП (а не только несколько ядер на одном сокете) с выделенными линиями доступа к физической памяти (не только один контроллер памяти), так что каждый ЦП имеет свою выделенную локальную память, которая «ближе» к нему. чем память других процессоров. (Представьте себе 8 сокетов, 64 ядра, 256 ГБ ОЗУ.) NUMA означает, что ЦП может также получать доступ к удаленной памяти (локальной памяти другого ЦП) в дополнение к собственной локальной памяти, хотя и с более высокой стоимостью. NUMA - это синтез архитектуры разделяемой памяти, такой как SMP, где вся память одинаково доступна для всех ядер, и архитектуры распределенной памяти, такой как MPP (Massively Parallel Processing), которая дает каждому узлу выделенный блок памяти. Это MPP, но похоже на SMP для приложения.

Системные платы для настольных ПК не имеют двойных сокетов, а для процессоров Intel для настольных ПК, включая версии для крайних версий i7, отсутствует дополнительная связь QPI для конфигурации с двумя сокетами.

Проверьте статью QPI в Википедии, чтобы увидеть, как QPI имеет отношение к NUMA:

В простейшей форме на однопроцессорной материнской плате один QPI используется для подключения процессора к концентратору ввода-вывода (например, для подключения Intel Core i7 к X58). В более сложных случаях архитектуры отдельные пары каналов QPI соединяют один или несколько процессоров и один или несколько концентраторов ввода-вывода или маршрутизации в сети на материнской плате, позволяя всем компонентам получать доступ к другим компонентам через сеть. Как и в случае с HyperTransport, архитектура QuickPath предполагает, что процессоры будут иметь встроенные контроллеры памяти, и поддерживает архитектуру неоднородного доступа к памяти (NUMA).

[...]

Хотя некоторые высокопроизводительные процессоры Core i7 предоставляют QPI, другие «основные» процессоры Nehalem для настольных и мобильных ПК предназначены для однопроцессорных плат (например, LGA 1156 Core i3, Core i5 и другие процессоры Core i7 из семейств Lynnfield / Clarksfield и их преемников) не раскрывайте QPI извне, поскольку эти процессоры не предназначены для участия в системах с несколькими сокетами. Тем не менее, QPI используется внутри этих чипов […]

Процессор Intel Nehalem на серверной плате с несколькими сокетами обеспечивает нелокальный доступ к памяти через QPI. Также в статье о NUMA :

Intel объявила о совместимости NUMA для своих серверов x86 и Itanium в конце 2007 года с процессорами Nehalem и Tukwila. Оба семейства процессоров имеют общий чипсет; соединение называется Intel Quick Path Interconnect (QPI). AMD внедрила NUMA с процессором Opteron (2003), используя HyperTransport.

Проверьте этот отчет от 11/2008, чтобы увидеть, что Intel отключила одну из двух ссылок QPI на i7, тем самым отключив конфигурацию с двумя сокетами, где применяется NUMA:

Эта первая высокопроизводительная реализация Nehalem для настольных компьютеров с кодовым названием Bloomfield, и это, по сути, тот же кремний, который должен в конечном итоге использоваться в двухпроцессорных серверах. В результате чипы Bloomfield поставляются с двумя QPI-связями, как показано выше. Однако вторая ссылка QPI не используется. В серверах 2P, основанных на этой архитектуре, это второе межсоединение свяжет два сокета, а через него процессоры будут обмениваться сообщениями когерентности кэша (используя новый протокол) и данными (поскольку подсистема памяти будет представлять собой NUMA) - опять же, очень похоже на Оптерон.

Так что я отклоняюсь от вашего вопроса, касающегося моих результатов исследований Google ... Вы спрашиваете, почему документы Linux начали рекомендовать включать его в конце 2008 года? Не уверен, что у этого вопроса есть правдоподобно правильный ответ ... Мы должны спросить доку. Включение NUMA не приносит пользы пользователям настольных процессоров, но также не наносит им значительного вреда, помогая многопользовательским пользователям, так почему бы и нет? Это могло быть обоснованием. Обнаружено, что отражено в дискуссии об отключении NUMA на трекере Arch Linux ( FS # 31187 - [linux] - отключить NUMA из конфигурационных файлов ).

Автор документа также мог подумать о потенциале NUMA в архитектуре Nehalem, единственными представителями которой были процессоры Core i7 11/2008 (920, 940, 965) на момент написания документа; первые чипы Nehalem, для которых NUMA действительно имел бы смысл, - это, вероятно, процессоры Xeon Q1 / 2009 с двойной связью QPI, такие как Xeon E5520 .

Lumi
источник
2

Я думаю, что если вы используете --showпереключатель, это может иметь больше смысла:

$ numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 
cpubind: 0 
nodebind: 0 
membind: 0 

Таким образом, вы можете контролировать использование Physcpubind следующим образом:

$ numactl --physcpubind=+0-2 myapp

Это ограничит приложение myappпервыми двумя ядрами процессора. Моя система - i5 с 4 ядрами.

Ссылки

SLM
источник
2

Я исследовал то же самое для своего настольного ПК, собирая свое ядро ​​самостоятельно. Я решил отключить NUMA после долгих исследований. Мой процессор - Core i7 3820, который имеет 8 процессоров с HT. Эта страница помогла мне прийти к моему решению.

отключить NUMA из конфигурационных файлов

Таким образом, NUMA имеет смысл только в том случае, если у вас более 1 сокета процессора (независимо от ядер). Очень слабый удар по вычислительной мощности на машинах с 1 процессорным сокетом даже с несколькими ядрами, но это едва заметно, поэтому большинство дистрибутивов оставляют его включенным, поскольку это даст огромную выгоду серверам и машинам с более чем 1 сокетом.

Энтони С.
источник
1

В ПК с не более чем одним процессором NUMA совершенно бесполезен. Не стесняйтесь отключить его в своем собственном ядре.

Вы всегда можете контролировать связывание ЦП с помощью набора задач (1) .

b166er
источник