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(void addr[.length], size_t length, 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 L'appel systeme madvise() est utilise pour conseiller ou orienter le noyau quant a la plage d'adresses commencant a addr et de taille length. madvise() n'agit que sur des pages entieres, addr doit donc etre alignee sur une page. La valeur de length est arrondie au multiple superieur de la taille de page. Dans la plupart des cas, le but de tels conseils est d'ameliorer les performances du systeme ou d'une application. 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). La prise en charge des pages immenses TLB a ete ajoutee a Linux 5.18. Les adresses d'un mappage stockees par des pages immenses TLB doivent etre alignees sur la taille de la page immense TLB sous-jacente et la taille de la plage est arrondie a un multiple superieur de la taille de la page immense TLB sous-jacente. 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. La prise en charge du systeme de fichier de page immense TLB a ete ajoutee a 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) Empoisonner les pages dans la plage indiquee par addr et length et traiter les references ulterieures a ces pages comme une corruption de la memoire materielle. Cette operation n'est disponible que pour les processus privilegies (CAP_SYS_ADMIN). A la suite de cette operation, le processus appelant peut recevoir un SIGBUS et la page devenir non affectee. 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) Activer la fusion des pages identiques par le noyau (Kernel Samepage Merging, ou KSM) pour les pages dans la plage specifiee par addr et length. Le noyau analyse regulierement les regions de la memoire utilisateur qui ont ete marquees comme pouvant etre fusionnees, a la recherche de pages avec un contenu identique. Elles sont remplacees par une page unique protegee en ecriture (qui sera automatiquement recopiee si un processus veut plus tard modifier le contenu de la page). KSM ne fusionne que les pages anonymes privees (consultez 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) Annuler l'effet d'une operation MADV_MERGEABLE precedente sur la plage d'adresses specifiee ; KSM annule la fusion sur les pages qui avaient ete fusionnees dans la plage specifiee par addr et length. MADV_SOFT_OFFLINE (depuis Linux 2.6.33) Deconnecter en douceur les pages dans la plage specifiee par addr et length. La memoire de chaque page dans la plage specifiee est preservee (lors du prochain acces, le meme contenu sera visible, mais dans une nouvelle page physique), et la page originale est deconnectee (ce qui signifie qu'elle n'est plus utilisee, et plus prise en compte par les mecanismes habituels de gestion de la memoire). L'effet de l'operation MADV_SOFT_OFFLINE est invisible au processus appelant (c'est-a-dire qu'elle n'en change pas la semantique). 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) Activer la gestion transparente des pages immenses (Transparent Huge Pages, ou THP) pour les pages dans la plage specifiee par addr et length. Le noyau analysera regulierement les regions qui ont ete marquees comme candidates aux pages immenses pour les remplacer par des pages immenses. Le noyau allouera aussi des pages immenses directement quand la region est naturellement alignee sur la taille de page immense (consultez 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. La VMA ne doit pas avoir de mrquage VM_NOHUGEPAGE, VM_HUGETLB, VM_IO, VM_DONTEXPAND, VM_MIXEDMAP ou VM_PFNMAP, et elle ne peut pas non plus etre une memoire de pile ou une memoire de secours pour un peripherique ou DAX est active (sauf si ce peripherique est branche a chaud en tant que RAM du systeme). Le processus ne doit pas avoir de PR_SET_THP_DISABLE positionne (voir 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) S'assurer que la memoire dans la plage specifiee par addr et length ne sera pas geree dans des pages immenses transparentes. 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) Exclure de l'image memoire (<< core dump >>) les pages dans la plage indiquee par addr et length. C'est utile pour les applications dont de larges zones de memoire sont notoirement inutiles dans une image memoire. L'effet de MADV_DONTDUMP est prioritaire sur le masque de bits configure a l'aide de /proc/pid/coredump_filter, consultez core(5). MADV_DODUMP (depuis Linux 3.4) Annuler l'effet d'un MADV_DONTDUMP anterieur. MADV_FREE (depuis Linux 4.5) L'application n'a plus besoin des pages dans la plage indiquee par addr et length. Le noyau peut ainsi liberer ces pages mais cela pourrait etre differe jusqu'a une pression de la memoire. Pour chacune des pages marquees comme liberables mais non encore liberees, l'operation sera annulee si l'appelant ecrit dans la page. Apres une operation MADV_FREE reussie, toutes les donnees perimees (c'est-a-dire les pages sales ou non ecrites) seront perdues quand le noyau liberera les pages. Cependant, les ecritures suivantes dans les pages de la plage auront lieu et le noyau ne pourra pas liberer ces pages salies, de sorte que l'appelant pourra toujours voir les donnees qui viennent d'etre ecrites. S'il n'y a pas d'ecriture ulterieure, le noyau peut liberer les pages n'importe quand. Une fois que les pages de la plage ont ete liberees, l'appelant verra des pages remplies de zeros a la demande a chaque reference ulterieure aux pages. 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. 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. 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 n'est pas aligne sur une page ou length est negatif. 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). 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 L'implementation Linux necessite que l'adresse addr soit alignee sur une page, et permet que length vaille zero. S'il y a des parties de la plage d'adresses specifiee qui ne sont pas projetees, la version Linux de madvise() les ignore et applique l'appel au reste de la plage (mais renvoie ENOMEM comme il se doit). 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. STANDARDS 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 . Pages du manuel de Linux 6.06 31 octobre 2023 madvise(2)