\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{lun. déc. 21 09:38:32 CET 2015}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={numatop},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Outil d'analyse pour l'accès mémoire},
CreationDate={D:20151221093832},
ModDate={D:20151221093832},
Keywords={numa;GNU/Linux;configuration}
}}
\begin{document}
 
\begin{center}
{\Huge numatop }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Outil d'analyse pour l'accès mémoire}
 
\vspace{10mm}
 
\hspace{1mm}  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.
\vspace{5mm} \\
 
 
\hspace{1mm}  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:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{caractériser la localité de tous les processus et threads pour identifier ceux ayant la localité la plus pauvre dans le système.}
\item[\hspace{1mm} -]{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)}
\item[\hspace{1mm} -]{Fournis les call-chain dans le code process/thread qui accède à une aire mémoire hot.}
\item[\hspace{1mm} -]{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.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} RMA]{Remote Memory Access}
\item[\hspace{6mm} LMA]{Local Memory Access}
\item[\hspace{6mm} IR]{Instruction Retired}
\item[\hspace{6mm} CYCLE]{cycles CPU}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{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.}
\item[\hspace{1mm} -]{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\%.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} RMA/LMA]{ratio de RMA/LMA}
\item[\hspace{6mm} CPI]{cycle CPU par instruction}
\item[\hspace{6mm} CPU\%]{utilisation CPU}
\end{description}
 
\hspace{1mm}  numatop est un outil GUI qui traque et analyse périodiquement l'activité NUMA des processus et threads et affiche des métriques utiles.
\vspace{5mm} \\
 
 
\hspace{1mm}  Ci-dessous est une description détaillée des diverses affichages et les éléments de données qu'elles affichent.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge WIN1 - Supervision des processus et threads }
 
\
 
\hspace{1mm}  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.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} RAM(K)]{nombre de RMA (l'unité est 1000)}
\item[\hspace{6mm} LMA(K)]{nombre de LMA (l'unité est 1000)}
\item[\hspace{6mm} RMA/LMA]{ratio de RMA/LMA}
\item[\hspace{6mm} CPI]{cycles CPU par instruction}
\item[\hspace{6mm} CPU\%]{utilisation CPU du système}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} Q]{quitter l'application}
\item[\hspace{6mm} H]{Rafraîchir la fenêtre}
\item[\hspace{6mm} R]{Rafraîchis les données}
\item[\hspace{6mm} I]{Passer à WIN2}
\item[\hspace{6mm} N]{Passer à WIN11}
\item[\hspace{6mm} 1]{Trier par RMA}
\item[\hspace{6mm} 2]{Trier par LMA}
\item[\hspace{6mm} 3]{Trier par ratio RMA/LMA}
\item[\hspace{6mm} 4]{Trier par CPI}
\item[\hspace{6mm} 5]{Trier par CPU\%}
\end{description}
 
\vspace{1cm}{\huge WIN2 - Supervision des processus et threads (normalisée) }
 
\
 
\hspace{1mm}  Affiche la caractérisation de localité normalisée de tous les processus
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} RPI(K)]{RMA normalisé par 1000 instructions: RPI(K) = RMA/ (IR / 1000)}
\item[\hspace{6mm} LPI(K)]{LMA normalisé par 1000 instructions: RPI(K) = LMA/ (IR / 1000)}
\item[\hspace{6mm} Les autres métrique sont les mêmes.]{}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} Q]{quitter l'application}
\item[\hspace{6mm} H]{Passer à WIN1}
\item[\hspace{6mm} B]{Retour à la précédent fenêtre}
\item[\hspace{6mm} R]{Rafraîchis les données}
\item[\hspace{6mm} N]{Passer à WIN11}
\item[\hspace{6mm} 1]{Trier par RPI}
\item[\hspace{6mm} 2]{Trier par LPI}
\item[\hspace{6mm} 3]{Trier par ratio RMA/LMA}
\item[\hspace{6mm} 4]{Trier par CPI}
\item[\hspace{6mm} 5]{Trier par CPU\%}
\end{description}
 
\vspace{1cm}{\huge WIN3 - Supervision de processus }
 
\
 
\hspace{1mm}  Affiche la caractérisation de localité avec l'affinité de nœud d'un processus spécifié
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} NODE]{L'id de nœud}
\item[\hspace{6mm} CPU\%]{UTilisation CPU par nœud}
\item[\hspace{6mm} Les autres métriques restent les mêmes]{}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} Q]{quitter l'application}
\item[\hspace{6mm} H]{Passer à WIN1}
\item[\hspace{6mm} B]{Retour à la précédent fenêtre}
\item[\hspace{6mm} R]{Rafraîchis les données}
\item[\hspace{6mm} N]{Passer à WIN11}
\item[\hspace{6mm} L]{Affiche les informations de latence}
\item[\hspace{6mm} C]{Affiche le call-chain}
\end{description}
 
\vspace{1cm}{\huge WIN4 - Supervision de tous les threads }
 
\
 
\hspace{1mm}  Affiche la caractérisation de localité de tous les threads dans un processus spécifié.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge WIN6 - Supervision des aires mémoire }
 
\
 
\hspace{1mm}  Affiche l'utilisation d'aire mémoire avec la latence d'accès associée d'un process/thread
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} ADDR]{Addresse de début de l'aire mémoire}
\item[\hspace{6mm} SIZE]{Taille de l'aire mémoire}
\item[\hspace{6mm} ACCESS\%]{Pourcentage d'accès mémoire fait dans cette aire mémoire}
\item[\hspace{6mm} LAT(ns)]{La latence moyenne des accès mémoire}
\item[\hspace{6mm} DESC]{Description de l'aire mémoire}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} Q]{quitter l'application}
\item[\hspace{6mm} H]{Passer à WIN1}
\item[\hspace{6mm} B]{Retour à la précédent fenêtre}
\item[\hspace{6mm} R]{Rafraîchis les données}
\item[\hspace{6mm} A]{Affiche la distribution de nœuds d'accès mémoire}
\item[\hspace{6mm} C]{Affiche le call-chain quand les process/thread accèdent à la mémoire.}
\end{description}
 
\vspace{1cm}{\huge WIN7 - vue générale de distribution de nœuds d'accès mémoire }
 
\
 
\hspace{1mm}  Affiche le pourcentage d'accès mémoire venant du process/thread de chaque nœud
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} Q]{quitter l'application}
\item[\hspace{6mm} H]{Passer à WIN1}
\item[\hspace{6mm} B]{Retour à la précédent fenêtre}
\item[\hspace{6mm} R]{Rafraîchis les données}
\end{description}
 
\vspace{1cm}{\huge WIN8 - sépare l'aire mémoire dans la mémoire physique dans le nœud }
 
\
 
\hspace{1mm}  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.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge WIN9 - Call-chain quand les process/threads génèrent l'evènement (RMA/LMA/CYCLE/IR) }
 
\
 
\hspace{1mm}  Détermire les call-chains du code qui génère RMA/LMA/CYCLE/IR
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} Q]{quitter l'application}
\item[\hspace{6mm} H]{Passer à WIN1}
\item[\hspace{6mm} B]{Retour à la précédent fenêtre}
\item[\hspace{6mm} R]{Rafraîchis les données}
\item[\hspace{6mm} 1]{Localise le call-chain quand le processus/thread génère RMA}
\item[\hspace{6mm} 2]{Localise le call-chain quand le processus/thread génère LMA}
\item[\hspace{6mm} 3]{Localise le call-chain quand le processus/thread génère CYCLE}
\item[\hspace{6mm} 4]{Localise le call-chain quand le processus/thread génère IR}
\end{description}
 
\vspace{1cm}{\huge WIN10 - Call-chain quand le process/thread accède à l'aire mémoire }
 
\
 
\hspace{1mm}  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)
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge WIN11 - Vue générale des nœuds }
 
\
 
\hspace{1mm}  Affiche les statistiques de base par nœud pour ce système
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} MEM.ALL]{RAM utilisable totale (physique moins quelques octets réservés et le code du kernel)}
\item[\hspace{6mm} MEM.FREE]{Somme LowFree + HighFree}
\item[\hspace{6mm} CPU\%]{UTilisation CPU par nœud}
\end{description}
 
\vspace{1cm}{\huge WIN12 - information de nœud }
 
\
 
\hspace{1mm}  Affiche l'utilisation et CPU pour le nœud sélectionné
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} CPU]{Tableau de cpu logiques appartenant à ce nœud}
\item[\hspace{6mm} CPU\%]{Utilisation de CPU par nœud}
\item[\hspace{6mm} MEM active]{quantité de mémoire utilisé la plus récemment et n'est pas réclamé}
\item[\hspace{6mm} MEM inactive]{Quantité de mémoire qui n'a pas été utilisé depuis un certain temps et est éligible au swap}
\item[\hspace{6mm} Dirty]{Quantité de mémoire attendant d'être écrite sur disque}
\item[\hspace{6mm} Writeback]{Quantité de mémoire activement écrite sur le disque}
\item[\hspace{6mm} Mapped]{Toutes les pages mappée dans un processus}
\end{description}
 
\vspace{1cm}{\huge OPTIONS }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -s sampling\_precision]{balance entre précision et charge(normal), précision(high), faible charge(low). défaut: normal.}
\item[\hspace{1mm} -l log\_level]{Spécifie le niveau de log dans le fichier de log. valeurs valides: 2}
\item[\hspace{1mm} -f log\_file]{spécifie le fichier de log}
\item[\hspace{1mm} -d dump\_file]{Spécifie le fichier de dump}
\item[\hspace{1mm} ]{}
\end{description}
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Lancer numatop à haute précision: \\
\hspace{1mm} \textbf{numatop -s high} \\
\hspace{1mm} Écrire tous les messages d'alerte dans /tmp/numatop.log: \\
\hspace{1mm} \textbf{numatop -l 2 -o /tmp/numatop.log} \\
\hspace{1mm} Dump les données de l'écrant dans /tmp/dump.log: \\
\hspace{1mm} \textbf{numatop -d /tmp/dump.log} \\
 
\vspace{1cm}{\huge Notes }
 
\
 
\hspace{1mm}  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.
\vspace{5mm} \\
 
\end{flushleft}
\end{document}
