Qu'est-ce que l'accès mémoire non uniforme (NUMA) ?
L'accès mémoire non uniforme (NUMA) est une conception de mémoire informatique utilisée dans les systèmes multiprocesseurs, où le temps d'accès à la mémoire varie en fonction de l'emplacement de la mémoire par rapport au processeur. Dans une architecture NUMA, chaque processeur dispose de sa propre mémoire locale. Bien qu'il puisse également accéder à la mémoire connectée à d'autres processeurs, cet accès est plus lent en raison de la nécessité de traverser des interconnexions et éventuellement d'autres processeurs, ce qui introduit une latence supplémentaire et un conflit de bande passante.
NUMA a été développé pour pallier les limites de scalabilité des systèmes SMP (Symmetric Multiprocessing) traditionnels, dans lesquels tous les processeurs partagent un seul pool de mémoire. En regroupant la mémoire à proximité de chaque processeur, NUMA améliore l'efficacité de l'accès à la mémoire et les performances globales, en particulier dans les systèmes comportant un grand nombre d'unités centrales (CPU) ou de cœurs.
Les systèmes d'exploitation et les applications modernes optimisés pour NUMA peuvent allouer la mémoire de manière à conserver les données au niveau du processeur effectuant le calcul, ce qui minimise la latence et augmente le débit. NUMA est couramment utilisé dans les serveurs, les systèmes de calcul haute performance (HPC) et les charges de travail d'entreprise qui nécessitent des ressources mémoire et de calcul importantes.
Comment fonctionne NUMA ?
Dans un système NUMA, l'architecture est divisée en plusieurs nœuds. Chaque nœud contient un ou plusieurs processeurs (ou sockets CPU) ainsi que sa propre mémoire dédiée. Ces nœuds sont interconnectés, ce qui permet aux processeurs d'accéder à la fois à la mémoire locale et à la mémoire distante.
L'accès à la mémoire locale (mémoire physiquement connectée au même nœud) est plus rapide et présente une latence plus faible. Lorsqu'un processeur accède à une mémoire distante (mémoire située sur un autre nœud), cela entraîne une latence supplémentaire due au chemin d'interconnexion entre les nœuds. Cette différence de latence est ce qui définit l'aspect « non uniforme » de NUMA.
Les systèmes NUMA modernes s'appuient sur le micrologiciel du système, le système d'exploitation et les applications pour être compatibles NUMA. Les logiciels compatibles NUMA tentent d'allouer la mémoire et de planifier les processus de manière à ce que les tâches et leur mémoire restent proches les unes des autres sur le même nœud. Cela réduit le trafic mémoire entre les nœuds et optimise les performances.
NUMA est généralement implémenté dans les systèmes dotés d'au moins deux sockets CPU, tels que les serveurs et les plates-formes informatiques hautes performances. Chaque socket dispose de son propre contrôleur mémoire et de sa propre mémoire vive dynamique (DRAM) locale. L'interconnexion système, telle que Intel® Ultra Interconnect (UPI) ou AMD Fabric, relie les sockets et permet d'accéder à la mémoire distante lorsque cela est nécessaire.
Conception NUMA et architecture système
Les systèmes multi-sockets étant de plus en plus courants dans les centres de données modernisés et les infrastructures d'entreprise, il est essentiel de comprendre l'influence de la technologie NUMA sur l'architecture des systèmes. Les fournisseurs de matériel conçoivent les cartes mères des serveurs et les interconnexions des processeurs en tenant compte des topologies NUMA, afin de garantir des chemins de données optimaux entre les processeurs et les banques de mémoire. Cela a un impact direct sur les performances des applications, en particulier pour les charges de travail qui s'étendent horizontalement sur plusieurs cœurs et sockets.
Les considérations relatives à la conception incluent également les règles de remplissage de la mémoire, les paramètres de configuration NUMA au niveau du BIOS et la disposition physique des composants. Les architectes système doivent tenir compte de la manière dont les applications interagissent avec la mémoire et les ressources informatiques afin de garantir une utilisation optimale des capacités matérielles. Des configurations matérielles mal optimisées peuvent entraîner un comportement NUMA sous-optimal, notamment un accès excessif à la mémoire distante et une latence accrue.
Optimisation logicielle pour les systèmes NUMA
Pour que NUMA puisse exploiter tout son potentiel de performances, les logiciels doivent être conçus, ou au moins configurés, de manière à prendre en compte la topologie mémoire sous-jacente. Les systèmes d'exploitation tels que Linux et Windows Server incluent une prise en charge NUMA au niveau du noyau, ce qui permet d'utiliser des fonctionnalités telles que l'affinité processeur, la liaison mémoire et la planification compatible NUMA. Ces mécanismes permettent de garantir que les threads sont planifiés sur des processeurs offrant un accès rapide aux régions mémoire qu'ils utilisent le plus fréquemment.
Les développeurs d'applications et les administrateurs système peuvent encore améliorer les performances en tirant parti des API spécifiques à NUMA et des pratiques de réglage. Les frameworks de programmation parallèle, tels que OpenMP et MPI, offrent des options permettant de contrôler le placement des threads et la localité de la mémoire. Pour les charges de travail d'entreprise et HPC, ce niveau d'optimisation peut réduire considérablement la latence de la mémoire et augmenter le débit, en particulier lors de l'exécution sur des systèmes multi-sockets avec une empreinte mémoire importante.
Cas d'utilisation et avantages de NUMA
NUMA offre des avantages en termes de performances pour les charges de travail qui exigent un parallélisme élevé et une grande empreinte mémoire. En réduisant l'accès à la mémoire entre les nœuds et en utilisant mieux la bande passante disponible, NUMA améliore l'évolutivité et contribue à éliminer les goulots d'étranglement dans les architectures multi-sockets.
Calcul à haute performance (HPC)
Dans le domaine du calcul haute performance, les simulations scientifiques, la modélisation et les charges de travail liées à l'analyse de données à grande échelle tirent parti de la technologie NUMA en réduisant la latence d'accès à la mémoire sur plusieurs sockets CPU.
Plateformes de virtualisation
Les hyperviseurs et les machines virtuelles peuvent être optimisés pour utiliser une planification compatible NUMA, garantissant ainsi que les processeurs virtuels et leur mémoire restent sur le même nœud physique.
Bases de données en mémoire
NUMA permet de maintenir un accès mémoire à faible latence dans les systèmes de bases de données qui stockent de grands volumes de données directement dans la mémoire RAM.
Applications d'entreprise à grande échelle
NUMA améliore la réactivité et le débit des logiciels d'entreprise, tels que les systèmes de planification des ressources d'entreprise (ERP), qui nécessitent l'accès à de grands espaces mémoire sur plusieurs cœurs.
FAQ
- Qu'est-ce que le clustering NUMA ?
Le clustering NUMA désigne l'organisation des processeurs et de la mémoire en nœuds ou clusters au sein d'un système compatible NUMA. Chaque cluster dispose de sa propre mémoire locale, et les processeurs d'un cluster peuvent accéder à cette mémoire avec une latence réduite. Cette configuration améliore les performances et l'évolutivité en réduisant les conflits d'accès aux ressources mémoire partagées. - Qu'est-ce que la topologie NUMA ?
La topologie NUMA décrit la manière dont les processeurs, la mémoire et les interconnexions sont physiquement et logiquement organisés dans un système. Elle définit quels processeurs sont connectés à quelles régions de mémoire et comment l'accès s'effectue entre les nœuds. Comprendre la topologie du système permet d'optimiser l'allocation de mémoire et les performances des applications. - Le NUMA est-il important pour la virtualisation ?
Oui, le NUMA joue un rôle essentiel dans la virtualisation en contribuant à garantir un placement optimal de la mémoire et du processeur pour les machines virtuelles. Lorsqu'un hyperviseur prend en charge le NUMA, il peut conserver les processeurs virtuels et la mémoire qui leur est associée au sein du même nœud physique, ce qui réduit la latence et évite les pertes de performances. - Comment activer NUMA sur un système ?
La prise en charge NUMA est généralement activée par défaut sur les plates-formes serveur modernes. Dans certains cas, il peut être nécessaire de l'activer dans les paramètres BIOS ou UEFI du système. Une fois activée, le système expose la topologie NUMA au système d'exploitation pour optimiser la planification et l'allocation de mémoire. - Que se passe-t-il si un logiciel n'est pas compatible NUMA ?
Si un logiciel n'est pas compatible NUMA, il peut accéder à la mémoire de manière inefficace entre les nœuds, ce qui entraîne une latence plus élevée et des performances réduites. Cela peut devenir un goulot d'étranglement dans les systèmes multi-sockets avec de grands pools de mémoire, en particulier sous des charges de travail élevées.