Comment comprendre l’architecture NUMA

📅
🕑 5 minutes de lecture

Parfois, parler de configurations multicœurs et multiprocesseurs donne l’impression de plonger dans le grand bain des serveurs, mais honnêtement, c’est pertinent même pour quelqu’un qui bidouille des stations de travail haut de gamme ou qui cherche à optimiser les performances d’une application à threads multiples. Dès que l’on commence à empiler des processeurs ou à passer à des cartes mères multisockets sophistiquées, les choses peuvent devenir étranges, notamment en ce qui concerne les performances de la mémoire. Vous remarquerez peut-être que votre système n’est pas aussi réactif qu’il le devrait, ou que les tâches prennent plus de temps que prévu, même avec des processeurs dotés d’un nombre important de cœurs. Il s’avère que l’un des coupables sournois est la latence mémoire et le NUMA (Non-Uniform Memory Access), ce qui signifie que « toutes les RAM n’ont pas la même rapidité », selon leur emplacement par rapport à vos processeurs.

Si vous utilisez une configuration multiprocesseur et que le système semble lent, il est judicieux d’examiner attentivement la gestion de la mémoire par le système d’exploitation. L’idée derrière NUMA est de permettre au système d’exploitation d’affecter les données au plus près du processeur qui en a besoin, afin que les cœurs n’aient pas à attendre des données stockées loin, ce qui peut nuire considérablement aux performances. Cependant, si le système n’est pas correctement configuré, ou si votre mémoire n’est pas optimisée, vous pourriez tout ralentir involontairement. C’est un peu étrange, mais sur certaines configurations, cela fait plus de différence qu’un cœur de processeur supplémentaire ; c’est pourquoi il est essentiel de comprendre et d’ajuster ce point.

Comment résoudre ou améliorer les problèmes de latence de la mémoire avec NUMA

Vérifiez les paramètres de votre BIOS — Vérifiez que NUMA est activé

Cela peut paraître évident, mais la première chose à faire est de consulter le BIOS ou le firmware UEFI de votre carte mère. Certaines cartes mères proposent des options permettant d’activer ou de désactiver NUMA ou l’entrelacement mémoire, mais celles-ci sont souvent désactivées par défaut ou réglées sur « automatique ».Redémarrez votre système et accédez au BIOS (généralement en appuyant sur Delou F2au démarrage).Recherchez les paramètres sous « Avancé » > « Configuration CPU » ou similaire. Recherchez les options NUMA, Entrelacement mémoire ou « Mode mémoire ».Assurez-vous que NUMA est activé ou réglé sur « Auto » si disponible. Enregistrez vos paramètres et redémarrez. Cette étape permet au système d’exploitation de reconnaître votre système multisocket et de gérer la mémoire en conséquence. Sur certaines cartes mères, si NUMA n’est pas explicitement activé, il peut traiter la mémoire comme un pool uniforme et plat, ce qui réduit les performances.

Exécutez les outils Windows ou Linux pour confirmer la topologie NUMA

Après le démarrage, il est conseillé de vérifier si le système d’exploitation reconnaît le système comme prévu. Sous Windows, utilisez le Gestionnaire des tâches > onglet Performances > Mémoire. Plusieurs nœuds NUMA devraient s’afficher, généralement un par socket de processeur. Pour plus de détails, exécutez Node.jsdes commandes PowerShell comme Get-VMHost | Select-Object NumNodessi vous utilisiez une configuration Hyper-V. Sous Linux, exécutez numactl --hardwarepour voir combien de nœuds NUMA votre système reconnaît, ce qui peut vous aider à diagnostiquer si le système d’exploitation reconnaît correctement les processeurs et leur mémoire locale. L’objectif est de vérifier que le système d’exploitation a une vision claire de la disposition de votre mémoire ; dans le cas contraire, des réglages ou des correctifs du BIOS pourraient être nécessaires.

Utiliser les paramètres ou les commandes du système d’exploitation pour optimiser la localisation de la mémoire

Sous Linux, vous pouvez influencer l’allocation de mémoire avec des outils comme numactl. Par exemple, lier explicitement des processus ou de la mémoire à des nœuds NUMA spécifiques peut atténuer la latence :

numactl --membind=0 myprogram

Cela force le processus et sa mémoire à rester sur le nœud NUMA 0 (par exemple, le socket 0).Sous Windows, définir l’affinité ou le placement correct des processus via le Gestionnaire des tâches ou des outils tiers peut s’avérer utile. Parfois, un simple redémarrage après des modifications du BIOS permet de résoudre les conflits et au système d’exploitation d’allouer correctement la mémoire.

Vérifiez la configuration de votre RAM et la disposition physique

Si vos modules de RAM ne sont pas répartis uniformément ou si vous ne savez pas exactement quels modules appartiennent à quel socket de processeur, les performances chutent. Pour les configurations multisockets, il est préférable d’installer la RAM par paires appariées par socket, conformément au manuel de votre carte mère. Une RAM mal appariée ou mal équilibrée peut entraîner le système à utiliser des modes d’entrelacement par défaut, non optimaux pour certaines charges de travail.

Sachez également que les charges de travail lourdes, comme le calcul haute performance ou le rendu spécialisé, sont plus sensibles à la latence NUMA et à la mémoire. Pour une utilisation occasionnelle ou par des joueurs, cela ne fera probablement pas beaucoup de différence, mais pour les utilisateurs expérimentés, affiner ces paramètres peut parfois débloquer des performances ou une stabilité accrues.

Résumé

  • Vérifiez le BIOS/UEFI pour vous assurer que NUMA ou l’entrelacement de mémoire est activé.
  • Vérifiez que le système d’exploitation reconnaît plusieurs nœuds NUMA avec les outils d’informations système.
  • Utilisez des commandes ou des paramètres compatibles NUMA pour améliorer le processus et le placement de la mémoire.
  • Équilibrez les modules RAM sur les sockets en fonction des instructions de la carte mère.
  • Soyez conscient que les configurations NUMA non optimisées peuvent provoquer des ralentissements inattendus, même avec des processeurs monstrueux.

Conclure

Gérer les problèmes de NUMA et de latence mémoire n’est pas une mince affaire, mais quelques recherches et une configuration appropriée peuvent faire une différence notable, surtout sur les serveurs ou stations de travail à nombre de cœurs élevé. L’essentiel est de s’assurer que le micrologiciel de votre système et le système d’exploitation sont sur la même longueur d’onde quant à la gestion de la mémoire. Sur certaines configurations, il suffit d’activer un commutateur du BIOS ou d’exécuter une commande rapide, mais dans d’autres cas, il s’agit d’équilibrer la RAM et de mieux comprendre la charge de travail. Si tout est aligné, les charges de travail qui peinaient auparavant pourraient soudainement sembler beaucoup plus réactives. Espérons que cela puisse aider quelqu’un à débloquer un goulot d’étranglement des performances dont il ignorait l’existence.