NOM
numa - Panorama des architectures à mémoire non uniforme
NUMA (« Non-Uniform Memory Access » : accès à la mémoire de façon non
uniforme) se réfère aux systèmes multiprocesseurs dont la mémoire est
divisé en plusieurs noeuds mémoire. Le temps d’accès à un noeud mémoire
dépend de la localisation relative du CPU utilisateur et du noeud
utilisé (à l’opposé des systèmes multiprocesseurs symétriques pour
lesquels le temps d’accès à la mémoire est le même quel que soit le
CPU). Normalement, chaque CPU sur un système NUMA a un noeud mémoire
local pour lequel il peut accéder plus rapidement au contenu, par
rapport aux mémoires des noeuds locaux aux autres CPU où à la mémoire
sur un bus partagé par tous les CPU.
Appels système NUMA
Le noyau Linux implémente les appels système suivants liés aux NUM :
get_mempolicy(2), mbind(2), migrate_pages(2), move_pages(2) et
set_mempolicy(2). Cependant les applications devraient normalement
utiliser l’interface fournie par libnuma ; consultez « Prise en charge
par la bibliothèque » ci-dessous.
/proc/[number]/numa_maps (depuis Linux 2.6.14)
Ce fichier affiche des information concernant l’allocation et la
politique mémoire NUMA d’un processus.
Chaque ligne contient des information concernant un intervalle mémoire
utilisé par un processus, indiquant, entre autre, la politique mémoire
effective pour cet intervalle mémoire et sur quels noeuds les pages ont
été allouées.
numa_maps est un fichier en lecture seule. Quand /proc/<pid>/numa_maps
est lu, le noyau analyse l’espace d’adressage virtuel du processus et
indique comment la mémoire est utilisée. Une ligne est affichée pour
chaque intervalle mémoire du processus.
Le premier champ de chaque ligne indique l’adresse de départ de
l’intervalle mémoire. Ce champ permet une corrélation avec le contenu
du fichier /proc/<pid>/maps, qui contient l’adresse de fin de
l’intervalle et d’autres informations, comme les permissions d’accès et
le partage.
Le second champ indique la politique mémoire effective actuellement
pour l’intervalle mémoire. Notez que la politique effective n’est pas
forcément la politique installée par le processus pour cet intervalle
mémoire. En particulier, si le processus a installé une politique par
défaut (« default ») pour cet intervalle, la politique effective pour
cet intervalle sera la politique du processus, qui peut être ou ne pas
être « default ».
Le reste de la ligne contient des informations sur les pages allouées
dans l’intervalle mémoire, comme ceci :
N<node>=<nombre_pages>
Le nombre de pages allouées sur le noeud <node>. <nombre_pages>
ne comprend que les pages actuellement projetées par le
processus. Un déplacement ou une libération de page peut avoir
temporairement déprojeté les pages associées avec cet intervalle
mémoire. Ces pages ne peuvent réapparaître que quand le
processus essaie de les référencer. Si l’intervalle mémoire
représente une zone de mémoire partagée ou une projection dans
un fichier, d’autres processus peuvent peuvent actuellement
avoir d’autres pages projetées dans l’intervalle mémoire
associé.
file=<nom_fichier>
Le fichier contenant l’intervalle mémoire. Si le fichier est une
projection privée, des accès en écriture peuvent avoir produit
des pages COW (« Copy-On-Write » : copie à l’écriture) dans cet
intervalle mémoire. Ces pages sont affichées comme des pages
anonymes.
heap L’intervalle mémoire est utilisé pour le tas.
stack L’intervalle mémoire est utilisé pour la pile.
huge Gros intervalle mémoire. Le nombre de pages indiqué correspond à
de grosses pages, pas à des pages de taille usuelle.
anon=<pages>
Le nombre de pages anonymes dans l’intervalle.
dirty=<pages>
Nombre de pages sales.
mapped=<pages>
Nombre total de pages projetées, n’étant ni sales (dirty), ni
anonymes (anon).
mapmax=<compte>
Nombre maximum de processus projetant une même page
(« mapcount ») rencontrés lors de l’analyse. Ceci peut être
utilisé comme indicateur du degré de partage dans un intervalle
mémoire donné.
swapcache=<compte>
Nombre de pages qui ont une entrée associée sur un périphérique
de partage.
active=<pages>
Le nombre de pages sur la liste active. Ce champ n’est affiché
que si ce nombre diffère du nombre de pages dans l’intervalle.
Ceci signifie que certaines pages inactives existent dans
l’intervalle mémoire, et qu’elles pourront être retirées de la
mémoire prochainement par le « swapper » (processus de gestion
des périphériques d’échange).
writeback=<pages>
Nombre de pages qui sont actuellement en cours d’écriture sur le
disque.
NOTES
Les appels système NUMA de Linux et les interfaces /proc ne sont
disponibles que si le noyau est configuré et construit avec l’option
CONFIG_NUMA.
Prise en charge par la bibliothèque
Faire l’édition des liens avec -lnuma pour obtenir la définition des
appels système. libnuma et l’en-tête <numaif.h> sont disponibles dans
le paquet numactl.
Cependant, les applications ne devraient pas utiliser ces appels
système directement. À la place, l’interface de plus haut niveau
fournie par les fonctions numa(3) du paquet numactl est recommandée. Le
paquet numactl est disponible à l’adresse
ftp://oss.sgi.com/www/projects/libnuma/download/. Le paquet est aussi
inclus dans certaines distributions. Certaines distributions inclues
séparément la bibliothèque et les en-têtes pour le développement dans
le paquet numactl-devel.
CONFORMITÉ
Aucune norme ne régi les interfaces NUMA.
VOIR AUSSI
get_mempolicy(2), mbind(2), move_pages(2), set_mempolicy(2), numa(3),
cpuset(7), numactl(8)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et est maintenue par Nicolas
François <nicolas.francois@centraliens.net> et l’équipe francophone de
traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».