madvise(2) System Calls Manual madvise(2) NOM madvise - Configurer l'utilisation de la memoire BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int madvise(size_t size; void addr[size], size_t size, int advice); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : madvise() : Depuis la glibc 2.19 : _DEFAULT_SOURCE Jusqu'a la glibc 2.19 incluse : _BSD_SOURCE DESCRIPTION The madvise() system call is used to give advice or directions to the kernel about the address range beginning at address addr and with size size. madvise() only operates on whole pages, therefore addr must be page-aligned. The value of size is rounded up to a multiple of page size. In most cases, the goal of such advice is to improve system or application performance. Initialement, l'appel systeme gerait un ensemble de valeurs de advice << conventionnelles >>, disponibles aussi sur d'autres implementations (notez toutefois que madvise() n'est pas specifie dans POSIX). Par consequent, un certain nombre de valeurs de advice specifiques a Linux ont ete ajoutees. Valeurs de conseil conventionnelles Les valeurs de advice (conseil) listees ci-dessous permettent a une application d'indiquer au noyau l'utilisation qu'elle compte faire de certaines zones de memoire partagee ou projetee de facon a ce que le noyau puisse choisir les techniques de lecture anticipee et de mise en cache appropriees. Ces valeurs advice ne modifient pas la semantique de l'application (sauf dans le cas de MADV_DONTNEED), mais peuvent avoir un impact sur ses performances. Toutes les valeurs de advice listees ici ont un pendant dans la fonction posix_madvise(3) specifiee par POSIX et elles ont la meme signification, sauf MADV_DONTNEED. Le conseil est specifie par le parametre advice qui peut etre un des suivants : MADV_NORMAL Pas de traitement particulier. Il s'agit du comportement par defaut. MADV_RANDOM Prevoir des references de page dans un ordre aleatoire. (Ainsi, la lecture anticipee sera moins utile qu'elle ne l'est en general.) MADV_SEQUENTIAL Prevoir des references de page dans un ordre sequentiel. (Ainsi, les pages d'une plage donnee peuvent etre systematiquement lues par anticipation, et peuvent etre liberees rapidement apres avoir ete accedees.) MADV_WILLNEED Prevoir un acces dans un futur proche. (Ainsi, lire quelques pages de facon anticipee peut etre une bonne idee.) MADV_DONTNEED Ne pas s'attendre a un acces dans un futur proche (quant au temps, l'application est finie avec la plage donnee, pour que le noyau puisse liberer des ressources qui lui sont associees). Apres une operation MADV_DONTNEED reussie, la semantique de l'acces en memoire dans la region indiquee est modifiee : les acces suivants des pages reussiront, mais provoqueront un nouveau remplissage de la memoire soit avec le contenu a jour du fichier transpose sous-jacent (pour les mappages de fichiers partages, ceux anonymes partages et les techniques basees sur shmem telles que les segments de memoire partagee de System V), soit avec les pages remplies de zeros a la demande pour les tableaux prives anonymes. Remarquez qu'appliquee a des mappages partages, MADV_DONTNEED pourrait ne pas aboutir a une liberation immediate des pages dans la plage. Le noyau est libre de retarder la liberation des pages jusqu'au bon moment. La memoire residente (resident set size, ou RSS) du processus appelant sera par contre immediatement reduite. MADV_DONTNEED ne peut pas s'appliquer a des pages verrouillees ou a des pages VM_PFNMAP (les pages marquees par l'attribut VM_PFNMAP interne au noyau sont des regions de memoire speciales non gerees par le sous-systeme de memoire virtuelle. De telles pages sont generalement creees par des pilotes de peripherique transposant les pages dans l'espace utilisateur). Support for Huge TLB pages was added in Linux 5.18. Addresses within a mapping backed by Huge TLB pages must be aligned to the underlying Huge TLB page size, and the range size is rounded up to a multiple of the underlying Huge TLB page size. Valeurs de conseil specifiques a Linux Les valeurs advice suivantes specifiques a Linux n'ont pas d'equivalent dans le posix_madvise(3) specifie par POSIX et peuvent en avoir ou pas dans l'interface madvise() disponible sur d'autres implementations. Notez que certaines de ces operations modifient la semantique des acces en memoire. MADV_REMOVE (depuis Linux 2.6.16) Liberer jusqu'a une plage donnee de pages et son stockage de repli associe. Cela revient a faire un trou dans la plage d'octets correspondante du stockage de secours (voir fallocate(2)). Les acces suivants a la plage d'adresses indiquee verront des donnees de valeur zero. La plage d'adresses indiquee doit etre transposee, partagee et accessible en ecriture. Cet attribut ne peut pas etre applique a des pages verrouillees ou a des pages VM_PFNMAP. Dans l'implementation initiale, seul tmpfs(5) prenait en charge MADV_REMOVE ; mais depuis Linux 3.5, tous les systemes de fichiers qui prennent en charge le mode FALLOC_FL_PUNCH_HOLE de fallocate(2) gerent egalement MADV_REMOVE. Les systemes de fichiers qui ne gerent pas MADV_REMOVE echouent avec l'erreur EOPNOTSUPP. Support for the Huge TLB filesystem was added in Linux 4.3. MADV_DONTFORK (depuis Linux 2.6.16) Ne pas rendre les pages de cette plage disponibles a l'enfant apres un fork(2). Cela est utile pour empecher la semantique de copie a l'ecriture de changer l'emplacement physique d'une page si le parent y ecrit apres un fork(2) (de tels deplacements posent des problemes si le materiel accede directement a la page (DMA)). MADV_DOFORK (depuis Linux 2.6.16) Annuler l'effet de MADV_DONTFORK et restaurer le comportement par defaut, ou un mappage est recupere a l'aide de fork(2). MADV_HWPOISON (depuis Linux 2.6.32) Poison the pages in the range specified by addr and size and handle subsequent references to those pages like a hardware memory corruption. This operation is available only for privileged (CAP_SYS_ADMIN) processes. This operation may result in the calling process receiving a SIGBUS and the page being unmapped. Cette fonctionnalite est concue pour tester du code de gestion des erreurs de memoire ; elle n'est disponible que si le noyau a ete configure avec CONFIG_MEMORY_FAILURE. MADV_MERGEABLE (depuis Linux 2.6.32) Enable Kernel Samepage Merging (KSM) for the pages in the range specified by addr and size. The kernel regularly scans those areas of user memory that have been marked as mergeable, looking for pages with identical content. These are replaced by a single write-protected page (which is automatically copied if a process later wants to update the content of the page). KSM merges only private anonymous pages (see mmap(2)). La fonctionnalite KSM est prevue pour des applications qui generent de nombreuses instances avec les memes donnees (comme les systemes de virtualisation tels que KVM). Cela consomme beaucoup de puissance de calcul ; utilisez-la prudemment. Voir le fichier Documentation/admin-guide/mm/ksm.rst des sources du noyau Linux pour plus de details. Les operations MADV_MERGEABLE et MADV_UNMERGEABLE ne sont disponibles que si le noyau a ete configure avec CONFIG_KSM. MADV_UNMERGEABLE (depuis Linux 2.6.32) Undo the effect of an earlier MADV_MERGEABLE operation on the specified address range; KSM unmerges whatever pages it had merged in the address range specified by addr and size. MADV_SOFT_OFFLINE (depuis Linux 2.6.33) Soft offline the pages in the range specified by addr and size. The memory of each page in the specified range is preserved (i.e., when next accessed, the same content will be visible, but in a new physical page frame), and the original page is offlined (i.e., no longer used, and taken out of normal memory management). The effect of the MADV_SOFT_OFFLINE operation is invisible to (i.e., does not change the semantics of) the calling process. Cette fonctionnalite est concue pour tester du code de gestion des erreurs de memoire ; elle n'est disponible que si le noyau a ete configure avec CONFIG_MEMORY_FAILURE. MADV_HUGEPAGE (depuis Linux 2.6.38) Enable Transparent Huge Pages (THP) for pages in the range specified by addr and size. The kernel will regularly scan the areas marked as huge page candidates to replace them with huge pages. The kernel will also allocate huge pages directly when the region is naturally aligned to the huge page size (see posix_memalign(2)). Cette fonctionnalite est d'abord destinee aux applications qui utilisent tout a la fois de grands mappages, beaucoup de donnees et de grandes regions d'acces a la memoire (comme les systemes de virtualisation tels que QEMU). Elle peut facilement consommer beaucoup de memoire (par exemple un tableau de 2 Mo qui n'accede qu'a un octet depensera 2 Mo de memoire et non une page de 4 Ko). Voir le fichier Documentation/admin-guide/mm/transhuge.rst des sources du noyau Linux pour plus de details. La plupart des configurations de noyaux classiques fournissent un comportement a la maniere de MADV_HUGEPAGE par defaut, et ainsi MADV_HUGEPAGE n'est normalement pas necessaire. Il est le plus souvent utile pour les systemes embarques ou un comportement de type MADV_HUGEPAGE peut ne pas etre active par defaut dans le noyau. Sur de tels systemes, cet attribut peut etre utilise pour activer THP de maniere selective. A chaque fois que MADV_HUGEPAGE est utilise, il devrait toujours l'etre dans des regions de la memoire ou le developpeur sait a l'avance que le motif d'acces ne risquera pas d'augmenter l'empreinte de l'application quand les pages immenses transparentes sont actives. Depuis Linux 5.4, une analyse automatique des zones eligibles et des remplacements par des pages immenses s'effectue sur les pages anonymes et privees (voir mmap(2)), des pages shmem et des pages mises en cache. Pour tous les types de memoire, la memoire ne peut etre remplacee que par des pages immenses sur des limites alignees sur les pages immenses. Pour la memoire projetee sur un fichier (y compris tmpfs (voir tmpfs(2)), le mappage doit naturellement etre aussi aligne sur une page immense dans le fichier. De plus, pour les fichiers sauvegardes, la memoire non tmpfs, le fichier ne doit pas etre accessible en ecriture et le tableau doit etre executable. The VMA must not be marked VM_NOHUGEPAGE, VM_HUGETLB, VM_IO, VM_DONTEXPAND, VM_MIXEDMAP, or VM_PFNMAP, nor can it be stack memory or backed by a DAX-enabled device (unless the DAX device is hot-plugged as System RAM). The process can have PR_SET_THP_DISABLE set only if PR_THP_DISABLE_EXCEPT_ADVISED is set (see prctl(2)). Les operations MADV_HUGEPAGE, MADV_NOHUGEPAGE et MADV_COLLAPSE ne sont disponibles que si le noyau a ete configure avec CONFIG_TRANSPARENT_HUGEPAGE et la memoire pour les fichiers/shmem est seulement prise en charge que si le noyau a ete configure avec CONFIG_READ_ONLY_THP_FOR_FS. MADV_NOHUGEPAGE (depuis Linux 2.6.38) Ensures that memory in the address range specified by addr and size will not be backed by transparent hugepages. MADV_COLLAPSE (depuis Linux 6.1) Effectuer une suppression synchronisee autant que possible avec les pages natives projetees par la plage de memoire en Transparent Huge Pages (THP). MADV_COLLAPSE agit sur l'etat actuel de la memoire du processus appelant et ne fait aucun changement permanent ou ne garantit rien sur la maniere dont les pages seront projetees, construites ou defaillantes dans le futur. /MADV_COLLAPSE gere les pages anonymes privees (voir mmap(2)), les pages shmem et les pages mises en cache. Voir MADV_HUGEPAGE pour des informations generales sur les exigences de memoire de THP. Si la plage fournie couvre plusieurs VMA, la semantique de la suppression dans chaque VMA est independante des autres. Si la suppression d'une region dimensionnee ou alignee sur une page immense donnee echoue, l'operation peut continuer a essayer de supprimer le reste de la memoire indiquee. MADV_COLLAPSE alignera automatiquement la plage fournie sur la page immense. Toutes les pages non residentes faisant partie de la plage seront d'abord echangees ou mises en erreur, avant d'etre copiees sur une page immense fraichement allouee. Si les pages natives representent la meme page immense projetee en PTE et si elles sont alignees correctement, l'allocation d'une nouvelle page immense peut etre evitee et la suppression peut se faire directement. Les pages non projetees verront leurs donnees initialisees directement a 0 dans la nouvelle page immense. Toutefois, pour chaque region eligible dimensionnee/alignee sur une page immense a supprimer, au moins une page doit etre recuperee par la memoire physique. MADV_COLLAPSE est independant du parametrage du sysfs (voir sysfs(5)) dans /sys/kernel/mm/transparent_hugepage, tant pour determiner l'eligibilite THP que la semantique d'allocation. Voir le fichier Documentation/admin-guide/mm/transhuge.rst des sources du noyau Linux pour plus d'informations. MADV_COLLAPSE ignore egalement le montage tmpfs huge= lorsqu'il agit sur des fichiers tmpfs. L'allocation de nouvelles pages immenses peut entamer une liberation/compactage directs independamment des attributs de la VMA (encore que VM_NOHUGEPAGE est toujours respecte). Lorsque le systeme a plusieurs noeuds NUMA, la page immense sera allouee a partir du noeud contenant les pages les plus natives. Si toutes les regions dimensionnees ou alignees sur la page immense et incluses dans la plage fournie ont ete supprimees avec succes ou si les THP ont deja ete projetees PMD, cette operation se terminera avec succes. Remarquez que cela ne garantit rien quant aux autres projections possibles de la memoire. Si plusieurs zones dimensionnees ou alignees sur une page immense echouent a etre supprimees, seul le code d'erreur le plus recent sera positionne dans errno. MADV_DONTDUMP (depuis Linux 3.4) Exclude from a core dump those pages in the range specified by addr and size. This is useful in applications that have large areas of memory that are known not to be useful in a core dump. The effect of MADV_DONTDUMP takes precedence over the bit mask that is set via the /proc/pid/coredump_filter file (see core(5)). MADV_DODUMP (depuis Linux 3.4) Annuler l'effet d'un MADV_DONTDUMP anterieur. MADV_FREE (depuis Linux 4.5) The application no longer requires the pages in the range specified by addr and size. The kernel can thus free these pages, but the freeing could be delayed until memory pressure occurs. For each of the pages that has been marked to be freed but has not yet been freed, the free operation will be canceled if the caller writes into the page. After a successful MADV_FREE operation, any stale data (i.e., dirty, unwritten pages) will be lost when the kernel frees the pages. However, subsequent writes to pages in the range will succeed and then kernel cannot free those dirtied pages, so that the caller can always see just written data. If there is no subsequent write, the kernel can free the pages at any time. Once pages in the range have been freed, the caller will see zero-fill-on-demand pages upon subsequent page references. L'operation MADV_FREE ne peut s'appliquer qu'a des pages anonymes privees (voir mmap(2)). Avant Linux 4.12, avant de liberer des pages sur un systeme sans espace d'echange, les pages dans la plage donnee etaient liberees instantanement independamment de la pression sur la memoire. MADV_WIPEONFORK (depuis Linux 4.14 Afficher le processus enfant avec une memoire pleine de zeros dans cette plage apres un fork(2). Cela est utile quand on replique (fork) un serveur pour s'assurer que les donnees sensibles au processus (par exemple les graines PRNG, les codes de chiffrement et ainsi de suite) ne soient pas capturees par les processus enfants. L'operation MADV_WIPEONFORK ne peut s'appliquer qu'aux pages anonymes privees (voir mmap(2)). Dans l'enfant cree par fork(2), le parametre MADV_WIPEONFORK reste en place sur la plage d'adresses indiquee. Ce parametre est vide lors d'un execve(2). MADV_KEEPONFORK (depuis Linux 4.14) Annuler l'effet d'un MADV_WIPEONFORK anterieur. MADV_COLD (depuis Linux 5.4) Desactiver une plage de pages donnee. Cela en fera des cibles de liberation plus probables en cas de pression sur la memoire. Il s'agit d'une operation non destructive. Ce conseil pourrait etre ignore pour certaines pages de la plage s'il n'est pas applicable. MADV_PAGEOUT (depuis Linux 5.4) Liberer une plage de pages donnee. Cela est utilise pour liberer de la memoire occupee par ces pages. Si une page est anonyme, elle peut etre echangee. Si une page est mise en cache et sale, elle sera reecrite dans le stockage de repli. Le conseil pourrait etre ignore pour certaines pages de la plage s'il n'est pas applicable. MADV_POPULATE_READ (depuis Linux 5.14) Peupler (prefault) les tables de pages lisibles, mettant en erreur toutes les pages de la plage comme si on la lisait manuellement a partir de chaque page ; par contre eviter l'acces reel en memoire qui aurait ete fait apres la gestion des erreurs. Contrairement a MAP_POPULATE, MADV_POPULATE_READ ne cache pas les erreurs, il peut etre applique a tout ou partie des mappages existants et il peuplera (prefault) toujours les tables de pages lisibles. Un exemple d'utilisation est de peupler un tableau de fichier, en lisant tout le contenu du fichier a partir du disque ; mais les pages ne seront pas salies, donc il ne faudra pas les reecrire sur le disque lorsqu'on les sortira de la memoire. Selon le mappage sous-jacent, projeter la page de zeros partagee, pre-allouer la memoire ou lire le fichier sous-jacent ; les fichiers contenant des trous pourraient ou pas pre-allouer des blocs. Si le peuplement echoue, aucun signal SIGBUS n'est genere mais une erreur est renvoyee. Si MADV_POPULATE_READ reussit, tous les tables de pages ont ete peuplees (prefaulted) et lisibles une fois. Si MADV_POPULATE_READ echoue, certaines tables de page pourraient avoir ete peuplees. MADV_POPULATE_READ ne peut pas etre applique aux mappages sans droit de lecture ni projections speciales, par exemple celles marquees par des drapeaux tels que VM_PFNMAP ou VM_IO, ou a des regions de memoire secretes creees par en utilisant memfd_secret(2). Remarquez qu'avec MADV_POPULATE_READ, le processus peut etre tue n'importe quand si le systeme n'a plus assez de memoire. MADV_POPULATE_WRITE (depuis Linux 5.14) Peupler (prefault) les tables de pages lisibles, mettant en erreur toutes les pages de la plage comme si on ecrivait manuellement dans chaque page ; par contre eviter l'acces reel en memoire qui aurait ete fait apres la gestion des erreurs. Contrairement a MAP_POPULATE, MADV_POPULATE_WRITE ne cache pas les erreurs, il peut etre applique a tout ou partie des mappages existants et il peuplera (prefault) toujours les tables de pages accessibles en ecriture. Un exemple d'utilisation est de pre-allouer de la memoire et d'interrompre toute copie sur ecriture. Selon le mappage sous-jacent, projeter la page de zeros partagee, pre-allouer la memoire ou lire le fichier sous-jacent ; les fichiers contenant des trous pre-alloueront des blocs. Si le peuplement echoue, aucun signal SIGBUS n'est genere mais une erreur est renvoyee. Si MADV_POPULATE_WRITE reussit, tous les tables de pages ont ete peuples (prefaulted) et ecrits une fois. Si MADV_POPULATE_WRITE echoue, certaines tables de page pourraient avoir ete peuplees. MADV_POPULATE_WRITE ne peut pas etre applique aux mappages sans droit d'ecriture ni projections speciales, par exemple celles marquees par des drapeaux tels que VM_PFNMAP ou VM_IO, ou a des regions de memoire secretes creees par en utilisant memfd_secret(2). Remarquez qu'avec MADV_POPULATE_WRITE, le processus peut etre tue n'importe quand si le systeme n'a plus assez de memoire. MADV_GUARD_INSTALL (since Linux 6.13) Install a lightweight guard region into the range specified by addr and size, causing any read or write in the range to result in a SIGSEGV signal being raised. If the region maps memory pages those mappings will be replaced as part of the operation, though if MADV_GUARD_INSTALL is applied to regions containing pre-existing lightweight guard regions, they are left in place. Prior to Linux 6.15, this operation was supported only for writable anonymous private mappings. Since Linux 6.15, both anonymous and file-backed mappings are supported, including read-only mappings. The mapping must not be mlock'd, map hugetlb ranges, nor contain special mappings. For example, mappings marked with kernel-internal flags such as VM_PFNMAP or VM_IO, or secret memory regions created using memfd_secret(2). An EINVAL error is returned if it is attempted on any other kind of mapping. This operation is more efficient than mapping a new region of memory PROT_NONE, as it does not require the establishment of new mappings. Instead, regions of an existing mapping simply have their page tables manipulated to establish the desired behavior. No additional memory is used. Lightweight guard regions remain on fork (except for any parts which have had MADV_WIPEONFORK applied to them), and are not removed by MADV_DONTNEED, MADV_FREE, MADV_PAGEOUT, or MADV_COLD. Attempting to mlock(2) lightweight guard regions will fail, as will MADV_POPULATE_READ or MADV_POPULATE_WRITE. If the mapping has its attributes changed, or is split or partially unmapped, any existing guard regions remain in place (except if they are unmapped). If a mapping is moved using mremap(2), lightweight guard regions are moved with it. Lightweight guard regions are removed when unmapped, on process teardown, or when the MADV_GUARD_REMOVE operation is applied to them. MADV_GUARD_REMOVE (since Linux 6.13) Remove any lightweight guard regions which exist in the range specified by addr and size. All mappings in the range other than lightweight guard regions are left in place. The operation is supported on those mappings permitted by MADV_GUARD_INSTALL in addition to mlock()'d mappings, returning an EINVAL error otherwise. When lightweight guard regions are removed, they act as empty regions of the containing mapping. Therefore, anonymous private mappings become zero-fill-on-demand pages, and file-backed mappings are repopulated with the memory contents from the up-to-date contents of the underlying mapped file. If any transparent huge pages are encountered in the operation, they are left in place. VALEUR RENVOYEE En cas de succes madvise() renvoie zero. En cas d'erreur, il renvoie -1 et errno est positionne pour indiquer l'erreur. ERREURS EACCES advice est MADV_REMOVE, mais la plage d'adresses indiquee n'est pas un mappage partage ou on peut ecrire. EAGAIN Une ressource du noyau est temporairement indisponible. EBADF La projection existe, mais la zone n'est pas associee a un fichier. EBUSY (pour MADV_COLLAPSE) N'a pas pu charger la page immense dans cgroup : la limite du cgroup a ete depassee. EBUSY (for MADV_SOFT_OFFLINE) Any pages within the specified address range could not be offlined. This might occur if the page is currently in use or locked. EFAULT advice vaut MADV_POPULATE_READ ou MADV_POPULATE_WRITE et le peuplement (prefault) des tables de pages a echoue car un SIGBUS aurait genere un acces reel a la memoire et la raison n'est pas une page empoisonnee d'un HW (lesquelles peuvent etre creees, par exemple, en utilisant le drapeau MADV_HWPOISON decrit ailleurs dans cette page). EINVAL addr is not page-aligned or size is negative. EINVAL advice n'est pas valable. EINVAL advice vaut MADV_COLD ou MADV_PAGEOUT et la plage d'adresses indiquee inclut des pages verrouillees, immenses TLB ou VM_PFNMAP. EINVAL advice vaut MADV_DONTNEED ou MADV_REMOVE et la plage d'adresses indiquee inclut des pages verrouillees, immenses TLB ou VM_PFNMAP. EINVAL advice vaut MADV_MERGEABLE ou MADV_UNMERGEABLE, mais le noyau n'a pas ete configure avec l'option CONFIG_KSM. EINVAL advice vaut MADV_FREE ou MADV_WIPEONFORK mais la plage d'adresses indiquee inclut un fichier, des TLB immenses, MAP_SHARED ou des plages VM_PFNMAP. EINVAL advice vaut MADV_POPULATE_READ ou MADV_POPULATE_WRITE, mais la plage d'adresses indiquee inclut des plages aux droits insuffisants ou ayant des mappages speciaux, par exemple marques par des drapeaux internes au noyau tels que VM_IO ou VM_PFNMAP, ou bien des regions de memoire secretes creees en utilisant memfd_secret(2). EINVAL advice is MADV_GUARD_INSTALL or MADV_GUARD_REMOVE, but the specified address range contains an unsupported mapping. EIO (pour MADV_WILLNEED) Suivre la consigne de pagination sur cette zone depasserait la limite maximale de memoire physique utilisable par le processus. ENOMEM (pour MADV_WILLNEED) Memoire insuffisante ; echec de pagination. ENOMEM (pour MADV_COLLAPSE) Memoire insuffisante, impossible d'allouer des pages immenses. ENOMEM Les adresses de la plage specifiee ne sont pas projetees actuellement, ou n'appartiennent pas a l'espace d'adressage du processus. ENOMEM advice vaut MADV_POPULATE_READ ou MADV_POPULATE_WRITE et le peuplement (prefaulting) des tables de pages a echoue du fait d'une memoire insuffisante. EPERM advice vaut MADV_HWPOISON, mais l'appelant n'a pas la capacite CAP_SYS_ADMIN. EHWPOISON advice vaut MADV_POPULATE_READ ou MADV_POPULATE_WRITE et le peuplement (prefault) des tables de page a echoue car une page empoisonnee d'un HW (des pages empoisonnees de HW peuvent etre creees, par exemple, en utilisant le drapeau MADV_HWPOISON decrit ailleurs dans cette page) a ete rencontree. VERSIONS Des versions de cet appel systeme, qui implementent une grande variete de valeurs advice, existent sur de nombreuses autres implementations. D'autres implementent au moins les attributs ci-dessus sous Conventional advice flags (attributs de conseil conventionnels), avec d'autres variantes de semantique. POSIX.1-2001 specifie posix_madvise(3) avec des constantes POSIX_MADV_NORMAL, POSIX_MADV_RANDOM, POSIX_MADV_SEQUENTIAL, POSIX_MADV_WILLNEED, POSIX_MADV_DONTNEED et ainsi de suite, avec un comportement proche des attributs nommes de la meme maniere que ceux listes ci-dessus. Linux The Linux implementation requires that the address addr be page-aligned, and allows size to be zero. If there are some parts of the specified address range that are not mapped, the Linux version of madvise() ignores them and applies the call to the rest (but returns ENOMEM from the system call, as it should). madvise(0, 0, advice) renverra 0 si advice est pris en charge par le noyau et s'il peut s'appuyer dessus pour sonder la prise en charge. NORMES Aucun. HISTORIQUE Apparu dans 4.4BSD. Depuis Linux 3.18, la gestion de cet appel systeme est optionnelle, dependant du reglage de l'option de configuration CONFIG_ADVISE_SYSCALLS. VOIR AUSSI getrlimit(2), memfd_secret(2), mincore(2), mmap(2), mprotect(2), msync(2), munmap(2), prctl(2), process_madvise(2), posix_madvise(3), core(5) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Linux man-pages 6.18 8 fevrier 2026 madvise(2)