.\" -*- coding: UTF-8 -*- .\" Copyright 2001, David Gómez .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH madvise 2 "8 février 2026" "Linux man\-pages 6.18" .SH NOM madvise \- Configurer l'utilisation de la mémoire .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP,\ \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .P \fBint madvise(\fPsize_t size; \fB void \fP\fIaddr\fP\fB[\fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB, int \fP\fIadvice\fP\fB);\fP .fi .P .RS -4 Exigences de macros de test de fonctionnalités pour la glibc (consulter \fBfeature_test_macros\fP(7)) : .RE .P \fBmadvise\fP() : .nf Depuis la glibc 2.19 : _DEFAULT_SOURCE Jusqu'à la glibc 2.19 incluse : _BSD_SOURCE .fi .SH DESCRIPTION The \fBmadvise\fP() system call is used to give advice or directions to the kernel about the address range beginning at address \fIaddr\fP and with size \fIsize\fP. \fBmadvise\fP() only operates on whole pages, therefore \fIaddr\fP must be page\-aligned. The value of \fIsize\fP is rounded up to a multiple of page size. In most cases, the goal of such advice is to improve system or application performance. .P .\" .\" ====================================================================== .\" 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. .P 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. (Ainsi, 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 mappages de fichiers partagés, ceux anonymes partagés et 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éros à la demande pour les tableaux privés anonymes. .IP Remarquez qu'appliquée à des mappages 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 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). .IP .\" .\" ====================================================================== .\" Support for Huge TLB pages was added in Linux 5.18. Addresses within a mapping backed by Huge TLB pages must be aligned to the underlying Huge TLB page size, and the range size is rounded up to a multiple of the underlying Huge TLB page size. .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érer jusqu'à une plage donnée de pages et son stockage de repli associé. Cela revient à faire 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 données de valeur zéro. .IP La 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 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. Les systèmes de fichiers qui ne gèrent pas \fBMADV_REMOVE\fP échouent avec l'erreur \fBEOPNOTSUPP\fP. .IP Support for the Huge TLB filesystem was added in Linux 4.3. .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ù un mappage est récupéré à l'aide de \fBfork\fP(2). .TP \fBMADV_HWPOISON\fP (depuis Linux 2.6.32) .\" commit 9893e49d64a4874ea67849ee2cfbf3f3d6817573 Poison the pages in the range specified by \fIaddr\fP and \fIsize\fP and handle subsequent references to those pages like a hardware memory corruption. This operation is available only for privileged (\fBCAP_SYS_ADMIN\fP) processes. This operation may result in the calling process receiving a \fBSIGBUS\fP and the page being unmapped. .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 Enable Kernel Samepage Merging (KSM) for the pages in the range specified by \fIaddr\fP and \fIsize\fP. The kernel regularly scans those areas of user memory that have been marked as mergeable, looking for pages with identical content. These are replaced by a single write\-protected page (which is automatically copied if a process later wants to update the content of the page). KSM merges only private anonymous pages (see \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) Undo the effect of an earlier \fBMADV_MERGEABLE\fP operation on the specified address range; KSM unmerges whatever pages it had merged in the address range specified by \fIaddr\fP and \fIsize\fP. .TP \fBMADV_SOFT_OFFLINE\fP (depuis Linux 2.6.33) .\" commit afcf938ee0aac4ef95b1a23bac704c6fbeb26de6 Soft offline the pages in the range specified by \fIaddr\fP and \fIsize\fP. The memory of each page in the specified range is preserved (i.e., when next accessed, the same content will be visible, but in a new physical page frame), and the original page is offlined (i.e., no longer used, and taken out of normal memory management). The effect of the \fBMADV_SOFT_OFFLINE\fP operation is invisible to (i.e., does not change the semantics of) the calling process. .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/ Enable Transparent Huge Pages (THP) for pages in the range specified by \fIaddr\fP and \fIsize\fP. The kernel will regularly scan the areas marked as huge page candidates to replace them with huge pages. The kernel will also allocate huge pages directly when the region is naturally aligned to the huge page size (see \fBposix_memalign\fP(2)). .IP Cette fonctionnalité est d'abord destinée aux applications qui utilisent tout à la fois de grands mappages, 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 La plupart des configurations de noyaux classiques fournissent un comportement à la manière de \fBMADV_HUGEPAGE\fP par défaut, et ainsi \fBMADV_HUGEPAGE\fP n'est normalement pas nécessaire. Il est le plus souvent utile pour les systèmes embarqués où un comportement de type \fBMADV_HUGEPAGE\fP peut ne pas être activé par défaut dans le noyau. Sur de tels systèmes, cet attribut peut être utilisé pour activer THP de manière sélective. À chaque fois que \fBMADV_HUGEPAGE\fP est utilisé, il devrait toujours l'être dans des régions de la mémoire où le développeur sait à l'avance que le motif d'accès ne risquera pas d'augmenter l'empreinte de l'application quand les pages immenses transparentes sont actives. .IP .\" commit 99cb0dbd47a15d395bf3faa78dc122bc5efe3fc0 Depuis Linux 5.4, une analyse automatique des zones éligibles et des remplacements par des pages immenses s'effectue sur les pages anonymes et privées (voir \fBmmap\fP(2)), des pages shmem et des pages mises en cache. Pour tous les types de mémoire, la mémoire ne peut être remplacée que par des pages immenses sur des limites alignées sur les pages immenses. Pour la mémoire projetée sur un fichier (y compris tmpfs (voir \fBtmpfs\fP(2)), le mappage doit naturellement être aussi aligné sur une page immense dans le fichier. De plus, pour les fichiers sauvegardés, la mémoire non tmpfs, le fichier ne doit pas être accessible en écriture et le tableau doit être exécutable. .IP The VMA must not be marked \fBVM_NOHUGEPAGE\fP, \fBVM_HUGETLB\fP, \fBVM_IO\fP, \fBVM_DONTEXPAND\fP, \fBVM_MIXEDMAP\fP, or \fBVM_PFNMAP\fP, nor can it be stack memory or backed by a DAX\-enabled device (unless the DAX device is hot\-plugged as System RAM). The process can have \fBPR_SET_THP_DISABLE\fP set only if \fBPR_THP_DISABLE_EXCEPT_ADVISED\fP is set (see \fBprctl\fP(2)). .IP Les opérations \fBMADV_HUGEPAGE\fP, \fBMADV_NOHUGEPAGE\fP et \fBMADV_COLLAPSE\fP ne sont disponibles que si le noyau a été configuré avec \fBCONFIG_TRANSPARENT_HUGEPAGE\fP et la mémoire pour les fichiers/shmem est seulement prise en charge que si le noyau a été configuré avec \fBCONFIG_READ_ONLY_THP_FOR_FS\fP. .TP \fBMADV_NOHUGEPAGE\fP (depuis Linux 2.6.38) Ensures that memory in the address range specified by \fIaddr\fP and \fIsize\fP will not be backed by transparent hugepages. .TP \fBMADV_COLLAPSE\fP (depuis Linux 6.1) .\" commit 7d8faaf155454f8798ec56404faca29a82689c77 .\" commit 34488399fa08faaf664743fa54b271eb6f9e1321 Effectuer une suppression synchronisée autant que possible avec les pages natives projetées par la plage de mémoire en Transparent Huge Pages (THP). \fBMADV_COLLAPSE\fP agit sur l'état actuel de la mémoire du processus appelant et ne fait aucun changement permanent ou ne garantit rien sur la manière dont les pages seront projetées, construites ou défaillantes dans le futur. .IP /\fBMADV_COLLAPSE\fP gère les pages anonymes privées (voir \fBmmap\fP(2)), les pages shmem et les pages mises en cache. Voir \fBMADV_HUGEPAGE\fP pour des informations générales sur les exigences de mémoire de THP. Si la plage fournie couvre plusieurs VMA, la sémantique de la suppression dans chaque VMA est indépendante des autres. Si la suppression d'une région dimensionnée ou alignée sur une page immense donnée échoue, l'opération peut continuer à essayer de supprimer le reste de la mémoire indiquée. \fBMADV_COLLAPSE\fP alignera automatiquement la plage fournie sur la page immense. .IP Toutes les pages non résidentes faisant partie de la plage seront d'abord échangées ou mises en erreur, avant d'être copiées sur une page immense fraîchement allouée. Si les pages natives représentent la même page immense projetée en PTE et si elles sont alignées correctement, l'allocation d'une nouvelle page immense peut être évitée et la suppression peut se faire directement. Les pages non projetées verront leurs données initialisées directement à \fB0\fP dans la nouvelle page immense. Toutefois, pour chaque région éligible dimensionnée/alignée sur une page immense à supprimer, au moins une page doit être récupérée par la mémoire physique. .IP \fBMADV_COLLAPSE\fP est indépendant du paramétrage du sysfs (voir \fBsysfs\fP(5)) dans \fI/sys/kernel/mm/transparent_hugepage\fP, tant pour déterminer l'éligibilité THP que la sémantique d'allocation. Voir le fichier \fIDocumentation/admin\-guide/mm/transhuge.rst\fP des sources du noyau Linux pour plus d'informations. \fBMADV_COLLAPSE\fP ignore également le montage tmpfs \fBhuge=\fP lorsqu'il agit sur des fichiers tmpfs. L'allocation de nouvelles pages immenses peut entamer une libération/compactage directs indépendamment des attributs de la VMA (encore que \fBVM_NOHUGEPAGE\fP est toujours respecté). .IP Lorsque le système a plusieurs nœuds NUMA, la page immense sera allouée à partir du nœud contenant les pages les plus natives. .IP Si toutes les régions dimensionnées ou alignées sur la page immense et incluses dans la plage fournie ont été supprimées avec succès ou si les THP ont déjà été projetées PMD, cette opération se terminera avec succès. Remarquez que cela ne garantit rien quant aux autres projections possibles de la mémoire. Si plusieurs zones dimensionnées ou alignées sur une page immense échouent à être supprimées, seul le code d'erreur le plus récent sera positionné dans \fIerrno\fP. .TP \fBMADV_DONTDUMP\fP (depuis Linux 3.4) .\" commit 909af768e88867016f427264ae39d27a57b6a8ed .\" commit accb61fe7bb0f5c2a4102239e4981650f9048519 Exclude from a core dump those pages in the range specified by \fIaddr\fP and \fIsize\fP. This is useful in applications that have large areas of memory that are known not to be useful in a core dump. The effect of \fBMADV_DONTDUMP\fP takes precedence over the bit mask that is set via the \fI/proc/\fPpid\fI/coredump_filter\fP file (see \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) The application no longer requires the pages in the range specified by \fIaddr\fP and \fIsize\fP. The kernel can thus free these pages, but the freeing could be delayed until memory pressure occurs. For each of the pages that has been marked to be freed but has not yet been freed, the free operation will be canceled if the caller writes into the page. After a successful \fBMADV_FREE\fP operation, any stale data (i.e., dirty, unwritten pages) will be lost when the kernel frees the pages. However, subsequent writes to pages in the range will succeed and then kernel cannot free those dirtied pages, so that the caller can always see just written data. If there is no subsequent write, the kernel can free the pages at any time. Once pages in the range have been freed, the caller will see zero\-fill\-on\-demand pages upon subsequent page references. .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 graines 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 sur 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. .TP \fBMADV_COLD\fP (depuis Linux 5.4) .\" commit 9c276cc65a58faf98be8e56962745ec99ab87636 Désactiver une plage de pages donnée. Cela en fera des cibles de libération plus probables en cas de pression sur la mémoire. Il s'agit d'une opération non destructive. Ce conseil pourrait être ignoré pour certaines pages de la plage s'il n'est pas applicable. .TP \fBMADV_PAGEOUT\fP (depuis Linux 5.4) .\" commit 1a4e58cce84ee88129d5d49c064bd2852b481357 Libérer une plage de pages donnée. Cela est utilisé pour libérer de la mémoire occupée par ces pages. Si une page est anonyme, elle peut être échangée. Si une page est mise en cache et sale, elle sera réécrite dans le stockage de repli. Le conseil pourrait être ignoré pour certaines pages de la plage s'il n'est pas applicable. .TP \fBMADV_POPULATE_READ\fP (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 à partir de chaque page ; par contre éviter l'accès réel en mémoire qui aurait été fait après la gestion des erreurs. .IP Contrairement à \fBMAP_POPULATE\fP, \fBMADV_POPULATE_READ\fP ne cache pas les erreurs, il peut être appliqué à 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 à partir du disque ; mais les pages ne seront pas salies, donc il ne faudra pas les réécrire sur le disque lorsqu'on les sortira de la mémoire. .IP Selon le mappage sous\-jacent, projeter la page de zéros partagée, pré\-allouer la mémoire ou lire le fichier sous\-jacent ; les fichiers contenant des trous pourraient ou pas pré\-allouer des blocs. Si le peuplement échoue, aucun signal \fBSIGBUS\fP n'est généré mais une erreur est renvoyée. .IP Si \fBMADV_POPULATE_READ\fP réussit, tous les tables de pages ont été peuplées (prefaulted) et lisibles une fois. Si \fBMADV_POPULATE_READ\fP échoue, certaines tables de page pourraient avoir été peuplées. .IP \fBMADV_POPULATE_READ\fP ne peut pas être appliqué aux mappages sans droit de lecture ni projections spéciales, par exemple celles marquées par des drapeaux tels que \fBVM_PFNMAP\fP ou \fBVM_IO\fP, ou à des régions de mémoire secrètes créées par en utilisant \fBmemfd_secret(2)\fP. .IP Remarquez qu'avec \fBMADV_POPULATE_READ\fP, le processus peut être tué n'importe quand si le système n'a plus assez de mémoire. .TP \fBMADV_POPULATE_WRITE\fP (depuis Linux 5.14) Peupler (prefault) les tables de pages lisibles, mettant en erreur toutes les pages de la plage comme si on écrivait manuellement dans chaque page ; par contre éviter l'accès réel en mémoire qui aurait été fait après la gestion des erreurs. .IP Contrairement à \fBMAP_POPULATE\fP, MADV_POPULATE_WRITE ne cache pas les erreurs, il peut être appliqué à tout ou partie des mappages existants et il peuplera (prefault) toujours les tables de pages accessibles en écriture. Un exemple d'utilisation est de pré\-allouer de la mémoire et d'interrompre toute copie sur écriture. .IP Selon le mappage sous\-jacent, projeter la page de zéros partagée, pré\-allouer la mémoire ou lire le fichier sous\-jacent ; les fichiers contenant des trous pré\-alloueront des blocs. Si le peuplement échoue, aucun signal \fBSIGBUS\fP n'est généré mais une erreur est renvoyée. .IP Si \fBMADV_POPULATE_WRITE\fP réussit, tous les tables de pages ont été peuplés (prefaulted) et écrits une fois. Si \fBMADV_POPULATE_WRITE\fP échoue, certaines tables de page pourraient avoir été peuplées. .IP \fBMADV_POPULATE_WRITE\fP ne peut pas être appliqué aux mappages sans droit d'écriture ni projections spéciales, par exemple celles marquées par des drapeaux tels que \fBVM_PFNMAP\fP ou \fBVM_IO\fP, ou à des régions de mémoire secrètes créées par en utilisant \fBmemfd_secret(2)\fP. .IP Remarquez qu'avec \fBMADV_POPULATE_WRITE\fP, le processus peut être tué n'importe quand si le système n'a plus assez de mémoire. .TP \fBMADV_GUARD_INSTALL\fP (since Linux 6.13) Install a lightweight guard region into the range specified by \fIaddr\fP and \fIsize\fP, causing any read or write in the range to result in a \fBSIGSEGV\fP signal being raised. .IP If the region maps memory pages those mappings will be replaced as part of the operation, though if \fBMADV_GUARD_INSTALL\fP is applied to regions containing pre\-existing lightweight guard regions, they are left in place. .IP Prior to Linux 6.15, this operation was supported only for writable anonymous private mappings. Since Linux 6.15, both anonymous and file\-backed mappings are supported, including read\-only mappings. .IP The mapping must not be mlock'd, map hugetlb ranges, nor contain special mappings. For example, mappings marked with kernel\-internal flags such as \fBVM_PFNMAP\fP or \fBVM_IO\fP, or secret memory regions created using \fBmemfd_secret\fP(2). .IP An \fBEINVAL\fP error is returned if it is attempted on any other kind of mapping. .IP This operation is more efficient than mapping a new region of memory \fBPROT_NONE\fP, as it does not require the establishment of new mappings. Instead, regions of an existing mapping simply have their page tables manipulated to establish the desired behavior. No additional memory is used. .IP Lightweight guard regions remain on fork (except for any parts which have had \fBMADV_WIPEONFORK\fP applied to them), and are not removed by \fBMADV_DONTNEED\fP, \fBMADV_FREE\fP, \fBMADV_PAGEOUT\fP, or \fBMADV_COLD\fP. .IP Attempting to \fBmlock\fP(2) lightweight guard regions will fail, as will \fBMADV_POPULATE_READ\fP or \fBMADV_POPULATE_WRITE\fP. .IP If the mapping has its attributes changed, or is split or partially unmapped, any existing guard regions remain in place (except if they are unmapped). .IP If a mapping is moved using \fBmremap\fP(2), lightweight guard regions are moved with it. .IP Lightweight guard regions are removed when unmapped, on process teardown, or when the \fBMADV_GUARD_REMOVE\fP operation is applied to them. .TP \fBMADV_GUARD_REMOVE\fP (since Linux 6.13) Remove any lightweight guard regions which exist in the range specified by \fIaddr\fP and \fIsize\fP. .IP All mappings in the range other than lightweight guard regions are left in place. The operation is supported on those mappings permitted by \fBMADV_GUARD_INSTALL\fP in addition to mlock()'d mappings, returning an \fBEINVAL\fP error otherwise. .IP When lightweight guard regions are removed, they act as empty regions of the containing mapping. Therefore, anonymous private mappings become zero\-fill\-on\-demand pages, and file\-backed mappings are repopulated with the memory contents from the up\-to\-date contents of the underlying mapped file. .IP If any transparent huge pages are encountered in the operation, they are left in place. .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é pour indiquer l'erreur. .SH ERREURS .TP \fBEACCES\fP \fIadvice\fP est \fBMADV_REMOVE\fP, mais la plage d'adresses indiquée n'est pas un mappage 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 \fBEBUSY\fP (pour \fBMADV_COLLAPSE\fP) N'a pas pu charger la page immense dans cgroup : la limite du cgroup a été dépassée. .TP \fBEBUSY\fP (for \fBMADV_SOFT_OFFLINE\fP) Any pages within the specified address range could not be offlined. This might occur if the page is currently in use or locked. .TP \fBEFAULT\fP \fIadvice\fP vaut \fBMADV_POPULATE_READ\fP ou \fBMADV_POPULATE_WRITE\fP et le peuplement (prefault) des tables de pages a échoué car un \fBSIGBUS\fP aurait généré un accès réel à la mémoire et la raison n'est pas une page empoisonnée d'un HW (lesquelles peuvent être créées, par exemple, en utilisant le drapeau \fBMADV_HWPOISON\fP décrit ailleurs dans cette page). .TP \fBEINVAL\fP .\" .I size .\" is zero, \fIaddr\fP is not page\-aligned or \fIsize\fP is negative. .TP \fBEINVAL\fP \fIadvice\fP n'est pas valable. .TP \fBEINVAL\fP \fIadvice\fP vaut \fBMADV_COLD\fP ou \fBMADV_PAGEOUT\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_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 \fBEINVAL\fP \fIadvice\fP vaut \fBMADV_POPULATE_READ\fP ou \fBMADV_POPULATE_WRITE\fP, mais la plage d'adresses indiquée inclut des plages aux droits insuffisants ou ayant des mappages spéciaux, par exemple marqués par des drapeaux internes au noyau tels que \fBVM_IO\fP ou \fBVM_PFNMAP\fP, ou bien des régions de mémoire secrètes créées en utilisant \fBmemfd_secret\fP(2). .TP \fBEINVAL\fP \fIadvice\fP is \fBMADV_GUARD_INSTALL\fP or \fBMADV_GUARD_REMOVE\fP, but the specified address range contains an unsupported mapping. .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 (pour \fBMADV_COLLAPSE\fP) Mémoire insuffisante, impossible d'allouer des pages immenses. .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 \fBENOMEM\fP \fIadvice\fP vaut \fBMADV_POPULATE_READ\fP ou \fBMADV_POPULATE_WRITE\fP et le peuplement (prefaulting) des tables de pages a échoué du fait d'une mémoire insuffisante. .TP \fBEPERM\fP \fIadvice\fP vaut \fBMADV_HWPOISON\fP, mais l'appelant n'a pas la capacité \fBCAP_SYS_ADMIN\fP. .TP \fBEHWPOISON\fP \fIadvice\fP vaut \fBMADV_POPULATE_READ\fP ou \fBMADV_POPULATE_WRITE\fP et le peuplement (prefault) des tables de page a échoué car une page empoisonnée d'un HW (des pages empoisonnées de HW peuvent être créées, par exemple, en utilisant le drapeau \fBMADV_HWPOISON\fP décrit ailleurs dans cette page) a été rencontrée. .SH VERSIONS 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. .P 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. .SS Linux The Linux implementation requires that the address \fIaddr\fP be page\-aligned, and allows \fIsize\fP to be zero. If there are some parts of the specified address range that are not mapped, the Linux version of \fBmadvise\fP() ignores them and applies the call to the rest (but returns \fBENOMEM\fP from the system call, as it should). .P \fImadvise(0,\ 0,\ advice)\fP renverra \fB0\fP si \fIadvice\fP est pris en charge par le noyau et s'il peut s'appuyer dessus pour sonder la prise en charge. .SH NORMES Aucun. .SH HISTORIQUE Apparu dans 4.4BSD. .P .\" commit d3ac21cacc24790eb45d735769f35753f5b56ceb Depuis Linux 3.18, la gestion de cet appel système est optionnelle, dépendant du réglage de l'option de configuration \fBCONFIG_ADVISE_SYSCALLS\fP. .SH "VOIR AUSSI" \fBgetrlimit\fP(2), \fBmemfd_secret\fP(2), \fBmincore\fP(2), \fBmmap\fP(2), \fBmprotect\fP(2), \fBmsync\fP(2), \fBmunmap\fP(2), \fBprctl\fP(2), \fBprocess_madvise\fP(2), \fBposix_madvise\fP(3), \fBcore\fP(5) .PP .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 . .PP 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. .PP 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 .