Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

NOM

       madvise - Configurer l'utilisation de la mémoire

SYNOPSIS

       #include <sys/mman.h>

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

   Exigences    de    macros    de   test   de   fonctionnalités   pour   la   glibc   (consultez
   feature_test_macros(7)) :

       madvise() : _BSD_SOURCE

DESCRIPTION

       L'appel système madvise() conseille le noyau sur la  façon  de  gérer  la  pagination  sur
       l'intervalle  d'adresses  débutant  à  l'adresse  addr et de taille length (en octets). Il
       permet à une application  d'indiquer  au  noyau  l'utilisation  qu'elle  compte  faire  de
       certaines  zones de mémoire partagée ou projetée de façon à ce que le noyau puisse choisir
       les techniques de lecture anticipée et de mise en cache appropriées. Cet appel ne  modifie
       pas la sémantique 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 spécifié par le paramètre advice qui peut prendre les valeurs

       MADV_NORMAL
              Pas de traitement particulier. Il s'agit du comportement par défaut.

       MADV_RANDOM
              Prévoit des accès aux pages dans un ordre aléatoire. (Ainsi, la  lecture  anticipée
              sera moins utile qu'elle ne l'est en général.)

       MADV_SEQUENTIAL
              prévoit  des  accès  aux  pages  dans  un  ordre séquentiel. (Aussi, les pages d'un
              intervalle donné peuvent être systématiquement lues par  anticipation,  et  peuvent
              être libérées rapidement après avoir été accédées.)

       MADV_WILLNEED
              Prévoit  un  accès  dans  un  futur  proche.  (Ainsi,  lire quelques pages de façon
              anticipée peut être une bonne idée.)

       MADV_DONTNEED
              Ne prévoit pas d'accès dans un futur proche. (Pour l'instant,  l'application  en  a
              fini  avec  l'intervalle  considéré,  ainsi le noyau peut‐il libérer les ressources
              associées à ce dernier.) Les accès ultérieurs aux pages de l'intervalle réussiront,
              mais  résulteront soit en un rechargement du fichier projeté sous‐jacent (consultez
              mmap(2)), soit en un remplissage avec des zéros pour les pages sans fichier.

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

       MADV_DONTFORK (depuis Linux 2.6.16)
              Ne pas rendre les pages de cet intervalle disponibles au  fils  après  un  fork(2).
              Ceci  est  utile  pour  empêcher  la  sémantique  de  copie à l'écriture de changer
              l'emplacement physique d'une page si le père y écrit après  un  fork(2).  (De  tels
              déplacements  posent  des  problèmes  si  le  matériel accède directement à la page
              (DMA)).

       MADV_DOFORK (depuis Linux 2.6.16)
              Annuler l'effet de MADV_DONTFORK et restaurer le comportement par  défaut,  où  une
              projection en mémoire est héritée après un fork(2).

       MADV_HWPOISON (depuis Linux 2.6.32)
              Empoisonne  une  page  et  la traite comme une corruption de la mémoire matérielle.
              Cette   opération   n'est   disponible   que   pour   les   processus   privilégiés
              (CAP_SYS_ADMIN). À la suite de cette opération, le processus appelant peut recevoir
              un SIGBUS et la page devenir non affectée. Cette  fonctionnalité  est  prévue  pour
              tester  le code de gestion des erreurs de la mémoire ; elle n'est disponible que si
              le noyau a été configuré avec CONFIG_MEMORY_FAILURE.

       MADV_SOFT_OFFLINE (depuis Linux 2.6.33)
              Déconnecte les pages dans l'intervalle spécifié par addr et length. La  mémoire  de
              chaque  page  dans  l'intervalle spécifié est préservée (lors du prochain accès, le
              même contenu sera visible, mais dans  une  nouvelle  page  physique),  et  la  page
              originale  est  déconnectée  (ce  qui signifie qu'elle n'est plus utilisée, et plus
              prise en compte par les mécanismes habituels de gestion de la mémoire). L'effet  de
              l'opération  MADV_SOFT_OFFLINE  est  invisible  au processus appelant (c'est-à-dire
              qu'elle n'en change pas la sémantique). Cette fonctionnalité est prévue pour tester
              le  code  de  gestion  des  erreurs de la mémoire ; elle n'est disponible que si le
              noyau a été configuré 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 spécifié par addr et length. Le noyau analyse
              régulièrement les régions de la mémoire utilisateur  qui  ont  été  marquées  comme
              pouvant  être  fusionnées, à la recherche de pages avec un contenu identique. Elles
              sont remplacées par une page unique protégée en écriture (qui sera  automatiquement
              recopiée  si  un  processus  veut plus tard modifier le contenu de la page). KSM ne
              fusionne que les pages anonymes privées (consultez mmap(2)). La fonctionnalité  KSM
              est  prévue  pour  des  applications  qui  génèrent  beaucoup d'instances des mêmes
              données (par exemple des systèmes  de  virtualisation  tels  que  KVM).  Elle  peut
              nécessiter  beaucoup  de  ressources  de  traitement ;  à utiliser avec précaution.
              Consultez le fichier Documentation/vm/ksm.txt dans les sources du noyau  pour  plus
              de  détails.  Les opérations MADV_MERGEABLE et MADV_UNMERGEABLE ne sont disponibles
              que si le noyau a été configuré avec CONFIG_KSM.

       MADV_UNMERGEABLE (depuis Linux 2.6.32)
              Annule l'effet d'une opération MADV_MERGEABLE précédente sur l'intervalle d'adresse
              spécifié ;  KSM  annule  la  fusion  sur  les pages qui avaient été fusionnées dans
              l'intervalle spécifié par addr et length.

