Abilitazione di NUMA per Intel Core i7


22

Nel kernel di Linux, la documentazione per CONFIG_NUMAdice:

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.

Ho un processore Intel Core i7, ma AFAICT ha solo un nodo 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 

Allora, qual è lo scopo di avere CONFIG_NUMA=y, quando i7 ha solo un nodo NUMA?

Risposte:


13

Penso che questa immagine spieghi abbastanza:

                  inserisci qui la descrizione dell'immagine

  • nodo socket o numa è una raccolta di core con accesso locale alla memoria. Ogni socket contiene 1 o più core. Si noti che ciò non si riferisce necessariamente a un socket fisico, ma piuttosto all'architettura di memoria della macchina, che dipenderà dal proprio fornitore di chip.

  • core del processore ( core della CPU, processore logico) si riferisce a una singola unità di elaborazione in grado di eseguire calcoli.

Quindi quanto sopra indica che per sfruttare l'architettura NUMA occorrerebbero più processori nella macchina.

Puoi avere compilato il supporto NUMA nel kernel ed eseguirlo su un singolo processore. È simile come con il supporto SMP. È compilato anche in ma ma quando il kernel rileva che c'è un singolo processore nel sistema non lo utilizzerà (disabilitarlo). Lo stesso vale per NUMA. È possibile controllare il dmesgbuffer dell'anello del kernel o il /var/log/dmesgfile per i messaggi correlati:

NUMA - Processore singolo (o NUMA disabilitato) X multiprocessore:

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

SMP - processore multiplo X multiprocessore:

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

Riferimenti


2
@slm - quello che dici ha un senso, ma perché la documentazione del kernel (citato nella mia interrogazione) dicono che dovrei abilitare CONFIG_NUMAper core i7?
user1968963

1
Dal momento che Haswell non è più vero che NUMA non è di alcuna utilità per una macchina a "singolo processore" (che significa socket singolo). Alcuni prodotti Haswell presentano quella che Intel definisce la modalità 'Cluster on Die'. Il processore a socket singolo ha più controller di memoria integrati e quindi più percorsi di memoria, che con questa funzione possono essere trattati come distinte regioni NUMA, che comprendono tutte un socket.
Paul Caheny,

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

Innanzitutto, nota che Intel Core i7 è solo una designazione di marketing e la frase Intel Core i7 (o successiva) è molto vaga. Quindi cosa potrebbe significare?

Il kernel di Kconfigaiuto di Linux ha apportato modifiche al testo che menzionano un Intel Core 7i , quindi corretto a Intel Core i7 , nel novembre del 2008. Il registro di commit riporta:

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.

Può ragionevolmente fare riferimento solo alle CPU Intel Core i7 rilasciate o annunciate per specifica entro quel momento. Sarebbero i processori Bloomfield , basati sulla microarchitettura Nehalem , che ha spostato il controller di memoria da Northbridge alla CPU (cosa che AMD aveva fatto nel 2003 con Opteron / AMD64) e introdotto QuickPath Interconnect / QPI (come pendente per HyperTransport di AMD) per interconnessione CPU / CPU e CPU / IOH (hub IO, ex Northbridge).

Le CPU Bloomdale i7 sono state le prime voci nel nuovo schema di denominazione Core i {3,5,7} . Quindi, quando è stato scritto quel documento di Linux, i7 non si riferiva specificamente al Core i7 rispetto a i5 (prima nel 09/2009) o i3 (prima nel 01/2010), ma con ogni probabilità alla nuova microarchitettura Nehalem con il suo controller di memoria integrato e QPI.

C'è un comunicato stampa Intel dell'11/2008 su i7 ( Intel lancia il processore più veloce del pianeta ) in cui si afferma che il processore Core i7 raddoppia la larghezza di banda della memoria delle precedenti piattaforme "Extreme" di Intel , ma non menziona affatto NUMA .

La ragione è, penso, che NUMA non ha importanza per i PC desktop, nemmeno per quelli "estremi".

