.\" -*- coding: UTF-8 -*- .\" Copyright 2003-2004, Andi Kleen .\" Copyright 2003-2004, SuSE GmbH .\" Copyright 2007, Lee Schermerhorn .\" Copyright 2007, Hewlett-Packard Development Company, L.P. .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft-var .\" .\" 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 "8 février 2026" "Pages du manuel de Linux 6.18" .SH NOM mbind \- Définir la politique mémoire pour une zone de mémoire .SH BIBLIOTHÈQUE NUMA (Non\-Uniform Memory Access) policy library (\fIlibnuma\fP,\ \fI\-lnuma\fP) .SH SYNOPSIS .nf \fB#include \fP .P \fBlong mbind(\fPunsigned long size, unsigned long maxnode; \fB void \fP\fIaddr\fP\fB[\fP\fIsize\fP\fB], unsigned long \fP\fIsize\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() sets the NUMA memory policy, which consists of a policy mode and zero or more nodes, for the memory range starting with \fIaddr\fP and continuing for \fIsize\fP bytes. The memory policy defines from which node memory is allocated. .P If the memory range specified by the \fIaddr\fP and \fIsize\fP arguments includes an "anonymous" region of memory\[em]that is a region of memory created using the \fBmmap\fP(2) system call with the \fBMAP_ANONYMOUS\fP\[em]or a memory\-mapped file, mapped using the \fBmmap\fP(2) system call with the \fBMAP_PRIVATE\fP flag, pages will be allocated only according to the specified policy when the application writes (stores) to the page. For anonymous regions, an initial read access will use a shared page in the kernel containing all zeros. For a file mapped with \fBMAP_PRIVATE\fP, an initial read access will allocate pages according to the memory policy of the thread that causes the page to be allocated. This may not be the thread that called \fBmbind\fP(). .P 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(). .P 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. .P 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. .P The \fImode\fP argument must specify one of \fBMPOL_DEFAULT\fP, \fBMPOL_BIND\fP, \fBMPOL_INTERLEAVE\fP, \fBMPOL_WEIGHTED_INTERLEAVE\fP, \fBMPOL_PREFERRED\fP, \fBMPOL_PREFERRED_MANY\fP, or \fBMPOL_LOCAL\fP (which are described in detail below). All policy modes except \fBMPOL_DEFAULT\fP require the caller to specify the node or nodes to which the mode applies, via the \fInodemask\fP argument. .P L'argument \fImode\fP peut aussi contenir des attributs optionnels. Les valeurs possibles sont : .TP \fBMPOL_F_NUMA_BALANCING\fP (depuis Linux 5.15) .\" commit bda420b985054a3badafef23807c4b4fa38a3dff .\" commit 6d2aec9e123bb9c49cb5c7fc654f25f81e688e8c Quand \fImode\fP est \fBMPOL_BIND\fP, activer l’équilibrage NUMA du noyau pour la tâche s’il est géré par le noyau. Si l'attribut n'est pas pris en charge par le noyau ou est utilisé avec un autre \fImode\fP que \fBMPOL_BIND\fP, \fB\-1\fP est renvoyé et \fIerrno\fP est positionné sur \fBEINVAL\fP. .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. .P \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. .P 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_WEIGHTED_INTERLEAVE\fP (depuis Linux 6.9) .\" commit fa3bea4e1f8202d787709b7e3654eb0a99aed758 Ce mode entrelace les affectations de pages à travers les nœuds indiqués dans \fInodemask\fP selon leur poids dans \fI/sys/kernel/mm/mempolicy/weighted_interleave\fP. Par exemple, si les bits 0, 2 et 5 sont positionnés dans \fInodemask\fP, et si le contenu de \fI/sys/kernel/mm/mempolicy/weighted_interleave/node0\fP, de \fI/sys/\fP.\|.\|.\fI/node2\fP, and \fI/sys/\fP.\|.\|.\fI/node5\fP sont respectivement de 4, 7 et 9, les pages de cette région seront affectées aux nœuds 0, 2 et 5 selon un ratio de 4:7:9. .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_PREFERRED_MANY\fP (since Linux 5.15) .\" commit b27abaccf8e8b012f126da0c2a1ab32723ec8b9f Specifies a set of nodes for allocation; see \fBset_mempolicy\fP(2). .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 ». .P .\" 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. .P 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. .P .\" --------------------------------------------------------------- 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 Part or all of the memory range specified by \fInodemask\fP and \fImaxnode\fP points outside your accessible address space. Or, there was an unmapped hole in the specified memory range specified by \fIaddr\fP and \fIsize\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. An invalid value was specified for \fIflags\fP or \fImode\fP; or \fIaddr + size\fP was less than \fIaddr\fP; or \fIaddr\fP is not a multiple of the system page size. Or, \fImode\fP is \fBMPOL_DEFAULT\fP and \fInodemask\fP specified a nonempty set; or \fImode\fP is \fBMPOL_BIND\fP or \fBMPOL_INTERLEAVE\fP and \fInodemask\fP is empty. Or, \fImaxnode\fP exceeds a kernel\-imposed limit. Or, \fInodemask\fP specifies one or more node IDs that are greater than the maximum supported node ID. Or, none of the node IDs specified by \fInodemask\fP are on\-line and allowed by the thread's current cpuset context, or none of the specified nodes contain memory. Or, the \fImode\fP argument specified both \fBMPOL_F_STATIC_NODES\fP and \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 NORMES Linux. .SH HISTORIQUE Linux 2.6.7. .P 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. .P .\" commit dcf1763546d76c372f3136c8d6b2b6e77f140cf0 Avant Linux 5.7. \fBMPOL_MF_STRICT\fP était ignoré sur les projections de pages immenses. .P \fBMPOL_MF_MOVE\fP et \fBMPOL_MF_MOVE_ALL\fP ne sont disponibles qu'à partir de Linux 2.6.16. .SH NOTES Consultez \fBnuma\fP(7) pour des informations sur la prise en charge par des bibliothèques. .P 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. .P 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 .