NUMA

Comprendre l'architecture NUMA

Comprendre l'architecture NUMA
Concevoir des ordinateurs est toujours un compromis. Les quatre composants de base d'un ordinateur - l'unité centrale (CPU) ou processeur, la mémoire, le stockage et la carte de connexion des composants (système de bus I/O) - sont combinés le plus intelligemment possible pour créer une machine qui est à la fois rentable et puissant. Le processus de conception implique principalement une optimisation des processeurs (coprocesseurs, configuration multicœur), du type et de la quantité de mémoire, du stockage (disques, système de fichiers), ainsi que du prix.L'idée derrière les coprocesseurs et l'architecture multicœur est de répartir les opérations sur autant d'unités de calcul uniques dans le plus petit espace possible et de rendre l'exécution parallèle d'instructions de calcul plus disponible et abordable. En termes de mémoire, il s'agit de la quantité ou de la taille qui peut être traitée par l'unité de calcul individuelle et du type de mémoire qui fonctionne avec la latence la plus faible possible. Le stockage appartient à la mémoire externe et ses performances dépendent du type de disque, du système de fichiers utilisé, du threading, du protocole de transfert, de la structure de communication et du nombre de périphériques de mémoire connectés.

La conception des bus d'E/S représente les artères informatiques et détermine de manière significative combien et à quelle vitesse les données peuvent être échangées entre les composants individuels énumérés ci-dessus. La première catégorie est dominée par les composants utilisés dans le domaine du calcul haute performance (HPC). À la mi-2020, parmi les représentants contemporains du HPC figurent Nvidia Tesla et DGX, Radeon Instinct et les produits d'accélérateur basés sur GPU Intel Xeon Phi (voir [1,2] pour des comparaisons de produits).

Comprendre NUMA

L'accès à la mémoire non uniforme (NUMA) décrit une architecture de mémoire partagée utilisée dans les systèmes de multitraitement contemporains. NUMA est un système informatique composé de plusieurs nœuds uniques de telle sorte que la mémoire agrégée est partagée entre tous les nœuds : « chaque CPU se voit attribuer sa propre mémoire locale et peut accéder à la mémoire des autres CPU du système » [12,7].

