Comprendre l'architecture numa

Comprendre l'architecture numa
La conception d'ordinateurs est toujours un compromis. Les quatre composants de base d'un ordinateur - l'unité de traitement centrale (CPU) ou le processeur, la mémoire, le stockage et la carte pour connecter les composants (système de bus d'E / S) sont combinés aussi intelligemment que possible pour créer une machine qui est à la fois rentable et puissant. Le processus de conception implique principalement une optimisation vers les processeurs (co-processeurs, configuration multi-core), le type de mémoire et le montant, le stockage (disques, système de fichiers), ainsi que le prix.L'idée derrière les co-processeurs et l'architecture multicœur est de distribuer des opérations à autant d'unités informatiques uniques dans le plus petit espace possible et de rendre l'exécution parallèle des instructions informatiques plus disponibles et abordables. En termes de mémoire, c'est une question de la quantité ou de la taille qui peut être traitée par l'unité informatique individuelle et quel type de mémoire fonctionne avec la latence la plus faible possible. Le stockage appartient à la mémoire externe et ses performances dépend du type de disque, du système de fichiers utilisé, du threading, du protocole de transfert, du tissu de communication et du nombre de dispositifs de mémoire connectés.

La conception des bus d'E / S représente les artères informatiques et détermine considérablement la quantité et la rapidité. La catégorie supérieure est dirigée par des composants utilisés dans le domaine de l'informatique haute performance (HPC). À la mi-2020, parmi les représentants contemporains de HPC se trouvent Nvidia Tesla et DGX, Radeon Instinct et Intel Xeon Phi GPU accélérateurs (voir [1,2] pour les 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 multiprocesseurs contemporains. NUMA est un système informatique composé de plusieurs nœuds uniques de manière à ce que la mémoire agrégée soit partagée entre tous les nœuds: «chaque CPU se voit attribuer sa propre mémoire locale et peut accéder à la mémoire à partir d'autres CPU dans le système» [12,7].

NUMA est un système intelligent utilisé pour connecter plusieurs unités de traitement central (CPU) à toute 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'un CPU peut 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 à partir d'un autre nœud NUMA. Le terme NUMA Ratio décrit le ratio du coût d'accès à la mémoire étrangère au coût de l'accès à la mémoire locale. Plus le ratio est élevé, plus le coût est élevé, et donc plus il faut longtemps 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 à tout autre processeur a une latence plus élevée et des performances de bande passante plus faibles.

En regardant en arrière: évolution des multiprocesseurs partagés

Frank Dennemann [8] déclare que les architectures de système modernes ne permettent pas l'accès à la mémoire (UMA) vraiment uniforme, même si ces systèmes sont spécialement conçus à cette fin. Simplement, l'idée de l'informatique 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 autrement classique.

Comme expliqué par Frank Dennemann [8], au début des années 1970, «la nécessité de systèmes qui pourraient desservir plusieurs opérations utilisateur simultanées et une génération excessive de données sont devenues courant» avec l'introduction de systèmes de données relationnels. «Malgré le taux impressionnant de performance uniprocesseur, les systèmes multiprocesseurs étaient mieux équipés pour gérer cette charge de travail. Pour fournir un système rentable, l'espace d'adresse mémoire partagée est devenu au centre de la recherche. Au début, les systèmes utilisant un interrupteur de barre transversale ont été préconisés, mais avec cette complexité de conception mise à l'échelle avec l'augmentation des processeurs, ce qui a rendu le système en bus plus attractif. Les processeurs d'un système de bus [peuvent] accéder à l'ensemble de l'espace mémoire en envoyant des demandes dans le bus, un moyen très rentable d'utiliser la mémoire disponible aussi de manière optimale que possible."

Cependant, les systèmes informatiques en bus sont livrés avec 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 la bande passante par nœud est disponible. De plus, plus les processeurs sont ajoutés, plus le bus est long et plus la latence est élevée.

La plupart des processeurs ont été construits dans un plan bidimensionnel. Les processeurs devaient également avoir ajouté des contrôleurs de mémoire intégrés. La solution simple pour avoir quatre bus mémoire (haut, bas, à gauche, à droite) à chaque noyau de processeur a permis une bande passante complète disponible, mais cela ne va que jusqu'à présent. Les processeurs ont stagné avec quatre cœurs pendant un temps considérable. L'ajout de traces au-dessus et en dessous a permis des bus directs vers les processeurs opposés en diagonale à mesure que les puces sont devenues 3D. Placer un processeur à quatre pas sur une carte, qui a ensuite été connecté à 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 possède des coûts d'accès à la mémoire variable sur différentes parties de la mémoire au sein d'un serveur.

L'amélioration de l'efficacité de l'accès aux données est l'un des principaux objectifs de la conception contemporaine du processeur. Chaque noyau de processeur était doté d'un cache de petit niveau un (32 kb) et d'un cache de niveau 2 plus grand (256 kb). Les différents noyaux partageraient plus tard un cache de niveau 3 de plusieurs Mo, dont la taille a considérablement augmenté au fil du temps.

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

Prise en charge du logiciel pour NUMA

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

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

  • Silicon Graphics IRIX Prise en charge de l'architecture CCNUMA sur 1240 CPU avec séries d'origine serveur.
  • Microsoft Windows 7 et Windows Server 2008 R2 Ajout de la prise en charge de l'architecture NUMA sur 64 cœurs logiques.
  • Version 2.5 du noyau Linux contenait déjà le support de base de Numa, qui a été encore amélioré dans les versions ultérieures du noyau. Version 3.8 du noyau Linux a apporté une nouvelle fondation NUMA qui a permis le développement de politiques NUMA plus efficaces dans les versions ultérieures du noyau [13]. Version 3.13 du noyau Linux a apporté de nombreuses politiques qui visent à mettre un processus à proximité de sa mémoire, ainsi que la gestion des cas, tels que les pages de mémoire partagées entre les processus ou l'utilisation de pages énormes transparentes; Les nouveaux paramètres de contrôle système permettent à l'équilibrage de NUMA d'être activé ou désactivé, ainsi que la configuration de divers paramètres d'équilibrage de la mémoire NUMA [15].
  • Architecture du modèle Oracle et OpenSolaris avec l'introduction de groupes logiques.
  • FreeBSD a ajouté une affinité et une configuration de stratégie NUMA initiales dans la version 11.0.

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 le partitionnement de Radix Numa-Aware proposé (NARP), qui optimise Les performances des caches partagées dans les nœuds NUMA pour accélérer les applications de Business Intelligence. En tant que tel, NUMA représente un terrain d'entente entre les systèmes de mémoire partagée (SMP) avec quelques processeurs [6].

Numa et linux

Comme indiqué ci-dessus, le noyau Linux a pris 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]. Avec l'aide de la commande numactl, vous pouvez répertorier l'inventaire des nœuds NUMA disponibles dans votre système [18]:

