\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]{dim. déc. 20 20:51:50 CET 2015}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={numactl},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Contrôle la stratégie NUMA pour les processus ou le partage mémoire},
CreationDate={D:20151220205150},
ModDate={D:20151220205150},
Keywords={numa;GNU/Linux;configuration}
}}
\begin{document}
 
\begin{center}
{\Huge numactl }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Contrôle la stratégie NUMA pour les processus ou le partage mémoire}
 
\vspace{10mm}
 
\hspace{1mm}  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.
\vspace{5mm} \\
 
 
\hspace{1mm}  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:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} netdev:DEV]{Le nœud connecté au périphérique réseau dev}
\item[\hspace{1mm} file:PATH]{Le périphérique block PATH}
\item[\hspace{1mm} ip:HOST]{le nœud du périphérique réseau de HOST}
\item[\hspace{1mm} block:PATH]{le nœud du périphérique block PATH}
\item[\hspace{1mm} pci:\texttt{[}seg:\texttt{]}bus:dev\texttt{[}:func\texttt{]}]{le nœud du périphérique PCI}
\end{description}
 
\hspace{1mm}  Noter que block résout les noms de périphériques block du kernel seulement pour les noms udev dans le fichier dans /dev.
\vspace{5mm} \\
\hspace{1mm}  Les paramètres de stratégie sont:</br>
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} --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.}
\item[\hspace{1mm} --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}
\item[\hspace{1mm} --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.}
\item[\hspace{1mm} --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.}
\item[\hspace{1mm} --localalloc, -l]{Alloue toujours dans le nœud courant}
\item[\hspace{1mm} --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.}
\item[\hspace{1mm} --show, -s]{Affiche les paramètre de stratéie numa du processus courant}
\item[\hspace{1mm} --hardware, -H]{Affiche l'inventaire des nœuds disponible dans le système.}
\end{description}
 
\hspace{6mm}  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 ).
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} --huge]{En créant un segment de mémoire partagée SYSV, utilise des grandes pages. Seulement valide avant --shmid ou --shm}
\item[\hspace{1mm} --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.}
\item[\hspace{1mm} --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.}
\item[\hspace{1mm} --shmmode shmmode]{seulement valide avant --shmid ou shm en créant un segment de mémoire partagé avec un mode numérique shmmode.}
\item[\hspace{1mm} --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.}
\item[\hspace{1mm} --shmid id]{Créé ou utilise un segment de mémoire partagé avec l'id numérique spécifié}
\item[\hspace{1mm} --shm shmkeyfile]{Crée ou utilise un segment de mémoire partagé, avec l'id généré en utilisant fotk(3) depuis shmkeyfile.}
\item[\hspace{1mm} --file tmpfsfile]{Définis la stratgie pour un fichier dans tmpfs ou hugetlbfs}
\item[\hspace{1mm} --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.}
\item[\hspace{1mm} --dump]{Dump la stratégie dans la plage spécifiée}
\item[\hspace{1mm} --dump-nodes]{Dump tous les nœuds de la plage spécifique (très verbeux!)}
\end{description}
 
\hspace{1mm}  Les spécifieurs de nœud valides sont:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} all]{tous les nœuds}
\item[\hspace{1mm} number]{Numéro de nœud}
\item[\hspace{1mm} number1\{,number2\}]{nœud number1 et nœud number2}
\item[\hspace{1mm} number1-number2]{plage de nœuds}
\item[\hspace{1mm} ! nodes]{Inverse la sélection}
\end{description}
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Lance myapplic sur les cpu 0-4 et 8-12 du cpuset courant: \\
\hspace{1mm} \textbf{numactl --physcpubind=+0-4,8-12 myapplic arguments} \\
\hspace{1mm} Lance une grosse base avec sa mémoire entrelacée sur tous les CPU: \\
\hspace{1mm} \textbf{numactl --interleave=all bigdatabase arguments} \\
\hspace{1mm} Lance le process dans le nœud 0 avec la mémoire allouée dans les nœuds 0 et 1: \\
\hspace{1mm} \textbf{numactl --cpunodebind=0 --membind=0,1 process} \\
\hspace{1mm} Idem, mais avec une option (-l) qui peut être confondue avec une option numactl: \\
\hspace{1mm} \textbf{numactl --cpunodebind=0 --membind=0,1 -- process -l} \\
\hspace{1mm} 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: \\
\hspace{1mm} \textbf{numactl --cpunodebind=netdev:eth0 --membind=netdev:eth0 network-server} \\
\hspace{1mm} Définis le nœud 1 comme préféré et affiche l'état résultant: \\
\hspace{1mm} \textbf{numactl --preferred=1 numactl --show} \\
\hspace{1mm} Entrelace toute la région mémoire partagée sysv spécifiée par /tmp/shmkey sur tous les nœuds: \\
\hspace{1mm} \textbf{numactl --interleave=all --shm /tmp/shmkey} \\
\hspace{1mm} Place un fichier tmpfs dans 2 nœuds: \\
\hspace{1mm} \textbf{numactl --membind=2 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024} \\
\hspace{1mm} \textbf{numactl --membind=3 dd if=/dev/zero of=/dev/shm/A seek=1024 bs=1M count=1024} \\
\hspace{1mm} Réinitialise la stratégie pour le fichier de mémoire partagée file à la stratégie par défaut localalloc: \\
\hspace{1mm} \textbf{numactl --localalloc /dev/shm/file} \\
 
\vspace{1cm}{\huge Notes }
 
\
 
\hspace{1mm}  Les commande ne sont pas exécutée en utilisant un shell. Utiliser sh -c pour cela.
\vspace{5mm} \\
\hspace{1mm}  Définir la stratégie pour un fichier hugetlbfs ne fonctionnement pas actuellement.
\vspace{5mm} \\
\hspace{1mm}  Les segment de mémoire partagée plus grand que l'espace d'adressage ne peut pas être complètement sous stratégie.
\vspace{5mm} \\
 
\end{flushleft}
\end{document}