NUMA è importante per i server costosi che dispongono di più socket CPU (non solo diversi core su un socket) con corsie di accesso alla memoria fisica dedicate (non solo un controller di memoria), in modo che ogni CPU abbia la propria memoria locale dedicata, che è "più vicina" ad essa rispetto alla memoria delle altre CPU. (Pensa a 8 socket, 64 core, 256 GB di RAM.) NUMA significa che una CPU può anche accedere alla memoria remota (la memoria locale di un'altra CPU) oltre alla propria memoria locale, sebbene a un costo più elevato. NUMA è la sintesi di un'architettura di memoria condivisa come SMP, in cui tutta la memoria è ugualmente disponibile per tutti i core e un'architettura di memoria distribuita come MPP (Massively Parallel Processing), che fornisce a ciascun nodo un blocco di memoria dedicato. È MPP, ma sembra SMP all'applicazione.

Le schede madri desktop non hanno doppi socket e le CPU desktop Intel, comprese le edizioni i7 estreme, non dispongono del collegamento QPI aggiuntivo per la configurazione a doppio socket.

Controlla l' articolo di QPI di Wikipedia per vedere come QPI è rilevante per NUMA:

Nella sua forma più semplice su una scheda madre a processore singolo, un singolo QPI viene utilizzato per collegare il processore all'hub IO (ad esempio, per collegare un Intel Core i7 a un X58). In istanze più complesse dell'architettura, coppie di collegamenti QPI separate collegano uno o più processori e uno o più hub IO o routing hub in una rete sulla scheda madre, consentendo a tutti i componenti di accedere ad altri componenti tramite la rete. Come con HyperTransport, l'architettura QuickPath presuppone che i processori dispongano di controller di memoria integrati e consenta un'architettura di accesso alla memoria non uniforme (NUMA).

[...]

Sebbene alcuni processori Core i7 di fascia alta espongano il QPI, altri processori Nehalem desktop e mobili "mainstream" destinati a schede single-socket (ad es. LGA 1156 Core i3, Core i5 e altri processori Core i7 delle famiglie Lynnfield / Clarksfield e successive) non esporre il QPI esternamente, poiché questi processori non sono destinati a partecipare a sistemi multi-socket. Tuttavia, il QPI viene utilizzato internamente su questi chip […]

Il modo in cui una CPU Intel Nehalem su una scheda server multi-socket rende l'accesso alla memoria non locale è tramite QPI. Anche nell'articolo su NUMA :

Intel ha annunciato la compatibilità NUMA per i suoi server x86 e Itanium alla fine del 2007 con le sue CPU Nehalem e Tukwila. Entrambe le famiglie di CPU condividono un chipset comune; l'interconnessione si chiama Intel Quick Path Interconnect (QPI). AMD ha implementato NUMA con il suo processore Opteron (2003), utilizzando HyperTransport.

Controlla questo rapporto dall'11 / 2008 per vedere che Intel ha disabilitato uno dei due collegamenti QPI su i7, disabilitando così la configurazione a doppio socket, dove si applica NUMA:

Questa prima implementazione desktop di fascia alta di Nehalem ha il nome in codice Bloomfield ed è essenzialmente lo stesso silicio che alla fine dovrebbe entrare nei server a due socket. Di conseguenza, i chip Bloomfield sono dotati di due collegamenti QPI integrati, come indica il tiro sopra indicato. Tuttavia, il secondo collegamento QPI non è utilizzato. Nei server 2P basati su questa architettura, quella seconda interconnessione collegherà i due socket e, su di essa, le CPU condivideranno i messaggi di coerenza della cache (usando un nuovo protocollo) e i dati (poiché il sottosistema di memoria sarà NUMA) - di nuovo, molto simile all'Opteron.

Quindi mi sono allontanato dalla tua domanda relativa ai risultati della mia ricerca su Google ... Stai chiedendo perché i documenti di Linux hanno iniziato a raccomandare di attivarlo alla fine del 2008? Non sono sicuro che questa domanda abbia una risposta dimostrabilmente corretta ... Dovremmo chiedere allo scrittore di documenti. L'attivazione di NUMA non avvantaggia gli utenti di CPU desktop, ma non li danneggia in modo significativo, aiutando al contempo gli utenti con più socket, quindi perché no? Questo avrebbe potuto essere la logica. Trovato ciò che si riflette in una discussione sulla disabilitazione di NUMA sul tracker Arch Linux ( FS # 31187 - [linux] - disabilita NUMA dai file di configurazione ).

L'autore del documento potrebbe anche aver pensato al potenziale NUMA dell'architettura Nehalem di cui, quando il documento è stato scritto, i processori Core i7 dell'11 / 2008 (920, 940, 965) erano gli unici rappresentanti; i primi chip Nehalem per i quali NUMA avrebbe davvero avuto senso sono probabilmente i processori Xeon Q1 / 2009 con doppio collegamento QPI come Xeon E5520 .


2

Penso che se usi l' --showinterruttore potrebbe avere più senso:

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

Quindi puoi controllare l'uso di physcpubind in questo modo:

$ numactl --physcpubind=+0-2 myapp

Ciò limiterebbe l'applicazione myappai primi 2 core della CPU. Il mio sistema è un i5 con 4 core.

Riferimenti


2

Ho cercato la stessa cosa per il mio PC desktop mentre costruivo il mio kernel da solo. Ho deciso di disabilitare NUMA dopo molte ricerche. La mia CPU è un Core i7 3820 che ha 8 processori con HT. Questa pagina mi ha aiutato a prendere la mia decisione.

disabilita NUMA dai file di configurazione

In breve, NUMA è utile solo se si dispone di più di un socket CPU (indipendentemente dai core). La potenza di elaborazione di 1 CPU Socket è notevolmente ridotta anche con più core, ma è quasi impercettibile, quindi la maggior parte delle distribuzioni lo lascia abilitato in quanto fornirà un enorme vantaggio a server e macchine con più di 1 socket.


1

In un PC con al massimo una CPU, NUMA è totalmente inutile. Sentiti libero disabilitalo nel tuo kernel.

È sempre possibile controllare il collegamento della CPU tramite tasket (1) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.