Apparence
Uubu.fr

Les systèmes Linux, l’open source, les réseaux, l’interopérabilité, etc.
« Il vaut mieux viser la perfection et la manquer que viser l’imperfection et l’atteindre. » (Bertrand Arthur William RUSSEL)
20 décembre 2015

htmlpdflatexmanmd




NUMA

NUMA

Système NUMA - introduction

   Les information relatives à numa peuvent être trouvées dans /sys/devices/system/node/

  /proc/‹pid›/numa_maps donne des informations sur la stratégie mémoire et l'allocation NUMA utilisée pour le processus. Chaque ligne contient des informations sur la plage mémoire utilisé par le processus.

   Le premier champ de chaque ligne montre l'adresse de début de la plage mémoire. Ce champ permet de corréler avec le contenu de /proc/‹pid›/maps, qui contient l'adresse de fin de la plage et d'autres informations, tel que les permissions d'accès et le partage

   Le second champ montre la stratégie mémoire actuellement effective pour la plage mémoire. Noter que la stratégie mémoire n'est pas nécessairement la stratégie installée par le processus pour cette plage mémoire. Spécifiquement, si le processus a installé une stratégie défaut pour cette plage, la stratégie effective pour cette plage sera la stratégie du processus, qui peut ou non être le défaut.

   Le reste de la ligne contient des informations sur les pages allouées dans la plage mémoire, comme suit:

N‹node›=‹nr_pages› le nombre de pages allouées dans le nœud. nr_pages inclus seulement les pages actuellement mappées par le processus. La migration de page et la réclamation de mémoire peut avoir des pages non mappées temporairement associées avec cette plage mémoire.
file=‹filename› le fichier concerné par la plage mémoire. Si le fichier est mappé comme privé, les accès d'écriture peuvent avoir généré des pages COW dans cette plage mémoire. Ces pages sont affichées comme pages anonymes.
heap plage mémoire utilisée pour le heap
stack plage mémoire utilisée pour la pile
huge plage de grandes mémoire
anon=‹pages› nombre de pages anonymes dans la plage
dirty=‹pages› nombre de dirty pages
mapped=‹pages› nombre total de pages mappées, si différent des pages dirty et anon
mapmax=‹count› mapcount maximum (nombre de processus mappant une seule page
swapcache=‹count› Nombre de pages qui ont une entrée associée dans le swap
active=‹pages› Nombre de pages dans la liste active. affiché seulement s'il est différent du nombre de pages dans cette plage. Cela signifie que des pages inactives existent dans la plage mémoire.
writeback=‹pages› Nombre de pages actuellement en cour d'écriture sur disque

^
20 décembre 2015

htmlpdflatexmanmd




numactl

numactl

Contrôle la stratégie NUMA pour les processus ou le partage mémoire

   numactl lance les processus avec une planification NUMA spécifique ou stratégie de placement mémoire. La stratégie est définis pour la commande héritée par tous ses enfants. De plus il peut définir une stratégie persistante pour les segments de mémoire partagée ou fichiers.

   Les nœuds peuvent être spécifié comme N,N,N ou N-N ou N,N-N ou N-N,N-N. Les nœuds relatifs peuvent être spécifiés comme +N,N,N ou +N-N ou +N,N-N. + indique que les numéros de nœuds sont relatifs au jeu de processus de nœud permis dans son cpuset actuel. !N-N indique l'inverse de N-N. Au lieu d'un numéro de nœud, un nœud peut également être:

netdev:DEV Le nœud connecté au périphérique réseau dev
file:PATH Le périphérique block PATH
ip:HOST le nœud du périphérique réseau de HOST
block:PATH le nœud du périphérique block PATH
pci:[seg:]bus:dev[:func] le nœud du périphérique PCI

   Noter que block résout les noms de périphériques block du kernel seulement pour les noms udev dans le fichier dans /dev.

  Les paramètres de stratégie sont:‹/br›

--all, -a reset le cpuset par défaut, afin qu'il soit possible d'utiliser tous les cpu/nœuds pour les paramètres de stratégie suivante.
--interleave=nodes, -i nodes Définie une stratégie d'entrelacement mémoire. La mémoire sera allouée en utilisant un round robin dans les nœuds. Plusieurs nœuds peuvent être spécifiés dans --interleave, --membind et --cpunodebind
--membind=nodes, -m nodes Alloue la mémoire uniquement dans les nœuds. L'allocation échoue s'il n'y a pas suffisamment de mémoire disponible dans ces nœuds.
--cpunodebind=nodes, -N nodes Execute le processus seulement sur les cpus spécifiés. Accepte les numéros de cpu comme affiché dans le champ processor de /proc/cpuinfo ou les cpus relatifs dans le cpuset courant. "all" est accepté, qui signifie tous les cpu du cpuset.
--localalloc, -l Alloue toujours dans le nœud courant
--preferred=node Alloue la mémoire de préférence dans le nœud spécifié, mais si la mémoire ne peut être allouée, utilise d'autres nœuds.
--show, -s Affiche les paramètre de stratéie numa du processus courant
--hardware, -H Affiche l'inventaire des nœuds disponible dans le système.

           numactl peut définir une stratégie pour un segment de mémoire partagée SYSV ou un fichier dans shmfs/hugetlbfs. Cette stratégie est persistante et sera toujours utilisée par tous les mappages de cette mémoire partagée. L'ordre des options a une signification ici. La spécification doit au moins inclure --shm, --shmid, --file pour spécifier le segment de mémoire partagée ou le fichie et une stratégie mémoire comme décrite plus haut ( --interleave, --localalloc, --preferred, --membind ).

--huge En créant un segment de mémoire partagée SYSV, utilise des grandes pages. Seulement valide avant --shmid ou --shm
--offset Spécifie l'offset dans le segment de mémoire partagé. défaut: 0. Les unités valides sont m (Mo), g(Go), k(Ko), sinon est spécifié en octets.
--strict Donne une erreur quand une page dans l'aire de stratégie dans le segment de mémoire partagée a déjà généré une faute avec un conflit de stratégie. par défaut, ignore silencieusement.
--shmmode shmmode seulement valide avant --shmid ou shm en créant un segment de mémoire partagé avec un mode numérique shmmode.
--length length Applique la stratégie à la longueur de plage du segment de mémoire partagée ou créé la longueur du segment. par défaut, utilise la longueur restante requise quand un segment de mémoire partagée est créé et spécifie la longueur du nouveau segment. Les unités de valeurs sont m, g, k ou en octet par défaut.
--shmid id Créé ou utilise un segment de mémoire partagé avec l'id numérique spécifié
--shm shmkeyfile Crée ou utilise un segment de mémoire partagé, avec l'id généré en utilisant fotk(3) depuis shmkeyfile.
--file tmpfsfile Définis la stratgie pour un fichier dans tmpfs ou hugetlbfs
--touch Touch les pages pour forcer la stratégie. Ne les touch pas par défaut, la stratégie est appliquée quand une application mappe et accède à une page.
--dump Dump la stratégie dans la plage spécifiée
--dump-nodes Dump tous les nœuds de la plage spécifique (très verbeux!)

   Les spécifieurs de nœud valides sont:

all tous les nœuds
number Numéro de nœud
number1{,number2} nœud number1 et nœud number2
number1-number2 plage de nœuds
! nodes Inverse la sélection

Exemples

Lance myapplic sur les cpu 0-4 et 8-12 du cpuset courant:
numactl --physcpubind=+0-4,8-12 myapplic arguments
Lance une grosse base avec sa mémoire entrelacée sur tous les CPU:
numactl --interleave=all bigdatabase arguments
Lance le process dans le nœud 0 avec la mémoire allouée dans les nœuds 0 et 1:
numactl --cpunodebind=0 --membind=0,1 process
Idem, mais avec une option (-l) qui peut être confondue avec une option numactl:
numactl --cpunodebind=0 --membind=0,1 -- process -l
Lance network-server dans le nœud de périphérique réseau eth0 avec sa mémoire également dans le même nœud:
numactl --cpunodebind=netdev:eth0 --membind=netdev:eth0 network-server
Définis le nœud 1 comme préféré et affiche l'état résultant:
numactl --preferred=1 numactl --show
Entrelace toute la région mémoire partagée sysv spécifiée par /tmp/shmkey sur tous les nœuds:
numactl --interleave=all --shm /tmp/shmkey
Place un fichier tmpfs dans 2 nœuds:
numactl --membind=2 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024
numactl --membind=3 dd if=/dev/zero of=/dev/shm/A seek=1024 bs=1M count=1024
Réinitialise la stratégie pour le fichier de mémoire partagée file à la stratégie par défaut localalloc:
numactl --localalloc /dev/shm/file

Notes

   Les commande ne sont pas exécutée en utilisant un shell. Utiliser sh -c pour cela.

  Définir la stratégie pour un fichier hugetlbfs ne fonctionnement pas actuellement.

  Les segment de mémoire partagée plus grand que l'espace d'adressage ne peut pas être complètement sous stratégie.
^
20 décembre 2015

htmlpdflatexmanmd




numad

numad

Service en userspace qui fournis des conseils de placement et de gestion de processus pour utiliser efficacement les CPU et la mémoire dans le système avec une topologie NUMA

   numad est un service qui monitor la topologie NUMA et l'utilisation des ressources. Il tente de localiser les processus pour la localité NUMA, l'affinité, en ajustant dynamiquement pour changer les conditions système. numad fournis également un guide pour assister la gestion des applications avec une liaison manelle des ressources CPU et mémoire.

OPTIONS

-C 0|1 Cette option contrôle si numad traite le cache de fichier inactif comme mémoire disponible. Par défaut, il peut compter le cache de fichier inactif comme mémoire libre.
-d mode debug
-H ‹THP_scan_sleep_ms› Définis l'intervalle de scan transparent hugepage en milliseconde. /sys/kernel/mm/tranparent_hugepage/khugepaged/scan_sleep_millisecs est généralement de 10000ms par l'os. Le défaut est changé par numad à 1000ms vu que çà aide le service hugepage à être plus agressif quand il déplace la mémoire entre les nœuds. à 0, numad laisse la valeur du système. 100ms peut améliorer les performances des processus à forte charge qui utilisent de nombreuses transparent_hugepages.
-i ‹[min_interval:]max_interval› Interval de temps d'attente entre les scans système. Défaut: 5 (min) et 15 (max) secondes. max_interval à 0 cause le service à quitter. Une valeur plus grande diminue la charge de numad, mais diminue la réponse les charges changeantes.
-K 0|1 Cette options contrôle si numad conserve entrelacement de la propagation de mémoire au travers des nœuds NUMA, ou tente de fusionner la mémoire entrelacée dans les nœuds NUMA locaux. Le mode par défaut est de fusionner la mémoire entrelacée C'est approprié pour localiser les processus dans un sous-jeu des nœuds NUMA du système. Si vous lancez une grosse application simple instance que alloue de la mémoire entrelacée parce que la charge aura des motifs d'accès mémoire imprédictibles, les résultats seront meilleur avec -K 1 pour instruire numad de conserver la mémoire entrelacée distribuée.
-l ‹log_level› Définis le niveau de log. défaut: 5
-m ‹target_memory_locality› Définis le seuil de localité mémoire désiré pour stopper le déplacement de mémoire. numad peut arrêter de traiter la mémoire quand plus de ce pourcentage de mémoire du processus est déjà localisé dans le ou les nœuds cible. le défaut est 90%. numad localise fréquemment ce seuil mais ne le fait pas nécessairement. à 100%, numad tente en permanence de déplacer la mémoire que le kernel n'arrivera jamais à déplacer.
-p ‹PID› ajoute le pid à la liste d'inclusion des processus à considérer pour la gestion, si le processus utilise déjà des ressources significative. Peut être spécifié plusieurs fois au démarrage, mais une fois lancé, un seul pid peut être ajouté à la liste d'inclusion par invocation de numad. Utilisé avec -S pour contrôler précisemment le périmètre des processus que numad peut gérer. Noter que ce processus spécifié ne sera pas nécessairement géré activement sauf s'il rencontre le seuil de numad, qui est actuellement de 300Mo et 1/2 CPU.
-r ‹PID› Supprime le pid des liste d'inclusion et d'exclusion des processus. une foir le service démarré, seul un PID peut être supprimé par invocation de numad. Avec -S, -p et -x pour contrôler précisemment le périmètre des processus que numad peut gérer.
-R ‹CPU_LIST› Spécifie une liste de cpu que numad devrait considérer comme réservé pour une utilisation non numad. Aucun processus ne sera lié aux CPU spécifiés par numad. Cette option est seulement effective quand numad démarre.
-S 0|1 Cette option contrôle si numad scanne tous les processus système ou seulement les processus dans la liste d'inclusion PID. Scan tous les processus par défaut. -S 0 scanne seulement la liste d'inclusion PID . numad -S 0 -p ‹PID-1› -p ‹PID-2› -p ‹PID-3› limit le scan, et donc la gestion automatique NUMA, à seulement 3 processus.
-t ‹logical_CPU_percent› Spécifie la valeur de ressource des CPU logique. Les threads hardware partagent généralement pluse de ressources, et ces CPU logiques ajoutent seulement une fraction de puissance CPU. Par défaut numad considère les CPU logiques à seulement 20% d'un cœur hardware dédié.
-u ‹target_utilization› Définis le pourcentage de consommation d'un nœud. Défaut: 85%. Diminuer cette valeur pour maintenir plus de ressource disponible dans chaque nœud. à 100, les performances systèmes sont améliorée. Il est possible d'aller jusqu'à 130 pour surcharger les CPU dans les nœuds, mais l'utilisation mémoire est toujours plafonnée à 100%.
-v mode verbeux
-w ‹NCPUS[:MB]› demande à numad les meilleurs nœuds NUMA pour lier une entité qui nécessite ‹NCPUS›. La quantité de mémoire est optionnelle, mais devrait normallement être spécifiée pour que numad recommande les nœuds NUMA avec la capacité CPU disponible et la mémoire disponible. La sortie de cette option est une chaîne qui contient une liste de nœud NUMA. Cette liste devrait être placé dans une variable (ex:NODES), et utilisé comme paramètre dans numactl -m $NODES -N $MODES ...
-x ‹PID› Ajoute le PID à la liste d'exclusion de processus à blacklister de la gestion. Peut être spécifié plusieurs fois au démarrage, mais une seul fois ensuite par invocation de numad. avec -S permet de contrôle précisemment le périmètre des processus que numad peut gérer.

Exemples

numad peut être lancé comme service système:
/usr/bin/numad
les autres invocation de numad peuvent être utilisé pour changer dynamiquement les options à chaud:
/usr/bin/numad -i0
^
21 décembre 2015

htmlpdflatexmanmd




numastat

numastat

Affiche des statistiques mémoire par nœud numa pour les processus et l'os

   numastat sans options ou argument, affiche des statistiques par nœud numa avec les champs suivant:

numa_hit Mémoire allouée avec succès dans ce nœud comme prévu
numa_miss Mémoire allouée dans ce nœud en dépit des préférences de processus Chaque numa_miss a un numa_foreign dans un autre nœud
numa_foreign est la mémoire prévu pour ce nœud, mais actuellement allouée dans un nœud différent.
interleave_hit Mémoire entrelacée allouée avec succès dans ce nœud comme prévu
local_node mémoire allouée dans ce nœud alors qu'un processus fonctionnait dessus
other_node mémoire allouée dans ce nœud alors qu'un processus fonctionnait dans un autre nœud.

OPTIONS

-c Minimise la table affichée
-m Afiche les informations mémoire système type meminfo.
-p ‹PID› ou ‹pattern› Affiche les informations mémoire par nœud pour le pid ou motif spécifié.
-s[‹node›] Trie les données de la table dans l'ordre descendant.
-v Rapport plus verbeux
-z Enlève les données 0 de la table
^
21 décembre 2015

htmlpdflatexmanmd




numatop

numatop

Outil d'analyse pour l'accès mémoire

   Les système modernes utilisent un concept NUMA (Non-Uniform Memory Access) pour le multi-cpu. Dans les systèmes NUMA et les processeurs organisés de telle manière que certaines parties de la mémoire sont proches d'un processeur donné, alors que d'autres parties sont plus éloignées. Un processeur peut accéder à la mémoire proche de lui plus rapidement que la mémoire éloignée.

   numatop est un outil d'observation pour la caractérisation de localité mémoire en temps-réel et d'analyse de processus et threads tournant dans un système NUMA. Il aide l'utilisateur à caractériser le fonctionnement NUMA des processus et threads et d'identifier où les goulots d'étranglement se produisent en terme de performances. L'outil utilise la technologie de compteur de performance Intel et associe les données de performances avec les informations temps réel de Linux pour fournir une analyse temps-réel dans les systèmes de production. L'outil peut être utilisé pour:

- caractériser la localité de tous les processus et threads pour identifier ceux ayant la localité la plus pauvre dans le système.
- Identifier les aires de mémoire "hot", indiquer la latence mémoire moyenne, et fournir l'emplacement où la mémoire accédée est allouée. Une aire de mémoire "hot" est où les accès process/thread sont les plus fréquent. numatop a un métrique appelé "ACCESS%" qui spécifie le pourcentage d'accès mémoire attribuable à chaque aire mémoire. numatop n'enregistre que les accès mémoire qui ont des latences supérieures à ceux prédéfinis par le seuil (128 cycles cpu)
- Fournis les call-chain dans le code process/thread qui accède à une aire mémoire hot.
- Fournis call-chain quand le process/thread génère certains compteurs d'évènement (RMA/LMA/IR/CYCLE). Les call-chain aident à localiser le code source qui génèrent les évènements.

        RMA Remote Memory Access
        LMA Local Memory Access
        IR Instruction Retired
        CYCLE cycles CPU

- Fournir des statistiques par nœud pour l'utilisation mémoire et CPU. Un nœud est une région de mémoire dans laquelle tout octet a la même distance de chaque CPU.
- Affiche, en utilisant une interface user-friendly, la liste des process/thread triés par certaines métriques (par défaut, trié par l'utilisation CPU). Les utilisateur peuvent également utiliser les raccourcis pour retrier la sortie par ces métriques: RMA, LMA, RMA/LMA, CPI et CPU%.

        RMA/LMA ratio de RMA/LMA
        CPI cycle CPU par instruction
        CPU% utilisation CPU

   numatop est un outil GUI qui traque et analyse périodiquement l'activité NUMA des processus et threads et affiche des métriques utiles.

   Ci-dessous est une description détaillée des diverses affichages et les éléments de données qu'elles affichent.

WIN1 - Supervision des processus et threads

   Affiche la caractérisation de localité de tous les processus. C'est la première fenêtre affichée a démarrage. Cette fenêtre affiche une liste de processus, trié par % de CPU. Généralement, le processus intensifs en mémoire est également intensif en CPU. les touches 1,2,3,4, et 5 permettent de trier la sortie par RMA, LMA, RMA/LMA, CPI, et CPU%, respectivement.

        RAM(K) nombre de RMA (l'unité est 1000)
        LMA(K) nombre de LMA (l'unité est 1000)
        RMA/LMA ratio de RMA/LMA
        CPI cycles CPU par instruction
        CPU% utilisation CPU du système

        Q quitter l'application
        H Rafraîchir la fenêtre
        R Rafraîchis les données
        I Passer à WIN2
        N Passer à WIN11
        1 Trier par RMA
        2 Trier par LMA
        3 Trier par ratio RMA/LMA
        4 Trier par CPI
        5 Trier par CPU%

WIN2 - Supervision des processus et threads (normalisée)

   Affiche la caractérisation de localité normalisée de tous les processus

        RPI(K) RMA normalisé par 1000 instructions: RPI(K) = RMA/ (IR / 1000)
        LPI(K) LMA normalisé par 1000 instructions: RPI(K) = LMA/ (IR / 1000)
        Les autres métrique sont les mêmes.

        Q quitter l'application
        H Passer à WIN1
        B Retour à la précédent fenêtre
        R Rafraîchis les données
        N Passer à WIN11
        1 Trier par RPI
        2 Trier par LPI
        3 Trier par ratio RMA/LMA
        4 Trier par CPI
        5 Trier par CPU%

WIN3 - Supervision de processus

   Affiche la caractérisation de localité avec l'affinité de nœud d'un processus spécifié

        NODE L'id de nœud
        CPU% UTilisation CPU par nœud
        Les autres métriques restent les mêmes

        Q quitter l'application
        H Passer à WIN1
        B Retour à la précédent fenêtre
        R Rafraîchis les données
        N Passer à WIN11
        L Affiche les informations de latence
        C Affiche le call-chain

WIN4 - Supervision de tous les threads

   Affiche la caractérisation de localité de tous les threads dans un processus spécifié.

WIN6 - Supervision des aires mémoire

   Affiche l'utilisation d'aire mémoire avec la latence d'accès associée d'un process/thread

        ADDR Addresse de début de l'aire mémoire
        SIZE Taille de l'aire mémoire
        ACCESS% Pourcentage d'accès mémoire fait dans cette aire mémoire
        LAT(ns) La latence moyenne des accès mémoire
        DESC Description de l'aire mémoire

        Q quitter l'application
        H Passer à WIN1
        B Retour à la précédent fenêtre
        R Rafraîchis les données
        A Affiche la distribution de nœuds d'accès mémoire
        C Affiche le call-chain quand les process/thread accèdent à la mémoire.

WIN7 - vue générale de distribution de nœuds d'accès mémoire

   Affiche le pourcentage d'accès mémoire venant du process/thread de chaque nœud

        Q quitter l'application
        H Passer à WIN1
        B Retour à la précédent fenêtre
        R Rafraîchis les données

WIN8 - sépare l'aire mémoire dans la mémoire physique dans le nœud

   Sépare l'aire mémoire dans le mappage physique dans le nœud avec la latence d'accès associée d'un processus/thread.

WIN9 - Call-chain quand les process/threads génèrent l'evènement (RMA/LMA/CYCLE/IR)

   Détermire les call-chains du code qui génère RMA/LMA/CYCLE/IR

        Q quitter l'application
        H Passer à WIN1
        B Retour à la précédent fenêtre
        R Rafraîchis les données
        1 Localise le call-chain quand le processus/thread génère RMA
        2 Localise le call-chain quand le processus/thread génère LMA
        3 Localise le call-chain quand le processus/thread génère CYCLE
        4 Localise le call-chain quand le processus/thread génère IR

WIN10 - Call-chain quand le process/thread accède à l'aire mémoire

   Détermine les call-chains du code qui référence cette aire mémoire. La latence doit être supérieure au seuil de latence prédéfinis (128 cycles CPU)

WIN11 - Vue générale des nœuds

   Affiche les statistiques de base par nœud pour ce système

        MEM.ALL RAM utilisable totale (physique moins quelques octets réservés et le code du kernel)
        MEM.FREE Somme LowFree + HighFree
        CPU% UTilisation CPU par nœud

WIN12 - information de nœud

   Affiche l'utilisation et CPU pour le nœud sélectionné

        CPU Tableau de cpu logiques appartenant à ce nœud
        CPU% Utilisation de CPU par nœud
        MEM active quantité de mémoire utilisé la plus récemment et n'est pas réclamé
        MEM inactive Quantité de mémoire qui n'a pas été utilisé depuis un certain temps et est éligible au swap
        Dirty Quantité de mémoire attendant d'être écrite sur disque
        Writeback Quantité de mémoire activement écrite sur le disque
        Mapped Toutes les pages mappée dans un processus

OPTIONS

-s sampling_precision balance entre précision et charge(normal), précision(high), faible charge(low). défaut: normal.
-l log_level Spécifie le niveau de log dans le fichier de log. valeurs valides: 2
-f log_file spécifie le fichier de log
-d dump_file Spécifie le fichier de dump

Exemples

Lancer numatop à haute précision:
numatop -s high
Écrire tous les messages d'alerte dans /tmp/numatop.log:
numatop -l 2 -o /tmp/numatop.log
Dump les données de l'écrant dans /tmp/dump.log:
numatop -d /tmp/dump.log

Notes

   Il est nécessaire d'avoir les privilèges root pour lancer numatop, ou de définir /proc/sys/kernel/perf_event_paranoid à 1. numatop supporte les processeurs Intel Xeon.