NUMA est un système intelligent utilisé pour connecter plusieurs unités centrales de traitement (CPU) à n'importe quelle quantité de mémoire informatique disponible sur l'ordinateur. Les nœuds NUMA uniques sont connectés sur un réseau évolutif (bus d'E/S) de sorte qu'une CPU puisse systématiquement accéder à la mémoire associée à d'autres nœuds NUMA.

La mémoire locale est la mémoire que le CPU utilise dans un nœud NUMA particulier. La mémoire étrangère ou distante est la mémoire qu'un CPU prend d'un autre nœud NUMA. Le terme ratio NUMA décrit le rapport entre le coût d'accès à la mémoire étrangère et le coût d'accès à la mémoire locale. Plus le ratio est élevé, plus le coût est élevé, et donc plus il faut de temps pour accéder à la mémoire.

Cependant, cela prend plus de temps que lorsque ce processeur accède à sa propre mémoire locale. L'accès à la mémoire locale est un avantage majeur, car il combine une faible latence avec une bande passante élevée. En revanche, l'accès à la mémoire appartenant à n'importe quel autre processeur a une latence plus élevée et des performances de bande passante inférieures.

Rétrospective : évolution des multiprocesseurs à mémoire partagée

Frank Dennemann [8] affirme que les architectures système modernes ne permettent pas vraiment d'accès à la mémoire uniforme (UMA), même si ces systèmes sont spécifiquement conçus à cette fin. En termes simples, l'idée du calcul parallèle était d'avoir un groupe de processeurs qui coopèrent pour calculer une tâche donnée, accélérant ainsi un calcul séquentiel par ailleurs classique.

Comme expliqué par Frank Dennemann [8], au début des années 1970, « le besoin de systèmes pouvant desservir plusieurs opérations d'utilisateurs simultanés et une génération excessive de données est devenu courant » avec l'introduction des systèmes de bases de données relationnelles. « Malgré le taux impressionnant de performances des monoprocesseurs, les systèmes multiprocesseurs étaient mieux équipés pour gérer cette charge de travail. Pour fournir un système rentable, l'espace d'adressage de mémoire partagée est devenu le centre de recherche. Dès le début, les systèmes utilisant un commutateur crossbar ont été préconisés, mais avec cette complexité de conception augmentée avec l'augmentation des processeurs, ce qui a rendu le système basé sur le bus plus attrayant. Les processeurs d'un système de bus [peuvent] accéder à l'intégralité de l'espace mémoire en envoyant des requêtes sur le bus, un moyen très économique d'utiliser la mémoire disponible de la manière la plus optimale possible."

Cependant, les systèmes informatiques basés sur des bus présentent un goulot d'étranglement - la quantité limitée de bande passante qui entraîne des problèmes d'évolutivité. Plus il y a de processeurs ajoutés au système, moins de bande passante par nœud disponible. De plus, plus on ajoute de processeurs, plus le bus est long et plus la latence est élevée en conséquence.

La plupart des processeurs ont été construits dans un plan à deux dimensions. Les processeurs devaient également avoir des contrôleurs de mémoire intégrés ajoutés. La solution simple d'avoir quatre bus mémoire (en haut, en bas, à gauche, à droite) pour chaque cœur de processeur permettait une bande passante disponible complète, mais cela ne va pas plus loin. Les processeurs ont stagné avec quatre cœurs pendant un temps considérable. L'ajout de traces au-dessus et en dessous a permis aux bus directs de traverser les processeurs diagonalement opposés lorsque les puces sont devenues 3D. Placer un processeur à quatre cœurs sur une carte, qui est ensuite connectée à un bus, était la prochaine étape logique.

Aujourd'hui, chaque processeur contient de nombreux cœurs avec un cache sur puce partagé et une mémoire hors puce et a des coûts d'accès à la mémoire variables dans différentes parties de la mémoire au sein d'un serveur.

Améliorer l'efficacité de l'accès aux données est l'un des principaux objectifs de la conception contemporaine des processeurs. Chaque cœur de processeur était doté d'un petit cache de niveau 1 (32 Ko) et d'un cache de niveau 2 plus grand (256 Ko). Les différents cœurs partageraient par la suite un cache de niveau 3 de plusieurs Mo, dont la taille a considérablement augmenté au fil du temps.

Pour éviter les échecs de cache - demander des données qui ne sont pas dans le cache - beaucoup de temps de recherche est consacré à trouver le bon nombre de caches CPU, de structures de mise en cache et d'algorithmes correspondants. Voir [8] pour une explication plus détaillée du protocole de mise en cache de snoop [4] et de cohérence de cache [3,5], ainsi que les idées de conception derrière NUMA.

Support logiciel pour NUMA

Il existe deux mesures d'optimisation logicielle qui peuvent améliorer les performances d'un système prenant en charge l'architecture NUMA : l'affinité du processeur et le placement des données. Comme expliqué dans [19], « l'affinité du processeur […] permet la liaison et la dissociation d'un processus ou d'un thread à un seul processeur, ou à une plage de processeurs afin que le processus ou le thread s'exécute uniquement sur le ou les processeurs désignés plutôt que n'importe quel processeur.” Le terme « placement de données » fait référence à des modifications logicielles dans lesquelles le code et les données sont conservés aussi près que possible en mémoire.

Les différents systèmes d'exploitation UNIX et liés à UNIX prennent en charge NUMA des manières suivantes (la liste ci-dessous est tirée de [14]) :

Dans le livre "Computer Science and Technology, Proceedings of the International Conference (CST2016)", Ning Cai suggère que l'étude de l'architecture NUMA était principalement axée sur l'environnement informatique haut de gamme et proposait le partitionnement Radix (NaRP) compatible NUMA, qui optimise les performances des caches partagés dans les nœuds NUMA pour accélérer les applications de business intelligence. En tant que tel, NUMA représente un juste milieu entre les systèmes de mémoire partagée (SMP) avec quelques processeurs [6].

NUMA et Linux

Comme indiqué ci-dessus, le noyau Linux prend en charge NUMA depuis la version 2.5. Debian GNU/Linux et Ubuntu offrent tous deux la prise en charge de NUMA pour l'optimisation des processus avec les deux packages logiciels numactl [16] et numad [17]. À l'aide de la commande numactl, vous pouvez lister l'inventaire des nœuds NUMA disponibles dans votre système [18] :

# numactl --hardware
disponible : 2 nœuds (0-1)
nœud 0 CPU : 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
taille du nœud 0 : 8157 Mo
nœud 0 libre : 88 Mo
processeur du nœud 1 : 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
taille du nœud 1 : 8191 Mo
nœud 1 libre : 5176 Mo
distances aux nœuds :
nœud 0 1
0 : 10 20
1: 20 10

NumaTop est un outil utile développé par Intel pour surveiller la localisation de la mémoire d'exécution et analyser les processus dans les systèmes NUMA [10,11]. L'outil peut identifier les goulots d'étranglement potentiels liés aux performances de NUMA et ainsi aider à rééquilibrer les allocations mémoire/CPU pour maximiser le potentiel d'un système NUMA. Voir [9] pour une description plus détaillée.

Scénarios d'utilisation

Les ordinateurs prenant en charge la technologie NUMA permettent à tous les processeurs d'accéder directement à l'ensemble de la mémoire - les processeurs voient cela comme un espace d'adressage linéaire unique. Cela conduit à une utilisation plus efficace du schéma d'adressage 64 bits, ce qui entraîne un mouvement plus rapide des données, moins de réplication des données et une programmation plus facile.

Les systèmes NUMA sont assez attrayants pour les applications côté serveur, telles que l'exploration de données et les systèmes d'aide à la décision. De plus, l'écriture d'applications pour les jeux et les logiciels hautes performances devient beaucoup plus facile avec cette architecture.

Conclusion

En conclusion, l'architecture NUMA aborde l'évolutivité, qui est l'un de ses principaux avantages. Dans un processeur NUMA, un nœud aura une bande passante plus élevée ou une latence plus faible pour accéder à la mémoire sur ce même nœud (e.g., la CPU locale demande un accès mémoire en même temps que l'accès distant ; la priorité est sur le CPU local). Cela améliorera considérablement le débit de la mémoire si les données sont localisées dans des processus spécifiques (et donc des processeurs). Les inconvénients sont les coûts plus élevés de transfert de données d'un processeur à un autre. Tant que ce cas ne se produit pas trop souvent, un système NUMA surpassera les systèmes avec une architecture plus traditionnelle.

