Увімкнення 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?

Відповіді:


13

Я думаю, що ця картина достатньо пояснює:

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

  • socket або 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

Список літератури


2
@slm - то , що ви говорите , має сенс, але чому документація ядра (цит моє запитання) сказати , що я повинен включити CONFIG_NUMAв core i7?
користувач1968963

1
Оскільки Haswell більше не відповідає дійсності, NUMA не використовує жодної користі для машини з одним процесором Деякі продукти Haswell містять те, що Intel називає режимом «Кластер на Die». Процесор однієї розетки має вбудовані кілька контролерів пам'яті і, отже, безліч шляхів до пам'яті, які за допомогою цієї функції можуть розглядатися як окремі області NUMA, які охоплюють один сокет.
Пол Кахені

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 , яка перемістила контролер пам'яті з Northbridge на процесор (що AMD зробила в 2003 році з Opteron / AMD64) і запровадила QuickPath Interconnect / QPI (як кулон до HyperTransport 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 використовується для підключення процесора до концентратора IO (наприклад, для підключення 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 :

В кінці 2007 року Intel оголосила про сумісність NUMA для своїх серверів x86 та Itanium разом із процесорами 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 від конфігураційних файлів ).

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


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до перших 2 ядер процесора. Моя система - i5 з 4 ядрами.

Список літератури


2

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

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

Підводячи підсумок, NUMA варто лише у тому випадку, якщо у вас є більше 1 розетки процесора (незалежно від ядер). Дуже невеликий удар по обробці потужності на 1 процесорних сокетних машинах навіть з декількома ядрами, але це навряд чи помітно, тому більшість дистрибутивів залишають це увімкненим, оскільки це забезпечить величезну користь для серверів і машин з більш ніж 1 розеткою.


1

У ПК, що має щонайменше один процесор, NUMA абсолютно марний. Ви можете відключити його у власному ядрі.

Ви завжди можете керувати процесорним зв'язком за допомогою набору завдань (1) .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.