Włączanie NUMA dla Intel Core i7

22

W jądrze Linuksa dokumentacja CONFIG_NUMAmówi:

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.

Mam procesor Intel Core i7, ale AFAICT ma tylko jeden węzeł 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 

Jaki jest więc cel CONFIG_NUMA=y, kiedy i7 ma tylko jeden węzeł NUMA?

użytkownik1968963
źródło

Odpowiedzi:

13

Myślę, że to zdjęcie wyjaśnia wystarczająco:

                  wprowadź opis zdjęcia tutaj

  • socket lub numa node to zbiór rdzeni z lokalnym dostępem do pamięci. Każde gniazdo zawiera 1 lub więcej rdzeni. Zauważ, że niekoniecznie odnosi się to do fizycznego gniazda, ale raczej do architektury pamięci maszyny, która będzie zależeć od dostawcy twojego układu.

  • rdzeń procesora ( rdzeń procesora, procesor logiczny) odnosi się do pojedynczej jednostki przetwarzania zdolnej do wykonywania obliczeń.

Tak więc powyższe wskazuje, że do obsługi architektury NUMA potrzeba wielu procesorów.

Możesz skompilować obsługę NUMA w jądrze i uruchomić ją na maszynie jednoprocesorowej. Jest podobnie jak w przypadku obsługi SMP. Jest również wkompilowany, ale gdy jądro wykryje, że w systemie jest pojedynczy procesor, nie będzie go używać (wyłącza). To samo dotyczy NUMA. Możesz sprawdzić dmesgbufor pierścieniowy jądra lub /var/log/dmesgplik pod kątem powiązanych wiadomości:

NUMA - pojedynczy procesor (lub NUMA wyłączony) X wieloprocesorowy:

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

SMP - wieloprocesorowy procesor X:

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

Referencje

dsmsk80
źródło
2
@slm - co mówisz ma sens, ale dlaczego w dokumentacji jądra (cytowany w moim pytaniu) powiedzieć powinny włączyć CONFIG_NUMAdo core i7?
user1968963
1
Od czasu Haswell nie jest już prawdą, że NUMA nie ma żadnego zastosowania w przypadku maszyny z „pojedynczym procesorem” (co oznacza jedno gniazdo). Niektóre produkty Haswell są wyposażone w to, co Intel nazywa trybem „Cluster on Die”. Procesor z jednym gniazdem ma zintegrowane wiele kontrolerów pamięci, a zatem wiele ścieżek do pamięci, które dzięki tej funkcji można traktować jako odrębne regiony NUMA, z których wszystkie obejmują jedno gniazdo.
Paul Caheny,
16
For 64-bit this is recommended if the system is Intel Core i7
(or later), AMD Opteron, or EM64T NUMA.

Po pierwsze, zauważ, że Intel Core i7 jest tylko oznaczeniem marketingowym, a zwrot Intel Core i7 (lub nowszy) jest bardzo niejasny. Co to może znaczyć?

Teksty Kconfigpomocy jądra systemu Linux wspominające o Intel Core 7i , a następnie poprawione do Intel Core i7 , zostały wykonane w listopadzie 2008 roku. Dziennik zatwierdzeń brzmi:

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.

Może w uzasadniony sposób odnosić się tylko do procesorów Intel Core i7 wydanych lub ogłoszonych według specyfikacji do tego czasu. Byłyby to procesory Bloomfield oparte na mikroarchitekturze Nehalem , które przeniosły kontroler pamięci z mostka północnego na procesor (co AMD zrobiła w 2003 roku z Opteron / AMD64) i wprowadziły QuickPath Interconnect / QPI (jako zawieszenie HyperTransport AMD) do wzajemnego połączenia CPU / CPU i CPU / IOH (IO hub, ex-Northbridge).

