Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       madvise - Configurer l'utilisation de la memoire

SYNOPSIS

       #include <sys/mman.h>

       int madvise(void *addr, size_t length, int advice);

   Exigences  de  macros  de  test de fonctionnalites pour la glibc (consultez
   feature_test_macros(7)) :

       madvise() : _BSD_SOURCE

DESCRIPTION

       L'appel systeme madvise() conseille le noyau sur la facon de  gerer  la
       pagination  sur l'intervalle d'adresses debutant a l'adresse addr et de
       taille length (en octets). Il permet 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. Cet
       appel ne modifie pas la semantique de l'application (sauf dans  le  cas
       de  MADV_DONTNEED),  mais peut avoir un impact sur ses performances. Le
       noyau est libre d'ignorer le conseil.

       Le conseil est specifie par le parametre advice qui  peut  prendre  les
       valeurs

       MADV_NORMAL
              Pas  de  traitement  particulier.  Il s'agit du comportement par
              defaut.

       MADV_RANDOM
              Prevoit des acces aux pages dans un ordre aleatoire. (Ainsi,  la
              lecture anticipee sera moins utile qu'elle ne l'est en general.)

       MADV_SEQUENTIAL
              prevoit  des  acces  aux pages dans un ordre sequentiel. (Aussi,
              les pages d'un intervalle donne  peuvent  etre  systematiquement
              lues par anticipation, et peuvent etre liberees rapidement apres
              avoir ete accedees.)

       MADV_WILLNEED
              Prevoit un acces dans un futur  proche.  (Ainsi,  lire  quelques
              pages de facon anticipee peut etre une bonne idee.)

       MADV_DONTNEED
              Ne  prevoit  pas  d'acces dans un futur proche. (Pour l'instant,
              l'application en a fini avec l'intervalle  considere,  ainsi  le
              noyau  peut-il  liberer  les ressources associees a ce dernier.)
              Les acces ulterieurs aux pages de l'intervalle reussiront,  mais
              resulteront  soit  en  un  rechargement du fichier projete sous-
              jacent (consultez mmap(2)), soit  en  un  remplissage  avec  des
              zeros pour les pages sans fichier.

       MADV_REMOVE (depuis Linux 2.6.16)
              Liberer   un   ensemble  contigu  de  pages  et  les  ressources
              correspondantes.  Actuellement,  ceci  n'est  possible  que  sur
              shmfs/tmpfs ; les autres systemes de fichiers renvoient l'erreur
              ENOSYS.

       MADV_DONTFORK (depuis Linux 2.6.16)
              Ne pas rendre les pages de cet intervalle  disponibles  au  fils
              apres  un fork(2). Ceci est utile pour empecher la semantique de
              copie a l'ecriture de changer l'emplacement physique d'une  page
              si  le  pere  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 une projection en memoire est  heritee  apres  un
              fork(2).

       MADV_HWPOISON (depuis Linux 2.6.32)
              Empoisonne  une  page  et  la  traite 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 prevue pour
              tester le code de gestion des erreurs de la memoire ; elle n'est
              disponible    que   si   le   noyau   a   ete   configure   avec
              CONFIG_MEMORY_FAILURE.

       MADV_SOFT_OFFLINE (depuis Linux 2.6.33)
              Deconnecte les pages dans  l'intervalle  specifie  par  addr  et
              length. La memoire de chaque page dans l'intervalle specifie 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 prevue  pour
              tester le code de gestion des erreurs de la memoire ; elle n'est
              disponible   que   si   le   noyau   a   ete   configure    avec
              CONFIG_MEMORY_FAILURE.

       MADV_MERGEABLE (depuis Linux 2.6.32)
              Active  la  fusion  des  pages  identiques  par le noyau (Kernel
              Samepage Merging, ou  KSM)  pour  les  pages  dans  l'intervalle
              specifie par addr and 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  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
              beaucoup d'instances des memes donnees (par exemple des systemes
              de virtualisation tels que KVM). Elle peut  necessiter  beaucoup
              de  ressources  de  traitement ;  a  utiliser  avec  precaution.
              Consultez les fichiers Documentation/vm/ksm.txt dans les sources
              du  noyau 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)
              Annule  l'effet  d'une  operation  MADV_MERGEABLE precedente sur
              l'intervalle d'adresse specifie ; KSM annule la fusion  sur  les
              pages  qui avaient ete fusionnees dans l'intervalle specifie par
              addr et length.

VALEUR RENVOY'EE

       En cas de succes madvise() renvoie zero. En cas d'erreur, il renvoie -1
       et errno est positionne de facon adequate.

ERREURS

       EAGAIN Une ressource du noyau est temporairement indisponible.

       EBADF  La  projection  existe,  mais  la  zone  n'est pas associee a un
              fichier.

       EINVAL Cette erreur peut survenir pour les raisons suivantes :

              *  La valeur len est negative.

              *  addr n'est pas aligne sur une page.

              *  advice n'a pas une valeur valide.

              *  L'application tente de  liberer  des  pages  verrouillees  ou
                 partagees (avec MADV_DONTNEED).

              *  MADV_MERGEABLE ou MADV_UNMERGEABLE a ete indique dans advice,
                 mais le noyau n'a pas ete configure avec l'option CONFIG_KSM.

       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 Les adresses de l'intervalle  specifie  ne  sont  pas  projetees
              actuellement,  ou  n'appartiennent pas a l'espace d'adressage du
              processus.

CONFORMIT'E

       POSIX.1b.  POSIX.1-2001  specifie  l'appel  posix_madvise(3)  avec  des
       constantes  POSIX_MADV_NORMAL,  etc. et un comportement proche de celui
       decrit ici. Il existe un  appel  similaire  posix_fadvise(2)  pour  les
       acces aux fichiers.

       MADV_REMOVE,  MADV_DONTFORK, MADV_DOFORK, MADV_HWPOISON, MADV_MERGEABLE
       et MADV_UNMERGEABLE sont specifiques a Linux.

NOTES

   Notes sur Linux
       L'implementation Linux actuelle (2.4.0)  percoit  davantage  cet  appel
       systeme   comme  une  commande  que  comme  un  conseil  et  est  ainsi
       susceptible de renvoyer  une  erreur  quand  elle  ne  parvient  pas  a
       realiser  ce  qu'elle  devrait  accomplir  en  reponse  a  ce  conseil.
       (Consultez la  description  des  ERREURS  ci-dessus.)  Il  s'agit  d'un
       comportement non standard.

       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
       l'intervalle  d'adresses specifie qui ne sont pas projetees, la version
       Linux  de  madvise()  les  ignore  et  applique  l'appel  au  reste  de
       l'intervalle (mais renvoie ENOMEM comme il se doit).

VOIR AUSSI

       getrlimit(2), mincore(2), mmap(2), mprotect(2), msync(2), munmap(2)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone       au       sein        du        projet        perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Stephan           Rafin          (2002),          Alain          Portal
       <URL:http://manpagesfr.free.fr/> (2006).  Julien  Cristau  et  l'equipe
       francophone de traduction de Debian (2006-2009).

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.