VALEUR RENVOYÉE

       En cas de succès madvise() renvoie zéro. En cas d'erreur,  il  renvoie  -1  et  errno  est
       positionné de façon adéquate.

ERREURS

       EAGAIN Une ressource du noyau est temporairement indisponible.

       EBADF  La projection existe, mais la zone n'est pas associée à un fichier.

       EINVAL Cette erreur peut survenir pour les raisons suivantes :

              *  La valeur len est négative.

              *  addr n'est pas aligné sur une page.

              *  advice n'a pas une valeur valide.

              *  L'application  tente  de  libérer  des  pages  verrouillées  ou  partagées (avec
                 MADV_DONTNEED).

              *  MADV_MERGEABLE ou MADV_UNMERGEABLE a été indiqué dans advice, mais le noyau  n'a
                 pas été configuré avec l'option CONFIG_KSM.

       EIO    (pour MADV_WILLNEED) Suivre la consigne de pagination sur cette zone dépasserait la
              limite maximale de mémoire physique utilisable par le processus.

       ENOMEM (pour MADV_WILLNEED) Mémoire insuffisante ; échec de pagination.

       ENOMEM Les adresses de l'intervalle  spécifié  ne  sont  pas  projetées  actuellement,  ou
              n'appartiennent pas à l'espace d'adressage du processus.

CONFORMITÉ

       POSIX.1b.   POSIX.1-2001   spécifie   l'appel   posix_madvise(3)   avec   des   constantes
       POSIX_MADV_NORMAL, etc. et un comportement proche de celui décrit ici. Il existe un  appel
       similaire posix_fadvise(2) pour les accès aux fichiers.

       MADV_REMOVE, MADV_DONTFORK, MADV_DOFORK, MADV_HWPOISON, MADV_MERGEABLE et MADV_UNMERGEABLE
       sont spécifiques à Linux.

NOTES

   Notes sur Linux
       L'implémentation Linux actuelle (2.4.0) perçoit davantage  cet  appel  système  comme  une
       commande  que  comme un conseil et est ainsi susceptible de renvoyer une erreur quand elle
       ne parvient pas à  réaliser  ce  qu'elle  devrait  accomplir  en  réponse  à  ce  conseil.
       (Consultez  la  description  des  ERREURS  ci‐dessus.)  Il  s'agit  d'un  comportement non
       standard.

       L'implémentation Linux nécessite que l'adresse addr soit alignée sur une page,  et  permet
       que  length  vaille  zéro. S'il y a des parties de l'intervalle d'adresses spécifié qui ne
       sont pas projetées, 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.32 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

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

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document  en  utilisant  la
       commande « man -L C <section> <page_de_man> ».