Procesory Bloomdale i7 były pierwszymi wpisami w nowym schemacie nazewnictwa Core i {3,5,7} . Kiedy więc napisano ten tekst na temat Linuksa, i7 nie odnosiło się konkretnie do Core i7 w przeciwieństwie do i5 (pierwszy w 09/2009) lub i3 (pierwszy w 01/2010), ale najprawdopodobniej do nowej mikroarchitektury Nehalem z zintegrowany kontroler pamięci i QPI.

Istnieje informacja prasowa firmy Intel z 11/2008 na temat i7 ( Intel wprowadza najszybszy procesor na świecie ), która stwierdza, że procesor Core i7 ponad dwukrotnie zwiększa przepustowość pamięci poprzednich platform Intel „Extreme” , ale w ogóle nie wspomina o NUMA .

Wydaje mi się, że NUMA nie ma znaczenia dla komputerów stacjonarnych, nawet tych „ekstremalnych”.

NUMA ma znaczenie dla drogich serwerów, które mają kilka gniazd procesora (nie tylko kilka rdzeni na jednym gnieździe) z dedykowanymi liniami dostępu do pamięci fizycznej (nie tylko jednego kontrolera pamięci), dzięki czemu każdy procesor ma swoją dedykowaną pamięć lokalną, która jest „bliżej” niż pamięć innych procesorów. (Pomyśl o 8 gniazdach, 64 rdzeniach, 256 GB pamięci RAM). NUMA oznacza, że ​​procesor może również uzyskać dostęp do pamięci zdalnej (pamięci lokalnej innego procesora) oprócz własnej pamięci lokalnej, aczkolwiek za wyższą cenę. NUMA to synteza architektury pamięci współużytkowanej, takiej jak SMP, w której cała pamięć jest jednakowo dostępna dla wszystkich rdzeni oraz architektury pamięci rozproszonej, takiej jak MPP (Massively Parallel Processing), która daje każdemu węzłowi dedykowany blok pamięci. Jest to MPP, ale wygląda jak SMP dla aplikacji.

Płyty główne do komputerów stacjonarnych nie mają podwójnych gniazd, a procesory Intel do komputerów stacjonarnych, w tym ekstremalne wersje i7, nie mają dodatkowego łącza QPI do konfiguracji z dwoma gniazdami.

Zobacz artykuł QPI z Wikipedii, aby zobaczyć, jak QPI jest istotny dla NUMA:

W najprostszej postaci na płycie głównej z pojedynczym procesorem pojedynczy QPI służy do podłączenia procesora do IO Hub (np. Do podłączenia Intel Core i7 do X58). W bardziej złożonych przypadkach architektury oddzielne pary łączy QPI łączą jeden lub więcej procesorów i jeden lub więcej koncentratorów IO lub koncentratorów routingu w sieci na płycie głównej, umożliwiając wszystkim komponentom dostęp do innych komponentów przez sieć. Podobnie jak w przypadku HyperTransport, architektura QuickPath zakłada, że ​​procesory będą miały zintegrowane kontrolery pamięci i umożliwi architekturę nierównomiernego dostępu do pamięci (NUMA).

[…]

Chociaż niektóre wysokiej klasy procesory Core i7 ujawniają QPI, inne „stacjonarne” stacjonarne i mobilne procesory Nehalem przeznaczone do kart z pojedynczym gniazdem (np. LGA 1156 Core i3, Core i5 i inne procesory Core i7 z rodziny Lynnfield / Clarksfield i następców) nie ujawniaj QPI zewnętrznie, ponieważ te procesory nie są przeznaczone do udziału w systemach z wieloma gniazdami. Jednak QPI jest wykorzystywany wewnętrznie w tych układach […]

Sposób, w jaki procesor Intel Nehalem na płycie serwera z wieloma gniazdami zapewnia dostęp do pamięci nielokalnej, odbywa się za pośrednictwem QPI. Również w artykule na temat NUMA :

Intel ogłosił zgodność NUMA dla swoich serwerów x86 i Itanium pod koniec 2007 roku z procesorami Nehalem i Tukwila. Obie rodziny procesorów mają wspólny mikroukład; połączenie nazywa się Intel Quick Path Interconnect (QPI). AMD wdrożyło NUMA ze swoim procesorem Opteron (2003), używając HyperTransport.

Sprawdź ten raport z 11/2008, aby zobaczyć, czy Intel wyłączył jedno z dwóch łączy QPI na i7, wyłączając w ten sposób konfigurację podwójnego gniazda, gdzie obowiązuje NUMA:

Ta pierwsza, wysokiej klasy implementacja Nehalem na komputery nosi nazwę Bloomfield i jest zasadniczo tym samym krzemem, który ostatecznie powinien przejść na serwery z dwoma gniazdami. W rezultacie żetony Bloomfield są wyposażone w dwa łącza QPI na pokładzie, jak pokazuje powyższy strzał. Jednak drugie łącze QPI nie jest używane. Na serwerach 2P opartych na tej architekturze ten drugi interkonekt połączy dwa gniazda, a nad nim procesory będą współużytkować komunikaty koherencji pamięci podręcznej (przy użyciu nowego protokołu) i danych (ponieważ podsystem pamięci będzie NUMA) - ponownie, bardzo podobny do Opteron.

Odchodzę więc od pytania dotyczącego wyników badań Google… Pytasz, dlaczego doktorzy Linuxa zalecili włączenie go pod koniec 2008 roku? Nie jestem pewien, czy to pytanie ma poprawną odpowiedź… Musielibyśmy zapytać pisarza. Włączenie NUMA nie przynosi korzyści użytkownikom procesorów na pulpicie, ale też nie wyrządza im znaczących szkód, jednocześnie pomagając użytkownikom korzystającym z wielu gniazd, więc dlaczego nie? To mogło być uzasadnienie. Stwierdzono, że znalazło to odzwierciedlenie w dyskusji na temat wyłączania NUMA w narzędziu do śledzenia Arch Linux ( FS # 31187 - [linux] - wyłącz NUMA w plikach konfiguracyjnych ).

Autor dokumentu mógł również pomyśleć o potencjale NUMA architektury Nehalem, którego jedynymi przedstawicielami podczas pisania dokumentu były procesory Core i7 11/2008 (920, 940, 965); pierwsze układy Nehalem, dla których NUMA naprawdę miałoby sens, to prawdopodobnie procesory Xeon Q1 / 2009 z podwójnym łączem QPI, takie jak Xeon E5520 .

Lumi
źródło
2

Myślę, że użycie --showprzełącznika może mieć większy sens:

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

Możesz więc kontrolować korzystanie z physcpubind w następujący sposób:

$ numactl --physcpubind=+0-2 myapp

Ograniczyłoby to aplikację myappdo pierwszych 2 rdzeni procesora. Mój system to i5 z 4 rdzeniami.

Referencje

slm
źródło
2

Badałem to samo na komputerze stacjonarnym, budując własne jądro. Zdecydowałem się wyłączyć NUMA po wielu badaniach. Mój procesor to Core i7 3820, który ma 8 procesorów z HT. Ta strona pomogła mi podjąć decyzję.

wyłącz NUMA z plików konfiguracyjnych

Podsumowując, NUMA jest opłacalne tylko wtedy, gdy masz więcej niż 1 gniazdo procesora (niezależnie od rdzeni). Moc obliczeniowa jest bardzo niewielka na 1 komputerze z gniazdem procesora, nawet z wieloma rdzeniami, ale jest to prawie niezauważalne, więc większość dystrybucji pozostawia to włączone, ponieważ zapewni ogromną korzyść serwerom i maszynom z więcej niż 1 gniazdem.

Anthony S.
źródło
1

Na komputerze z co najmniej jednym procesorem NUMA jest całkowicie bezużyteczny. Nie krępuj się wyłączyć go we własnym jądrze.

Zawsze możesz kontrolować wiązanie CPU za pomocą zestawu zadań (1) .

b166er
źródło