.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2001 David Gómez .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Based on comments from mm/filemap.c. Last modified on 10-06-2001 .\" Modified, 25 Feb 2002, Michael Kerrisk, .\" Added notes on MADV_DONTNEED .\" 2010-06-19, mtk, Added documentation of MADV_MERGEABLE and .\" MADV_UNMERGEABLE .\" 2010-06-15, Andi Kleen, Add documentation of MADV_HWPOISON. .\" 2010-06-19, Andi Kleen, Add documentation of MADV_SOFT_OFFLINE. .\" 2011-09-18, Doug Goldstein .\" Document MADV_HUGEPAGE and MADV_NOHUGEPAGE .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH MADVISE 2 "6 mars 2019" Linux "Manuel du programmeur Linux" .SH NOM madvise \- Configurer l'utilisation de la mémoire .SH SYNOPSIS \fB#include \fP .PP \fBint madvise(void *\fP\fIaddr\fP\fB, size_t \fP\fIlength\fP\fB, int \fP\fIadvice\fP\fB);\fP .PP .in -4n Exigences de macros de test de fonctionnalités pour la glibc (consulter \fBfeature_test_macros\fP(7))\ : .in .PP \fBmadvise\fP()\ : .PD 0 .RS 4 .TP 4 Depuis la glibc\ 2.19 : _DEFAULT_SOURCE .TP Jusqu'à la glibc 2.19 comprise\ : _BSD_SOURCE .RE .PD .SH DESCRIPTION L'appel système \fBmadvise\fP() est utilisé pour conseiller ou orienter le noyau quant à la plage d'adresses commençant à \fIaddr\fP et de taille \fIlength\fP octets. Dans la plupart des cas, le but de tels conseils est d'améliorer les performances du système ou d'une application. .PP .\" .\" ====================================================================== .\" Initialement, l'appel système gérait un ensemble de valeurs de \fIadvice\fP «\ conventionnelles\ », disponibles aussi sur d'autres implémentations (notez toutefois que \fBmadvise\fP() n'est pas spécifié dans POSIX). Par conséquent, un certain nombre de valeurs de \fIadvice\fP spécifiques à Linux ont été ajoutées. .SS "Valeurs de conseil conventionnelles" Les valeurs de \fIadvice\fP (conseil) listées ci\-dessous permettent à 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. Ces valeurs \fIadvice\fP ne modifient pas la sémantique de l'application (sauf dans le cas de \fBMADV_DONTNEED\fP), mais peuvent avoir un impact sur ses performances. Toutes les valeurs de \fIadvice\fP listées ici ont un pendant dans la fonction \fBposix_madvise\fP(3) spécifiée par POSIX et elles ont la même signification, sauf \fBMADV_DONTNEED\fP. .PP Le conseil est spécifié par le paramètre \fIadvice\fP qui peut être un des suivants\ : .TP \fBMADV_NORMAL\fP Pas de traitement particulier. Il s'agit du comportement par défaut. .TP \fBMADV_RANDOM\fP Prévoir des références de page dans un ordre aléatoire. (Ainsi, la lecture anticipée sera moins utile qu'elle ne l'est en général.) .TP \fBMADV_SEQUENTIAL\fP Prévoir des références de page dans un ordre séquentiel. (Aussi, les pages d'une plage donnée peuvent être systématiquement lues par anticipation, et peuvent être libérées rapidement après avoir été accédées.) .TP \fBMADV_WILLNEED\fP Prévoir un accès dans un futur proche. (Ainsi, lire quelques pages de façon anticipée peut être une bonne idée.) .TP \fBMADV_DONTNEED\fP Ne pas s'attendre à un accès dans un futur proche (quant au temps, l'application est finie avec la plage donnée, pour que le noyau puisse libérer des ressources qui lui sont associées). .IP Après une opération \fBMADV_DONTNEED\fP réussie, la sémantique de l'accès en mémoire dans la région indiquée est modifiée\ : les accès suivants des pages réussiront, mais provoqueront un nouveau remplissage de la mémoire soit avec le contenu à jour du fichier transposé sous\-jacent (pour les tableaux de fichiers partagés, ceux anonymes partagés, les techniques basées sur shmem telles que les segments de mémoire partagée de System V), soit avec les pages remplies de zéro à la demande pour les tableaux privés anonymes. .IP Remarquez qu'appliquée à des tableaux partagés, \fBMADV_DONTNEED\fP pourrait ne pas aboutir à une libération immédiate des pages dans la plage. Le noyau est libre de retarder la libération des pages jusqu'au bon moment. La mémoire résidente (resident set size, ou RSS) du processus appelant sera par contre immédiatement réduite. .IP .\" http://lwn.net/Articles/162860/ .\" .\" ====================================================================== .\" \fBMADV_DONTNEED\fP ne peut pas s'appliquer à des pages verrouillées, d'immenses pages TLB ou à des pages \fBVM_PFNMAP\fP (les pages marquées par l'attribut \fBVM_PFNMAP\fP interne au noyau sont des régions de mémoire spéciales non gérées par le sous\-système de mémoire virtuelle. De telles pages sont généralement créées par des pilotes de périphérique transposant les pages dans l'espace utilisateur). .SS "Valeurs de conseil spécifiques à Linux" Les valeurs \fIadvice\fP suivantes spécifiques à Linux n'ont pas d'équivalent dans le \fBposix_madvise\fP(3) spécifié par POSIX et peuvent en avoir ou pas dans l'interface \fBmadvise\fP() disponible sur d'autres implémentations. Notez que certaines de ces opérations modifient la sémantique des accès en mémoire. .TP \fBMADV_REMOVE\fP (depuis Linux 2.6.16) .\" commit f6b3ec238d12c8cc6cc71490c6e3127988460349 .\" Databases want to use this feature to drop a section of their .\" bufferpool (shared memory segments) - without writing back to .\" disk/swap space. This feature is also useful for supporting .\" hot-plug memory on UML. Libération jusqu'à une plage donnée de pages et son stockage de repli associé. Cela revient à percer un trou dans la plage d'octets correspondante du stockage de secours (voir \fBfallocate\fP(2)). Les accès suivants à la plage d'adresses indiquée verront des octets contenant zéro. .IP Le plage d'adresses indiquée doit être transposée partagée et accessible en écriture. Cet attribut ne peut pas être appliqué à des pages verrouillées, d'immenses pages TLB ou à des pages \fBVM_PFNMAP\fP. .IP .\" commit 3f31d07571eeea18a7d34db9af21d2285b807a17 Dans l'implémentation initiale, seul \fBtmpfs\fP(5) prenait en charge \fBMADV_REMOVE\fP\ ; mais depuis Linux 3.5, tous les systèmes de fichiers qui prennent en charge le mode \fBFALLOC_FL_PUNCH_HOLE\fP de \fBfallocate\fP(2) gèrent également \fBMADV_REMOVE\fP. Hugetlbfs échoue avec l'erreur \fBEINVAL\fP et d'autres systèmes de fichiers échouent avec l'erreur \fBEOPNOTSUPP\fP. .TP \fBMADV_DONTFORK\fP (depuis Linux 2.6.16) .\" commit f822566165dd46ff5de9bf895cfa6c51f53bb0c4 .\" See http://lwn.net/Articles/171941/ .\" [PATCH] madvise MADV_DONTFORK/MADV_DOFORK .\" Currently, copy-on-write may change the physical address of .\" a page even if the user requested that the page is pinned in .\" memory (either by mlock or by get_user_pages). This happens .\" if the process forks meanwhile, and the parent writes to that .\" page. As a result, the page is orphaned: in case of .\" get_user_pages, the application will never see any data hardware .\" DMA's into this page after the COW. In case of mlock'd memory, .\" the parent is not getting the realtime/security benefits of mlock. .\" .\" In particular, this affects the Infiniband modules which do DMA from .\" and into user pages all the time. .\" .\" This patch adds madvise options to control whether memory range is .\" inherited across fork. Useful e.g. for when hardware is doing DMA .\" from/into these pages. Could also be useful to an application .\" wanting to speed up its forks by cutting large areas out of .\" consideration. .\" .\" SEE ALSO: http://lwn.net/Articles/171941/ .\" "Tweaks to madvise() and posix_fadvise()", 14 Feb 2006 Ne pas rendre les pages de cette plage disponibles à l'enfant après un \fBfork\fP(2). Cela est utile pour empêcher la sémantique de copie à l'écriture de changer l'emplacement physique d'une page si le parent y écrit après un \fBfork\fP(2) (de tels déplacements posent des problèmes si le matériel accède directement à la page (DMA)). .TP \fBMADV_DOFORK\fP (depuis Linux 2.6.16) Annuler l'effet de \fBMADV_DONTFORK\fP et restaurer le comportement par défaut, où une projection en mémoire est héritée après un \fBfork\fP(2). .TP \fBMADV_HWPOISON\fP (depuis Linux 2.6.32) .\" commit 9893e49d64a4874ea67849ee2cfbf3f3d6817573 Empoisonner les pages dans la plage indiquée par \fIaddr\fP et \fIlength\fP et traiter les références ultérieures à ces pages comme une corruption de la mémoire matérielle. Cette opération n'est disponible que pour les processus privilégiés (\fBCAP_SYS_ADMIN\fP). À la suite de cette opération, le processus appelant peut recevoir un \fBSIGBUS\fP et la page devenir non affectée. .IP Cette fonctionnalité est conçue pour tester du code de gestion des erreurs de mémoire\ ; elle n'est disponible que si le noyau a été configuré avec \fBCONFIG_MEMORY_FAILURE\fP. .TP \fBMADV_MERGEABLE\fP (depuis Linux 2.6.32) .\" commit f8af4da3b4c14e7267c4ffb952079af3912c51c5 Activer la fusion des pages identiques par le noyau (\fIKernel Samepage Merging\fP, ou KSM) pour les pages dans la plage spécifiée par \fIaddr\fP et \fIlength\fP. 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 \fBmmap\fP(2)). .IP La fonctionnalité KSM est prévue pour des applications qui génèrent de nombreuses instances avec les mêmes données (comme les systèmes de virtualisation tels que KVM). Cela consomme beaucoup de puissance de calcul\ ; utilisez\-la prudemment. Voir le fichier \fIDocumentation/admin\-guide/mm/ksm.rst\fP des sources du noyau Linux pour plus de détails. .IP Les opérations \fBMADV_MERGEABLE\fP et \fBMADV_UNMERGEABLE\fP ne sont disponibles que si le noyau a été configuré avec \fBCONFIG_KSM\fP. .TP \fBMADV_UNMERGEABLE\fP (depuis Linux 2.6.32) Annuler l'effet d'une opération \fBMADV_MERGEABLE\fP précédente sur la plage d'adresses spécifiée\ ; KSM annule la fusion sur les pages qui avaient été fusionnées dans la plage spécifiée par \fIaddr\fP et \fIlength\fP. .TP \fBMADV_SOFT_OFFLINE\fP (depuis Linux 2.6.33) .\" commit afcf938ee0aac4ef95b1a23bac704c6fbeb26de6 Déconnecter en douceur les pages dans la plage spécifiée par \fIaddr\fP et \fIlength\fP. La mémoire de chaque page dans la plage spécifiée 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 \fBMADV_SOFT_OFFLINE\fP est invisible au processus appelant (c'est\-à\-dire qu'elle n'en change pas la sémantique). .IP Cette fonctionnalité est conçue pour tester du code de gestion des erreurs de mémoire\ ; elle n'est disponible que si le noyau a été configuré avec \fBCONFIG_MEMORY_FAILURE\fP. .TP \fBMADV_HUGEPAGE\fP (depuis Linux 2.6.38) .\" commit 0af4e98b6b095c74588af04872f83d333c958c32 .\" http://lwn.net/Articles/358904/ .\" https://lwn.net/Articles/423584/ Activer la gestion transparente des pages immenses (\fITransparent Huge Pages\fP, ou THP) pour les pages dans la plage spécifiée par \fIaddr\fP et \fIlength\fP. Actuellement, THP ne fonctionne qu'avec les pages anonymes privées (consultez \fBmmap\fP(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 \fBposix_memalign\fP(2)). .IP Cette fonctionnalité est d'abord destinée aux applications qui utilisent tout à la fois de grands tableaux, beaucoup de données et de grandes régions d'accès à la mémoire (comme les systèmes de virtualisation tels que QEMU). Elle peut facilement consommer beaucoup de mémoire (par exemple un tableau de 2\ Mo qui n'accède qu'à un octet dépensera 2\ Mo de mémoire et non une page de 4\ Ko). Voir le fichier \fIDocumentation/admin\-guide/mm/transhuge.rst\fP des sources du noyau Linux pour plus de détails. .IP Les opérations \fBMADV_HUGEPAGE\fP et \fBMADV_NOHUGEPAGE\fP ne sont disponibles que si le noyau a été configuré avec \fBCONFIG_TRANSPARENT_HUGEPAGE\fP. .TP \fBMADV_NOHUGEPAGE\fP (depuis Linux 2.6.38) S'assurer que la mémoire dans la plage spécifiée par \fIaddr\fP et \fIlength\fP ne sera pas dissimulée dans des pages immenses. .TP \fBMADV_DONTDUMP\fP (depuis Linux\ 3.4) .\" commit 909af768e88867016f427264ae39d27a57b6a8ed .\" commit accb61fe7bb0f5c2a4102239e4981650f9048519 Exclure de l'image mémoire («\ core dump\ ») les pages dans la plage indiquée par \fIaddr\fP et \fIlength\fP. C'est utile pour les applications dont de larges zones de mémoire sont notoirement inutiles dans une image mémoire. L'effet de \fBMADV_DONTDUMP\fP est prioritaire sur le masque de bits configuré à l’aide de \fI/proc/PID/coredump_filter\fP, consultez \fBcore\fP(5). .TP \fBMADV_DODUMP\fP (depuis Linux 3.4) Annuler l'effet d’un \fBMADV_DONTDUMP\fP antérieur. .TP \fBMADV_FREE\fP (depuis Linux 4.5) L'application n'a plus besoin des pages dans la plage indiquée par \fIaddr\fP et \fIlength\fP. Le noyau peut ainsi libérer ces pages mais cela pourrait être différé jusqu'à une pression de la mémoire. Pour chacune des pages marquées comme libérables mais non encore libérées, l'opération sera annulée si l'appelant écrit dans la page. Après une opération \fBMADV_FREE\fP réussie, toutes les données périmées (c'est\-à\-dire les pages sales ou non écrites) seront perdues quand le noyau libèrera les pages. Cependant, les écritures suivantes dans les pages de la plage auront lieu et le noyau ne pourra pas libérer ces pages salies, de sorte que l'appelant pourra toujours voir les données qui viennent d'être écrites. S'il n'y a pas d'écriture ultérieure, le noyau peut libérer les pages n'importe quand. Une fois que les pages de la plage ont été libérées, l'appelant verra des pages remplies de zéro à la demande à chaque référence ultérieure aux pages. .IP .\" commit 93e06c7a645343d222c9a838834a51042eebbbf7 L'opération \fBMADV_FREE\fP ne peut s'appliquer qu'à des pages anonymes privées (voir \fBmmap\fP(2)). Avant Linux 4.12, avant de libérer des pages sur un système sans espace d'échange, les pages dans la plage donnée étaient libérées instantanément indépendamment de la pression sur la mémoire. .TP \fBMADV_WIPEONFORK\fP (depuis Linux 4.14 .\" commit d2cd9ede6e193dd7d88b6d27399e96229a551b19 Afficher le processus enfant avec une mémoire pleine de zéros dans cette plage après un \fBfork\fP(2). Cela est utile quand on réplique (fork) un serveur pour s'assurer que les données sensibles au processus (par exemple les sièges PRNG, les codes de chiffrement et ainsi de suite) ne soient pas capturées par les processus enfants. .IP L'opération \fBMADV_WIPEONFORK\fP ne peut s'appliquer qu'aux pages anonymes privées (voir \fBmmap\fP(2)). .IP Dans l'enfant créé par \fBfork\fP(2), le paramètre \fBMADV_WIPEONFORK\fP reste en place à la plage d'adresses indiquée. Ce paramètre est vidé lors d'un \fBexecve\fP(2). .TP \fBMADV_KEEPONFORK\fP (depuis Linux 4.14) .\" commit d2cd9ede6e193dd7d88b6d27399e96229a551b19 Annuler l'effet d’un \fBMADV_WIPEONFORK\fP antérieur. .SH "VALEUR RENVOYÉE" En cas de succès \fBmadvise\fP() renvoie zéro. En cas d'erreur, il renvoie \fB\-1\fP et \fIerrno\fP est positionné de façon adéquate. .SH ERREURS .TP \fBEACCES\fP \fIadvice\fP est \fBMADV_REMOVE\fP, mais la plage d'adresses indiquée n'est pas un tableau partagé où on peut écrire. .TP \fBEAGAIN\fP Une ressource du noyau est temporairement indisponible. .TP \fBEBADF\fP La projection existe, mais la zone n'est pas associée à un fichier. .TP \fBEINVAL\fP .\" .I length .\" is zero, \fIaddr\fP n'est pas aligné sur une page ou \fIlength\fP est négatif. .TP \fBEINVAL\fP \fIadvice\fP n'est pas valable. .TP \fBEINVAL\fP \fIadvice\fP vaut \fBMADV_DONTNEED\fP ou \fBMADV_REMOVE\fP et la plage d'adresses indiquée inclut des pages verrouillées, immenses TLB ou \fBVM_PFNMAP\fP. .TP \fBEINVAL\fP \fIadvice\fP vaut \fBMADV_MERGEABLE\fP ou \fBMADV_UNMERGEABLE\fP, mais le noyau n'a pas été configuré avec l'option \fBCONFIG_KSM\fP. .TP \fBEINVAL\fP \fIadvice\fP vaut \fBMADV_FREE\fP ou \fBMADV_WIPEONFORK\fP mais la plage d'adresses indiquée inclut un fichier, des TLB immenses, \fBMAP_SHARED\fP ou des plages \fBVM_PFNMAP\fP. .TP \fBEIO\fP (pour \fBMADV_WILLNEED\fP) Suivre la consigne de pagination sur cette zone dépasserait la limite maximale de mémoire physique utilisable par le processus. .TP \fBENOMEM\fP (pour \fBMADV_WILLNEED\fP) Mémoire insuffisante\ ; échec de pagination. .TP \fBENOMEM\fP Les adresses de la plage spécifiée ne sont pas projetées actuellement, ou n'appartiennent pas à l'espace d'adressage du processus. .TP \fBEPERM\fP \fIadvice\fP vaut \fBMADV_HWPOISON\fP, mais l'appelant n'a pas la capacité \fBCAP_SYS_ADMIN\fP. .SH VERSIONS .\" commit d3ac21cacc24790eb45d735769f35753f5b56ceb Depuis Linux 3.18, la gestion de cet appel système est optionnelle, à partir de l'option de configuration \fBCONFIG_ADVISE_SYSCALLS\fP. .SH CONFORMITÉ \fBmadvise\fP() n'est spécifié dans aucun standard. Des versions de cet appel système, qui implémentent une grande variété de valeurs \fIadvice\fP, existent sur de nombreuses autres implémentations. D'autres implémentent au moins les attributs ci\-dessus sous \fIConventional advice flags\fP (attributs de conseil conventionnels), avec d'autres variantes de sémantique. .PP POSIX.1\-2001 spécifie \fBposix_madvise\fP(3) avec des constantes \fBPOSIX_MADV_NORMAL\fP, \fBPOSIX_MADV_RANDOM\fP, \fBPOSIX_MADV_SEQUENTIAL\fP, \fBPOSIX_MADV_WILLNEED\fP, \fBPOSIX_MADV_DONTNEED\fP et ainsi de suite, avec un comportement proche des attributs nommés de la même manière que ceux listés ci\-dessus. .SH NOTES .SS "Notes pour Linux" .\" .SH HISTORY .\" The .\" .BR madvise () .\" function first appeared in 4.4BSD. L'implémentation Linux nécessite que l'adresse \fIaddr\fP soit alignée sur une page, et permet que \fIlength\fP vaille zéro. S'il y a des parties de la plage d'adresses spécifiée qui ne sont pas projetées, la version Linux de \fBmadvise\fP() les ignore et applique l'appel au reste de la plage (mais renvoie \fBENOMEM\fP comme il se doit). .SH "VOIR AUSSI" \fBgetrlimit\fP(2), \fBmincore\fP(2), \fBmmap\fP(2), \fBmprotect\fP(2), \fBmsync\fP(2), \fBmunmap\fP(2), \fBprctl\fP(2), \fBposix_madvise\fP(3), \fBcore\fP(5) .SH COLOPHON Cette page fait partie de la publication\ 5.04 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Philippe MENGUAL . Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .