Activation de NUMA pour Intel Core i7

22

Dans le noyau Linux, la documentation de CONFIG_NUMAdit:

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.

J'ai un processeur Intel Core i7, mais AFAICT il n'a qu'un seul nœud 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 

Alors, quel est le but d'avoir CONFIG_NUMA=y, quand i7 n'a qu'un seul nœud NUMA?

user1968963
la source

Réponses:

13

Je pense que cette image explique assez:

                  entrez la description de l'image ici

  • socket ou numa node est une collection de cœurs avec un accès local à la mémoire. Chaque socket contient 1 ou plusieurs cœurs. Notez que cela ne fait pas nécessairement référence à un socket physique, mais plutôt à l'architecture de mémoire de la machine, qui dépendra du fournisseur de votre puce.

  • cœur de processeur (cpu core, processeur logique) fait référence à une seule unité de traitement capable d'effectuer des calculs.

Ainsi, ce qui précède indique que vous auriez besoin de plusieurs processeurs dans la machine pour tirer parti de l'architecture NUMA.

Vous pouvez avoir compilé la prise en charge NUMA dans le noyau et l'exécuter sur une machine à processeur unique. C'est similaire à la prise en charge SMP. Il est également compilé mais lorsque le noyau détecte qu'il y a un seul processeur dans le système, il ne l'utilisera pas (désactivez-le). Il en va de même pour NUMA. Vous pouvez vérifier le dmesgtampon d'anneau du noyau ou le /var/log/dmesgfichier pour les messages associés:

NUMA - processeur unique (ou NUMA désactivé) X multi processeur:

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

SMP - mono processeur X multi processeur:

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

Les références

dsmsk80
la source
2
@slm - ce que vous dites est logique, mais pourquoi la documentation du noyau (cité dans ma question) dis que je dois permettre CONFIG_NUMAde core i7?
user1968963
1
Depuis Haswell, il n'est plus vrai que NUMA n'est d'aucune utilité pour une machine à «processeur unique» (c'est-à-dire à socket unique). Certains produits Haswell proposent ce qu'Intel appelle le mode «Cluster on Die». Le processeur à socket unique a plusieurs contrôleurs de mémoire intégrés et donc plusieurs chemins d'accès à la mémoire, qui avec cette fonctionnalité peuvent être traités comme des régions NUMA distinctes, qui englobent toutes 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.

Tout d'abord, notez que Intel Core i7 n'est qu'une désignation commerciale et que la phrase Intel Core i7 (ou version ultérieure) est très vague. Alors qu'est-ce que cela pourrait signifier?

Les Kconfigmodifications du texte d'aide du noyau Linux mentionnant un Intel Core 7i , puis corrigées en Intel Core i7 , ont été effectuées en novembre 2008. Le journal de validation se lit comme suit:

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.

Il ne peut raisonnablement se référer qu'aux processeurs Intel Core i7 publiés ou annoncés par spécification à ce moment-là. Ce serait les processeurs Bloomfield , basés sur la microarchitecture Nehalem , qui ont déplacé le contrôleur de mémoire du Northbridge sur le CPU (ce que AMD avait fait en 2003 avec l'Opteron / AMD64) et a introduit QuickPath Interconnect / QPI (comme pendant de l'HyperTransport d'AMD) pour l'interconnexion CPU / CPU et CPU / IOH (hub IO, ex-Northbridge).

Les CPU Bloomdale i7 ont été les premières entrées du nouveau schéma de nommage Core i {3,5,7} . Donc, lorsque ce texte de documentation Linux a été écrit, i7 ne faisait pas spécifiquement référence au Core i7 par opposition à i5 (premier en 09/2009) ou i3 (premier en 01/2010), mais selon toute vraisemblance à la nouvelle microarchitecture Nehalem avec son contrôleur de mémoire intégré et QPI.

Il y a un communiqué de presse Intel du 11/2008 sur l'i7 ( Intel lance le processeur le plus rapide de la planète ) qui déclare que le processeur Core i7 fait plus que doubler la bande passante mémoire des précédentes plates - formes Intel "Extreme" , mais ne mentionne pas du tout NUMA .

La raison est, je pense, que NUMA n'a pas d'importance pour les PC de bureau, pas même pour les «extrêmes».

NUMA est important pour les serveurs coûteux qui ont plusieurs sockets CPU (pas seulement plusieurs cœurs sur un socket) avec des voies d'accès à la mémoire physique dédiées (pas seulement un contrôleur de mémoire), de sorte que chaque CPU dispose de sa mémoire locale dédiée, qui est "plus proche" de celle-ci que la mémoire des autres CPU. (Pensez à 8 sockets, 64 cœurs, 256 Go de RAM.) NUMA signifie qu'un processeur peut également accéder à la mémoire distante (la mémoire locale d'un autre processeur) en plus de sa propre mémoire locale, bien qu'à un coût plus élevé. NUMA est la synthèse d'une architecture de mémoire partagée comme SMP, où toute la mémoire est également disponible pour tous les cœurs, et d'une architecture de mémoire distribuée comme MPP (Massively Parallel Processing), qui donne à chaque nœud un bloc de mémoire dédié. Il s'agit de MPP, mais il ressemble à SMP pour l'application.

Les cartes mères de bureau n'ont pas de double socket et les processeurs de bureau Intel, y compris les éditions Extreme i7, n'ont pas le lien QPI supplémentaire pour la configuration à double socket.

Consultez l' article Wikipedia QPI pour voir en quoi QPI est pertinent pour NUMA:

Dans sa forme la plus simple sur une carte mère à processeur unique, un seul QPI est utilisé pour connecter le processeur au concentrateur IO (par exemple, pour connecter un Intel Core i7 à un X58). Dans des instances plus complexes de l'architecture, des paires de liaisons QPI distinctes connectent un ou plusieurs processeurs et un ou plusieurs concentrateurs d'E / S ou concentrateurs de routage dans un réseau sur la carte mère, permettant à tous les composants d'accéder à d'autres composants via le réseau. Comme avec HyperTransport, l'architecture QuickPath suppose que les processeurs auront des contrôleurs de mémoire intégrés et permet une architecture d'accès à la mémoire non uniforme (NUMA).

[…]

Bien que certains processeurs Core i7 haut de gamme exposent QPI, d'autres processeurs Nehalem de bureau et mobiles "grand public" destinés aux cartes à socket unique (par exemple LGA 1156 Core i3, Core i5 et autres processeurs Core i7 des familles Lynnfield / Clarksfield et successeurs) n'exposez pas QPI en externe, car ces processeurs ne sont pas destinés à participer à des systèmes multiprises. Cependant, QPI est utilisé en interne sur ces puces […]

La façon dont un processeur Intel Nehalem sur une carte serveur multi-socket rend l'accès à la mémoire non locale se fait via QPI. Également dans l' article sur NUMA :

Intel a annoncé la compatibilité NUMA pour ses serveurs x86 et Itanium fin 2007 avec ses processeurs Nehalem et Tukwila. Les deux familles de CPU partagent un chipset commun; l'interconnexion est appelée Intel Quick Path Interconnect (QPI). AMD a implémenté NUMA avec son processeur Opteron (2003), en utilisant HyperTransport.

Consultez ce rapport depuis le 11/2008 pour voir qu'Intel a désactivé l'une des deux liaisons QPI sur l'i7, désactivant ainsi la configuration à double socket, où NUMA s'applique:

Cette première implémentation de bureau haut de gamme de Nehalem porte le nom de code Bloomfield, et c'est essentiellement le même silicium qui devrait éventuellement être intégré aux serveurs à deux sockets. En conséquence, les puces Bloomfield sont livrées avec deux liens QPI à bord, comme l'indique le tir ci-dessus. Cependant, le deuxième lien QPI n'est pas utilisé. Dans les serveurs 2P basés sur cette architecture, cette seconde interconnexion reliera les deux sockets, et par-dessus, les CPU partageront les messages de cohérence du cache (en utilisant un nouveau protocole) et les données (puisque le sous-système de mémoire sera NUMA) - encore une fois, très similaire à l'Opteron.

Je me suis donc éloigné de votre question concernant mes résultats de recherche Google… Vous demandez pourquoi les docs Linux ont commencé à recommander de l'activer fin 2008? Je ne suis pas sûr que cette question ait une réponse prouvablement correcte… Il faudrait demander à l'auteur du doc. Activer NUMA ne profite pas aux utilisateurs de CPU de bureau, mais ne les blesse pas non plus, tout en aidant les utilisateurs multi-socket, alors pourquoi pas? Cela aurait pu être la justification. Trouvé qui se reflétait dans une discussion sur la désactivation de NUMA sur le tracker Arch Linux ( FS # 31187 - [linux] - désactiver NUMA à partir des fichiers de configuration ).

L'auteur du document aurait également pu penser au potentiel NUMA de l'architecture Nehalem dont, lors de la rédaction du document, les processeurs Core i7 11/2008 (920, 940, 965) étaient les seuls représentants; les premières puces Nehalem pour lesquelles NUMA aurait vraiment été logique sont probablement les processeurs Xeon Q1 / 2009 avec double liaison QPI tels que le Xeon E5520 .

Lumi
la source
2

Je pense que si vous utilisez le --showcommutateur, cela pourrait avoir plus de sens:

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

Vous pouvez donc contrôler l'utilisation de physcpubind comme ceci:

$ numactl --physcpubind=+0-2 myapp

Cela limiterait l'application myappaux 2 premiers cœurs de processeur. Mon système est un i5 à 4 cœurs.

Les références

slm
la source
2

J'ai recherché la même chose pour mon PC de bureau tout en construisant mon noyau par moi-même. J'ai décidé de désactiver NUMA après de nombreuses recherches. Mon processeur est un Core i7 3820 qui dispose de 8 processeurs avec HT. Cette page m'a aidé à prendre ma décision.

désactiver NUMA des fichiers de configuration

En résumé, NUMA ne vaut que si vous avez plus d'un socket CPU (indépendamment des cœurs). La puissance de traitement des machines à 1 CPU Socket est très faible, même avec plusieurs cœurs, mais elle est à peine perceptible, de sorte que la plupart des distributions la laissent activée car elle fournira un énorme avantage aux serveurs et aux machines avec plus de 1 socket.

Anthony S.
la source
1

Dans un PC avec au plus un processeur, NUMA est totalement inutile. N'hésitez pas à le désactiver dans votre propre noyau.

Vous pouvez toujours contrôler la liaison CPU par ensemble de tâches (1) .

b166er
la source