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 multiprocesseur dont la
mémoire est divisé en plusieurs nœuds mémoire. Le
temps d'accès à un nœud mémoire dépend de
la localisation relative du CPU utilisateur et du nœud utilisé
(à l'opposé des systèmes multiprocesseur
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 nœud mémoire local pour
lequel il peut accéder plus rapidement au contenu, par rapport aux
mémoires des nœuds locaux aux autres CPU où à la
mémoire sur un bus partagé par tous les CPU.
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.
Ce fichier affiche des informations concernant l'allocation et la politique
mémoire NUMA d'un processus.
Each line contains information about a memory range used by the process,
displaying—among other information—the effective memory policy
for that memory range and on which nodes the pages have been allocated.
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 nœud
<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 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 maximal 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.
Aucune norme ne régi les interfaces NUMA.
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.
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.
get_mempolicy(2),
mbind(2),
move_pages(2),
set_mempolicy(2),
numa(3),
cpuset(7),
numactl(8)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]> et David Prévot <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]