Liens et références

  1. Comparez NVIDIA Tesla vs. Radeon Instinct, https://www.itcentralstation.com/produits/comparaisons/nvidia-tesla_vs_radeon-instinct
  2. Comparez NVIDIA DGX-1 et. Radeon Instinct, https://www.itcentralstation.com/produits/comparaisons/nvidia-dgx-1_vs_radeon-instinct
  3. Cohérence du cache, Wikipédia, https://fr.Wikipédia.org/wiki/Cache_coherence
  4. espionnage de bus, Wikipédia, https://fr.Wikipédia.org/wiki/Bus_snooping
  5. Protocoles de cohérence de cache dans les systèmes multiprocesseurs, Geeks for geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system/
  6. Informatique et technologie - Actes de la Conférence internationale (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN : 9789813146419
  7. Daniel P. Bovet et Marco Cesati : Understanding NUMA architecture in Understanding the Linux Kernel, 3rd edition, O'Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Frank Dennemann : NUMA Deep Dive Partie 1 : De l'UMA à la NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Colin Ian King : NumaTop : un outil de surveillance du système NUMA, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Numatop, https://github.com/intel/numatop
  11. Paquet numatop pour Debian GNU/Linux, https://paquets.debian.org/buster/numatop
  12. Jonathan Kehayias : Comprendre les architectures/accès à la mémoire non uniformes (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Nouvelles du noyau Linux pour le noyau 3.8, https://kernelnewbies.org/Linux_3.8
  14. Accès mémoire non uniforme (NUMA), Wikipédia, https://en.Wikipédia.org/wiki/Non-uniform_memory_access
  15. Documentation de gestion de la mémoire Linux, NUMA, https://www.noyau.org/doc/html/latest/vm/numa.html
  16. Paquet numactl pour Debian GNU/Linux, https://paquets.debian.org/sid/admin/numactl
  17. Paquet numad pour Debian GNU/Linux, https://paquets.debian.org/buster/numad
  18. Comment savoir si la configuration NUMA est activée ou désactivée?, https://www.le journal intime.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Affinité de processeur, Wikipédia, https://fr.Wikipédia.org/wiki/Processor_affinity

Merci

Les auteurs tiennent à remercier Gerold Rupprecht pour son soutien lors de la préparation de cet article.

à propos des auteurs

Plaxedes Nehanda est une personne polyvalente, autonome et polyvalente qui porte de nombreux chapeaux, parmi lesquels un organisateur d'événements, un assistant virtuel, un transcripteur, ainsi qu'un chercheur passionné, basé à Johannesburg, en Afrique du Sud.

Prince K. Nehanda est ingénieur en instrumentation et contrôle (métrologie) chez Paeflow Metering à Harare, Zimbabwe.

Frank Hofmann travaille sur la route - de préférence depuis Berlin (Allemagne), Genève (Suisse) et Cape Town (Afrique du Sud) - en tant que développeur, formateur et auteur pour des magazines comme Linux-User et Linux Magazine. Il est également co-auteur du livre sur la gestion des paquets Debian (http://www.dpmb.org).

Le bouton de clic gauche de la souris ne fonctionne pas sous Windows 10
Si vous utilisez une souris dédiée avec votre ordinateur portable ou de bureau mais que le le clic gauche de la souris ne fonctionne pas sur Windows 1...
Le curseur saute ou se déplace de manière aléatoire lors de la saisie dans Windows 10
Si vous constatez que le curseur de votre souris saute ou se déplace tout seul, automatiquement, au hasard lors de la saisie sur un ordinateur portabl...
Comment inverser le sens de défilement de la souris et des pavés tactiles dans Windows 10
Souris et Pavé tactiles rendent non seulement l'informatique facile, mais plus efficace et moins chronophage. Nous ne pouvons pas imaginer une vie san...