# numactl - hardware
Disponible: 2 nœuds (0-1)
Node 0 CPU: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
Node 0 Taille: 8157 Mb
Node 0 gratuit: 88 Mo
Node 1 CPU: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
Node 1 taille: 8191 Mb
Node 1 gratuit: 5176 Mb
Distances de nœud:
nœud 0 1
0: 10 20
1: 20 10

NUMATOP est un outil utile développé par Intel pour surveiller la localité de la mémoire d'exécution et l'analyse des processus dans les systèmes NUMA [10,11]. L'outil peut identifier les goulots d'étranglement potentiels liés à la NUMA et donc aider à rééquilibrer la mémoire / les allocations du processeur pour maximiser le potentiel d'un système NUMA. Voir [9] pour une description plus détaillée.

Scénarios d'utilisation

Les ordinateurs qui prennent en charge la technologie NUMA permettent à tous les processeurs d'accéder directement à la mémoire entière - les CPU voient cela comme un seul espace d'adressage linéaire. Cela conduit à une utilisation plus efficace du schéma d'adressage 64 bits, entraînant 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'assistance à la décision. De plus, la rédaction d'applications pour les jeux et les logiciels haute performance 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 inférieure pour accéder à la mémoire sur ce même nœud (e.g., Le CPU local demande l'accès à la mémoire en même temps que l'accès à distance; La priorité est sur le processeur local). Cela améliorera considérablement le débit de la mémoire si les données sont localisées sur des processus spécifiques (et donc des processeurs). Les inconvénients sont les coûts plus élevés du déplacement des 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-intertinct
  2. Comparez nvidia dgx-1 vs. Radeon Instinct, https: // www.itcentralstation.com / produits / comparaisons / nvidia-dgx-1_vs_radeon-intertinct
  3. Cache cohérence, wikipedia, https: // en.Wikipédia.org / wiki / cache_coherence
  4. Especteur de bus, wikipedia, https: // en.Wikipédia.org / wiki / bus_snooping
  5. Protocoles de cohérence de cache dans les systèmes multiprocesseurs, geeks pour geeks, https: // www.geeksforgeeks.org / cache-cohérence-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: Comprendre l'architecture Numa dans Comprendre le noyau Linux, 3e édition, O'Reilly, https: // www.oreilly.com / bibliothèque / vue / compréhension-the-linux / 0596005652 /
  8. Frank Dennemann: Numa Deep Dive Part 1: De Uma à Numa, https: // Frankdenneman.NL / 2016/07/07 / numa-def-dive-parti-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-montoring-tool.html
  10. Numatop, https: // github.com / Intel / numatop
  11. Package Numatop pour Debian GNU / Linux, https: // packages.Debian.org / buster / numatop
  12. Jonathan Kehayias: Comprendre l'accès / architectures non uniforme de la mémoire (NUMA), https: // www.skskills.com / blogs / jonathan / compréhension-non-uniforme-mémoire-accessarchitectures-numa /
  13. NOUVELLES LINUX NEWNEL pour le noyau 3.8, https: // kernelnewbies.org / linux_3.8
  14. Accès à la mémoire non uniforme (NUMA), Wikipedia, https: // en.Wikipédia.org / wiki / non uniforme_memory_access
  15. Documentation de la gestion de la mémoire Linux, numa, https: // www.noyau.org / doc / html / v4.18 / VM / NUMA.html
  16. Package numactl pour Debian GNU / Linux, https: // packages.Debian.org / sid / admin / numactl
  17. Package Numad pour Debian GNU / Linux, https: // packages.Debian.org / buster / numad
  18. Comment trouver si la configuration NUMA est activée ou désactivée?, https: // www.Thegeekdiary.com / Centos-rhel-how-to-find-if-numa-configuration-est-sens-or-hisabled /
  19. Affinité du processeur, wikipedia, https: // en.Wikipédia.org / wiki / processor_affinity

Merci

Les auteurs tiennent à remercier Gerold Rupprecht pour son soutien tout en préparant cet article.

à propos des auteurs

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

Prince K. Nehanda est un ingénieur d'instrumentation et de contrôle (métrologie) à 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 de magazines comme Linux-User et Linux Magazine. Il est également co-auteur du livre de gestion des packages Debian (http: // www.dpmb.org).