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]):
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
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).