.\" -*- coding: UTF-8 -*- .\" SPDX-License-Identifier: Linux-man-pages-copyleft-var .\" .\" Copyright 2003,2004 Andi Kleen, SuSE Labs. .\" and Copyright 2007 Lee Schermerhorn, Hewlett Packard .\" .\" 2006-02-03, mtk, substantial wording changes and other improvements .\" 2007-08-27, Lee Schermerhorn .\" more precise specification of behavior. .\" .\" FIXME .\" Linux 3.8 added MPOL_MF_LAZY, which needs to be documented. .\" Does it also apply for move_pages()? .\" .\" commit b24f53a0bea38b266d219ee651b22dba727c44ae .\" Author: Lee Schermerhorn .\" Date: Thu Oct 25 14:16:32 2012 +0200 .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH mbind 2 "16 juillet 2023" "Pages du manuel de Linux 6.05.01" .SH NOM mbind \- Définir la politique mémoire pour une zone de mémoire .SH BIBLIOTHÈQUE Bibliothèque de règles NUMA (Non\-Uniform Memory Access) (\fIlibnuma\fP, \fI\-lnuma\fP) .SH SYNOPSIS .nf \fB#include \fP .PP \fBlong mbind(void \fP\fIaddr\fP\fB[.\fP\fIlen\fP\fB], unsigned long \fP\fIlen\fP\fB, int \fP\fImode\fP\fB,\fP \fB const unsigned long \fP\fInodemask\fP\fB[(.\fP\fImaxnode\fP\fB + ULONG_WIDTH \- 1)\fP \fB/ ULONG_WIDTH],\fP \fB unsigned long \fP\fImaxnode\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP .fi .SH DESCRIPTION \fBmbind\fP() configure la politique mémoire NUMA, qui consiste en un mode de politique et zéro ou plusieurs nœuds, pour l'intervalle mémoire démarrant à \fIaddr\fP et s'étalant sur \fIlen\fP octets. La politique mémoire définit à partir de quel nœud la mémoire sera allouée. .PP Si la plage mémoire spécifiée par les paramètres \fIaddr\fP et \fIlen\fP inclut une région «\ anonyme\ » de mémoire (c'est\-à\-dire une région de mémoire créée avec l'appel système \fBmmap\fP(2) et l'attribut \fBMAP_ANONYMOUS\fP) ou un fichier de mémoire projetée, projection créée en utilisant l'appel système \fBmmap\fP(2) et l'attribut \fBMAP_PRIVATE\fP, les pages seront seulement allouées conformément à la politique spécifiée lorsque l'application écrit (enregistre) dans la page. Pour les régions anonymes, un accès initial en lecture utilisera une page partagée du noyau contenant des zéros. Pour un fichier projeté avec \fBMAP_PRIVATE\fP, un accès initial en lecture allouera des pages conformément à la politique du thread qui a fait que cette page a été allouée. Cela peut ne pas être le thread qui a appelé \fBmbind\fP(). .PP La politique spécifiée sera ignorée pour toute projection \fBMAP_SHARED\fP dans la plage mémoire spécifiée. Les pages seront plutôt allouées conformément à la politique de mémoire du thread qui a fait que la page a été allouée. Cela peut ne pas être le thread qui a appelé \fBmbind\fP(). .PP Si la plage de mémoire spécifiée inclut une région de mémoire partagée créée avec l'appel système \fBshmget\fP(2) et attachée avec l'appel système \fBshmat\fP(2), les pages allouées pour la région de mémoire anonyme ou partagée seront allouées conformément à la politique spécifiée, sans se soucier du processus attaché au segment de mémoire partagé qui a provoqué l'allocation. Si toutefois la région de mémoire partagée a été créée avec l'attribut \fBSHM_HUGETLB\fP, les grosses pages seront allouées conformément à la politique spécifiée seulement si l'allocation de pages est provoquée par le processus qui a appelé \fBmbind\fP() pour cette région. .PP Par défaut, \fBmbind\fP() n'a d'effet que sur les nouvelles allocations\ ; s'il y a déjà eu un accès aux pages dans la plage avant de configurer la politique, alors la politique n'a pas d'effet. Ce comportement par défaut peut être écrasé par les attributs \fBMPOL_MF_MOVE\fP et \fBMPOL_MF_MOVE_ALL\fP décrits plus loin. .PP Le paramètre \fImode\fP doit spécifier l'un des attributs parmi \fBMPOL_DEFAULT\fP, \fBMPOL_BIND\fP, \fBMPOL_INTERLEAVE\fP, \fBMPOL_PREFERRED\fP ou \fBMPOL_LOCAL\fP (qui sont décrits en détails ci\-dessous). Tous les modes de politique excepté \fBMPOL_DEFAULT\fP nécessitent que l'appelant spécifie, dans le paramètre \fInodemask\fP, le ou les nœuds auxquels s'appliquent le mode. .PP L'argument \fImode\fP peut aussi contenir des attributs optionnels. Les valeurs possibles sont\ : .TP \fBMPOL_F_STATIC_NODES\fP (depuis Linux 2.6.26) Un paramètre \fInodemask\fP non vide indique des identifiants de nœuds physiques. Linux ne réassocie pas \fInodemask\fP quand le thread change de contexte de cpuset ou après une modification de l'ensemble de nœuds autorisés par le contexte de cpuset en cours du thread. .TP \fBMPOL_F_RELATIVE_NODES\fP (depuis Linux 2.6.26) Un paramètre \fInodemask\fP non vide indique des identifiants de nœuds relatifs à l'ensemble des identifiants de nœuds autorisés par le cpuset en cours du thread. .PP \fInodemask\fP pointe sur un masque de bits qui contient jusqu'à \fImaxnode\fP bits. La taille du masque de bits est arrondie au multiple supérieur de \fIsizeof(unsigned long)\fP, mais le noyau n'utilisera que jusqu'à \fImaxnode\fP bits. Une valeur NULL pour \fInodemask\fP ou une valeur \fImaxnode\fP de zéro indique un ensemble vide de nœuds. Si la valeur de \fImaxnode\fP est zéro, l'argument \fInodemask\fP est ignoré. Quand un \fInodemask\fP est exigé, il doit contenir au moins un nœud de connecté, autorisé dans le contexte de cpuset en cours du thread appelant (à moins que le drapeau \fBMPOL_F_STATIC_NODES\fP ne soit fourni) et doit contenir de la mémoire. .PP Le paramètre \fImode\fP doit contenir une des valeurs suivantes\ : .TP \fBMPOL_DEFAULT\fP Ce mode demande à ce que toute politique n'étant pas une politique par défaut soit retirée, ce qui restaure le comportement par défaut. Lorsqu'il est appliqué à une plage mémoire à l’aide de \fBmbind\fP(), cela signifie d'utiliser la politique mémoire du thread qui peut être définie avec \fBset_mempolicy\fP(2). Si le mode de la politique de mémoire du thread est également \fBMPOL_DEFAULT\fP, la politique par défaut du système sera utilisée. La politique par défaut du système alloue des pages sur le nœud du processeur qui a déclenché l'allocation. Pour \fBMPOL_DEFAULT\fP, les paramètres \fInodemask\fP et \fImaxnode\fP doivent spécifier l'ensemble vide de nœuds. .TP \fBMPOL_BIND\fP .\" commit 19770b32609b6bf97a3dece2529089494cbfc549 Ce mode spécifie une politique stricte qui restreint l'allocation mémoire aux nœuds indiqués dans \fInodemask\fP. Si \fInodemask\fP indique plus d'un nœud, les allocations de pages se feront à partir du nœud ayant assez d'espace libre et étant le plus proche de celui où elles ont lieu. Il n'y aura pas d'allocation de pages à partir de nœuds non indiqués dans \fInodemask\fP (avant Linux 2.6.26, les allocations de pages se faisaient d'abord à partir du nœud dont l'identifiant numérique était le plus petit jusqu'à ce que ce nœud ne contienne plus de mémoire libre. Les allocations se faisaient ensuite à partir du nœud dont l'identifiant était le prochain plus grand spécifié dans \fInodemask\fP et ainsi de suite jusqu'à ce que plus un seul nœud indiqué ne contienne de mémoire libre). .TP \fBMPOL_INTERLEAVE\fP Ce mode spécifie que les allocations de pages sont entrelacées à travers l'ensemble de nœuds spécifiés dans \fInodemask\fP. Cela optimise la bande passante au lieu de la latence en étalant les pages et l'accès mémoire à ces pages à travers plusieurs nœuds. Pour être efficace, la zone mémoire doit être relativement grande, au moins 1\ Mo ou plus avec un modèle d'accès assez uniforme. Les accès à une unique page de la zone seront toujours limités à la capacité mémoire d'un seul nœud. .TP \fBMPOL_PREFERRED\fP Ce mode définit le nœud préféré pour les allocations. Le noyau essaiera d'abord d'allouer sur ce nœud, avant de ce rabattre sur d'autres nœuds si celui\-ci n'a plus assez de mémoire libre. Si \fInodemask\fP précise plus d'un identifiant de nœud, le premier nœud du masque sera choisi comme le nœud préféré. Si les paramètres \fInodemask\fP et \fImaxnode\fP indiquent un ensemble vide, la mémoire est allouée sur le nœud du processeur qui a déclenché l'allocation. .TP \fBMPOL_LOCAL\fP (depuis Linux 3.8) .\" commit 479e2802d09f1e18a97262c4c6f8f17ae5884bd8 .\" commit f2a07f40dbc603c15f8b06e6ec7f768af67b424f Ce mode indique «\ allocation locale\ »\ ; la mémoire est allouée sur le nœud du processeur qui a déclenché l'allocation (le «\ nœud local\ »). Les paramètres \fInodemask\fP et \fImaxnode\fP doivent indiquer un ensemble vide. Si le «\ nœud local\ » possède peu de mémoire libre, le noyau essaiera d'allouer de la mémoire à partir d'autres nœuds. Le noyau allouera de la mémoire du «\ nœud local\ » à chaque fois qu'il y en aura de disponible. Si le «\ nœud local\ » n'est pas autorisé par le contexte de cpuset actuel du thread, le noyau essaiera d'allouer de la mémoire à partir d'autres nœuds. Le noyau allouera de la mémoire à partir du «\ nœud local\ » à chaque fois qu'il y sera autorisé par le contexte de cpuset actuel du thread. Au contraire, \fBMPOL_DEFAULT\fP ramène à la politique mémoire du thread (qui peut être définie par \fBset_mempolicy\fP(2))\ ; il peut s'agir d'une autre politique que l'«\ allocation locale\ ». .PP .\" According to the kernel code, the following is not true .\" --Lee Schermerhorn .\" In Linux 2.6.16 or later the kernel will also try to move pages .\" to the requested node with this flag. Si l'option \fBMPOL_MF_STRICT\fP est passée dans \fIflags\fP et si \fImode\fP n'est pas \fBMPOL_DEFAULT\fP, l'appel échoue avec l'erreur \fBEIO\fP si les pages de la plage mémoire ne suivent pas la politique. .PP Si \fBMPOL_MF_MOVE\fP est passé dans \fIflags\fP, le noyau essaiera de déplacer toutes les pages existantes dans la plage de mémoire pour qu'elles suivent la politique. Les pages partagées avec d'autres processus ne sont pas déplacées. Si \fBMPOL_MF_STRICT\fP est également indiqué, l'appel échouera avec l'erreur \fBEIO\fP si certaines pages ne peuvent pas être déplacées. Si la politique \fBMPOL_INTERLEAVE\fP a été spécifiée, les pages résidant déjà sur les nœuds spécifiés ne sont pas déplacés de sorte qu'ils sont entrelacés. .PP .\" --------------------------------------------------------------- Si \fBMPOL_MF_MOVE_ALL\fP est indiqué dans \fIflags\fP, alors le noyau essaiera de déplacer toutes les pages existantes dans la plage mémoire, même si d'autres processus les utilisent. Le thread appelant doit être privilégié (avoir la capacité \fBCAP_SYS_NICE\fP) pour utiliser cette option. Si \fBMPOL_MF_STRICT\fP est également utilisé, l'appel renverra l'erreur \fBEIO\fP si certaines pages ne peuvent pas être déplacées. Si la politique \fBMPOL_INTERLEAVE\fP a été spécifiée, les pages résidant déjà sur les nœuds spécifiés ne sont pas déplacés de sorte qu'ils sont entrelacés. .SH "VALEUR RENVOYÉE" .\" --------------------------------------------------------------- S'il réussit, \fBmbind\fP() renvoie \fB0\fP. En cas d'erreur, il renvoie \fB\-1\fP et remplit \fIerrno\fP avec la valeur d'erreur. .SH ERREURS .\" I think I got all of the error returns. --Lee Schermerhorn .TP \fBEFAULT\fP Une partie ou toute la plage mémoire spécifiée par \fInodemask\fP et \fImaxnode\fP pointe en dehors de votre espace d'adressage accessible. Ou il y a eu un trou non projeté dans la plage de mémoire spécifiée avec \fIaddr\fP et \fIlen\fP. .TP \fBEINVAL\fP .\" As at 2.6.23, this limit is "a page worth of bits", e.g., .\" 8 * 4096 bits, assuming a 4kB page size. Une valeur non valable a été spécifiée pour \fIflags\fP ou \fImode\fP\ ; ou \fIaddr + len\fP est plus petite que \fIaddr\fP\ ; ou \fIaddr\fP n'est pas un multiple de la taille de page système. Ou, \fImode\fP est \fBMPOL_DEFAULT\fP et \fInodemask\fP spécifiait un ensemble non vide\ ; ou \fImode\fP est \fBMPOL_BIND\fP ou \fBMPOL_INTERLEAVE\fP et \fInodemask\fP est vide. Ou, \fImaxnode\fP dépasse une limite imposée par le noyau. Ou, \fInodemask\fP spécifie un ou plusieurs identifiants de nœud qui sont plus grands que l'identifiant maximal de nœud pris en charge. Ou aucun des identifiants de nœuds spécifiés par \fInodemask\fP ne sont disponibles et autorisés dans le contexte de cpuset du thread en cours, ou aucun des nœuds spécifiés ne contient de mémoire. Ou le paramètre \fImode\fP indiquait à la fois \fBMPOL_F_STATIC_NODES\fP et \fBMPOL_F_RELATIVE_NODES\fP. .TP \fBEIO\fP \fBMPOL_MF_STRICT\fP a été utilisé et une page existante était déjà sur un nœud ne suivant pas la politique\ ; ou soit \fBMPOL_MF_MOVE\fP soit \fBMPOL_MF_MOVE_ALL\fP a été spécifié et le noyau n'a pas été capable de déplacer toutes les pages existantes dans la plage. .TP \fBENOMEM\fP La mémoire disponible du noyau n'était pas suffisante. .TP \fBEPERM\fP .\" --------------------------------------------------------------- Le paramètre \fIflags\fP incluait l'attribut \fBMPOL_MF_MOVE_ALL\fP et l'appelant n'avait pas le privilège \fBCAP_SYS_NICE\fP. .SH STANDARDS Linux. .SH HISTORIQUE Linux 2.6.7. .PP La gestion de politique pour les pages immenses a été ajoutée dans Linux\ 2.6.16. Pour que la politique d'entrelacement soit efficace sur les projections de pages immenses, la taille de la zone mémoire doit être au moins de dizaines de mégaoctets. .PP .\" commit dcf1763546d76c372f3136c8d6b2b6e77f140cf0 Avant Linux\ 5.7. \fBMPOL_MF_STRICT\fP était ignoré sur les projections de pages immenses. .PP \fBMPOL_MF_MOVE\fP et \fBMPOL_MF_MOVE_ALL\fP ne sont disponibles qu'à partir de Linux\ 2.6.16. .SH NOTES Pour des informations sur la prise en charge des bibliothèques, consultez \fBnuma\fP(7). .PP La politique NUMA n'est pas gérée sur les plages de fichiers projetés en mémoire qui ont été projetées avec l'attribut \fBMAP_SHARED\fP. .PP Le mode \fBMPOL_DEFAULT\fP peut avoir des effets différents sur \fBmbind\fP() et sur \fBset_mempolicy\fP(2). Lorsque \fBMPOL_DEFAULT\fP est spécifié pour \fBset_mempolicy\fP(2), la politique mémoire du thread est remise à la politique par défaut du système ou l'allocation locale. Lorsque \fBMPOL_DEFAULT\fP est spécifié pour une plage de mémoire utilisant \fBmbind\fP(), toutes les pages allouées par la suite pour cette plage utiliseront la politique du thread telle qu'elle a été définie par \fBset_mempolicy\fP(2). Cela supprime de manière effective la politique explicite de la plage spécifiée, ce qui peut éventuellement remettre une politique autre que celle par défaut. Pour choisir explicitement une «\ allocation locale\ » pour une plage mémoire, spécifiez \fImode\fP de \fBMPOL_LOCAL\fP ou \fBMPOL_PREFERRED\fP avec un ensemble vide de nœuds. Cette méthode fonctionnera aussi avec \fBset_mempolicy\fP(2). .SH "VOIR AUSSI" \fBget_mempolicy\fP(2), \fBgetcpu\fP(2), \fBmmap\fP(2), \fBset_mempolicy\fP(2), \fBshmat\fP(2), \fBshmget\fP(2), \fBnuma\fP(3), \fBcpuset\fP(7), \fBnuma\fP(7), \fBnumactl\fP(8) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .