Provided by: manpages-fr-dev_3.65d1p1-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 Linux 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)
              Annuler 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.

       MADV_HUGEPAGE (depuis Linux 2.6.38)
              Active la gestion transparente des pages immenses (Transparent Huge Pages, ou THP) pour les  pages
              dans  l'intervalle  spécifié par addr et length. Actuellement, THP ne fonctionne qu'avec les pages
              anonymes privées (consultez mmap(2)). Le noyau analysera régulièrement les  régions  qui  ont  été
              marquées  comme  candidates aux pages immenses pour les remplacer par des pages immenses. Le noyau
              allouera aussi des pages immenses directement quand la région est  naturellement  alignée  sur  la
              taille de page immense (consultez posix_memalign(2)). Cette fonctionnalité est initialement prévue
              pour des applications qui utilisent de grosses projections de données et  accèdent  à  de  grosses
              zones  de  cette mémoire en même temps (par exemple les systèmes de virtualisation comme QEMU). Il
              peut très facilement gaspiller beaucoup de  mémoire  (par  exemple  une  projection  de  2 Mo  qui
              n'accède  qu'à  un  seul  octet a pour conséquence 2 Mo de mémoire connectée au lieu d'une page de
              4 ko). Consultez le fichier Documentation/vm/ktranshuge.txt dans les sources du noyau  Linux  pour
              plus  de  détails.  Les  opérations MADV_HUGEPAGE et MADV_NOHUGEPAGE ne sont disponibles que si le
              noyau a été configuré avec CONFIG_TRANSPARENT_HUGEPAGE.

       MADV_NOHUGEPAGE (depuis Linux 2.6.38)
              S'assure que la mémoire dans l'intervalle spécifié par addr et length ne sera pas perdue dans  des
              pages immenses.

       MADV_DONTDUMP (depuis Linux 3.4)
              Exclue  de l'image mémoire (« core dump ») les pages dans l'intervalle indiqué par addr et length.
              C'est utile pour les applications dont de larges zones de mémoire sont notoirement  inutiles  dans
              une  image  mémoire.  L'effet de MADV_DONTDUMP est prioritaire sur le masque de bits configuré via
              /proc/PID/coredump_filter, consultez core(5).

       MADV_DODUMP (depuis Linux 3.4)
              Annuler l'effet de MADV_DONTDUMP.

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,
       POSIX_MADV_RANDOM,  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), prctl(2), core(5)

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions    pour    signaler    des    anomalies    peuvent     être     trouvées     à     l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

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

       Stéphan Rafin (2002),  Alain  Portal  <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> ».