proc_sys_vm(5)

NOM
/proc/sys/vm/ - Sous-sytème de mémoire virtuelle

DESCRIPTION

/proc/sys/vm/
    Ce répertoire contient des fichiers de paramétrage de la gestion de mémoire, des tampons et du cache.

/proc/sys/vm/admin_reserve_kbytes (depuis Linux 3.10)
    Ce fichier définit le montant de mémoire libre (en Kio) qui doit être réservée sur le système pour les utilisateurs ayant la capacité CAP_SYS_ADMIN.

    La valeur par défaut dans ce fichier est le minimum de [3 % de pages libres, 8 Mio] exprimé en Kio. La valeur par défaut est destinée à en fournir assez pour que le superutilisateur puisse se connecter et tuer un processus si nécessaire, en utilisant le mode « guess » d’allocation excessive de mémoire (overcommit – c’est-à-dire 0 dans /proc/sys/vm/overcommit_memory).

    Les systèmes qui s'exécutent dans le mode « overcommit never » (c’est-à-dire 2 dans /proc/sys/vm/overcommit_memory) doivent augmenter la valeur dans ce fichier pour prendre en compte la taille totale de mémoire virtuelle pour les programmes utilisés pour récupérer (par exemple, login(1), ssh(1) et top(1)). Sinon le superutilisateur pourrait ne pas être capable de se connecter pour récupérer le système. Par exemple, pour x86-64 une valeur acceptable est 131072 (128 Mio réservés).

    Le changement de la valeur dans ce fichier prend effet dès qu’une application requiert de la mémoire.

/proc/sys/vm/compact_memory (depuis Linux 2.6.35)
    Lorsque 1 est inscrit dans ce fichier, toutes les zones sont compactées de façon à ce que toute la mémoire libre soit constituée de blocs contigus si possible. L’effet de cette action est visible en examinant /proc/buddyinfo.

    Ce fichier n’est présent que si le noyau est configuré avec l'option CONFIG_COMPACTION.

/proc/sys/vm/drop_caches (depuis Linux 2.6.16)
    Écrire dans ce fichier force le noyau à libérer les caches, entrées de répertoire et inœuds propres de la mémoire, en libérant ainsi cette mémoire. Ce peut être utile pour les tests de gestion de mémoire et la réalisation de tests reproductibles de performance de systèmes de fichiers. Puisqu’une écriture dans ce fichier fait perdre tous les avantages du cache, cela peut dégrader l’intégralité des performances du système.

    Pour libérer les pages de cache, utilisez :

        echo 1 > /proc/sys/vm/drop_caches

    Pour libérer les entrées de répertoire et les inœuds, utilisez :

        echo 2 > /proc/sys/vm/drop_caches

    Pour libérer les pages de cache, entrées de répertoire et inœuds, utilisez :

        echo 3 > /proc/sys/vm/drop_caches

    Parce que l’écriture dans ce fichier est non destructive, et que les objets sales ne sont pas libérables, l'utilisateur devrait utiliser la commande sync(8) au préalable.

/proc/sys/vm/sysctl_hugetlb_shm_group (depuis Linux 2.6.7)
    Ce fichier éditable contient un ID de groupe autorisé à allouer de la mémoire en utilisant des pages volumineuses. Si un processus à un ID de groupe de système de fichiers ou tout autre ID de groupe supplémentaire qui correspond à cet ID de groupe, il peut réaliser des allocations de pages volumineuses sans détenir la capacité CAP_IPC_LOCK. Consulter memfd_create(2), mmap(2) et shmget(2).

/proc/sys/vm/legacy_va_layout (depuis Linux 2.6.9)
    S'il est différent de zéro, cela désactive la nouvelle disposition de carte mémoire 32 bits. Le noyau utilisera alors la disposition patrimoniale (2.4) pour tous les processus.

/proc/sys/vm/memory_failure_early_kill (depuis Linux 2.6.32)
    Contrôler comment tuer les processus lorsqu'une erreur mémoire non corrigée (typiquement une erreur sur 2 bits dans un module de mémoire), qui ne peut pas être gérée par le noyau, est détectée en tâche de fond par le matériel. Dans certains cas (par exemple s'il existe une copie valable de la page sur disque), le noyau est capable de gérer cette erreur de manière transparente sans qu'aucune application ne soit touchée. Mais si le noyau n'a pas de copie à jour des données, il va tuer des processus afin d'empêcher la propagation de la corruption des données.

    Ce fichier peut contenir l'une des valeurs suivantes :

    1   Tuer dès que la corruption est détectée tous les processus qui ont une projection de la page corrompue et non rechargeable. Notez que cela n'est pas possible avec quelques types de pages, comme les données allouées en interne par le noyau ou le cache d'échange (swap), mais cela fonctionne avec la majorité des pages utilisateur.

    0   Supprimer la projection de la page corrompue dans tous les processus, et ne tuer les processus que s'ils essaient d'y accéder.

    L'action de tuer le processus est effectuée en envoyant un signal SIGBUS avec si_code mis à BUS_MCEERR_AO. Les processus peuvent gérer cette situation s'ils le souhaitent ; consulter sigaction(2) pour plus de précisions.

    Cette fonctionnalité n'est disponible que sur les architectures/plateformes avec une gestion avancée de vérification de la machine et dépend des possibilités du matériel.

    Les applications peuvent modifier individuellement le paramètre memory_failure_early_kill avec l'opération PR_MCE_KILL de prctl(2).

    Ce fichier n'est disponible que si le noyau est configuré avec l'option CONFIG_MEMORY_FAILURE.

/proc/sys/vm/memory_failure_recovery (depuis Linux 2.6.32)
    Activer la récupération d’une erreur mémoire (si la plateforme le permet).

    1   Tenter une récupération.

    0   Toujours sortir en mode panique sur une erreur mémoire.

    Ce fichier n'est disponible que si le noyau est configuré avec l'option CONFIG_MEMORY_FAILURE.

/proc/sys/vm/oom_dump_tasks (depuis Linux 2.6.25)
    Activer la production d'une image des tâches du système (à l'exception des threads du noyau) lors des mises à mort sur mémoire saturée (OOM-killing). L'image contient les informations suivantes pour chaque tâche (thread ou processus) : ID de thread, ID utilisateur réel, ID groupe de threads (ID du processus), taille de la mémoire virtuelle, taille de la mémoire résidente, CPU sur lequel la tâche était ordonnancée, valeur de oom_adj (voir la description de /proc/pid/oom_adj) et le nom de la commande. La production de cette image est utile pour trouver la raison de la mise à mort sur mémoire saturée et pour identifier la tâche défectueuse qui en est la cause.

    Avec la valeur zéro, l'information est supprimée. Sur les très gros systèmes avec des milliers de tâches, il peut être impossible de créer l'image avec les informations d’état de la mémoire pour chacune d'entre elles. Ces systèmes ne doivent pas être obligés de pénaliser leurs performances dans ces cas de pénurie de mémoire si ces informations ne sont pas souhaitées.

    Pour toute valeur différente de zéro, ces informations sont présentées à chaque fois que le système (OOM-killer) de mise à mort sur mémoire saturée tue réellement une tâche monopolisation la mémoire (memory-hogging).

    La valeur par défaut est 0.

/proc/sys/vm/oom_kill_allocating_task (depuis Linux 2.6.24)
    Ce fichier active ou désactive la mise à mort de la tâche qui a créé le dépassement de mémoire dans les situations de mémoire saturée.

    Avec une valeur de zéro, l’OOM-killer parcourra la liste entière des tâches et celle à tuer sera sélectionnée en fonction d'heuristiques. Cette valeur sélectionne normalement une tâche monopolisant une grosse quantité de mémoire et qui libérera beaucoup de mémoire lorsqu'elle sera tuée.

    Avec une valeur différente de zéro, l’OOM-killer tuera simplement la tâche provoquant le dépassement de mémoire. Cela évite un parcours potentiellement coûteux de la liste des tâches.

    Si /proc/sys/vm/panic_on_oom est différent de zéro, il est prioritaire sur toute valeur utilisée dans /proc/sys/vm/oom_kill_allocating_task.

    La valeur par défaut est 0.

/proc/sys/vm/overcommit_kbytes (depuis Linux 3.14)
    Ce fichier éditable fournit une alternative à /proc/sys/vm/overcommit_ratio pour contrôler CommitLimit quand /proc/sys/vm/overcommit_memory a pour valeur 2. Il permet de spécifier la quantité de mémoire réservée en plus sous forme de valeur absolue (en ko), plutôt qu’en pourcentage comme ce qui est fait pour overcommit_ratio. Cela permet un contrôle plus fin de CommitLimit sur les systèmes ayant des tailles de mémoire extrêmement importantes.

    Seul un des deux fichiers overcommit_kbytes ou overcommit_ratio peut avoir un effet. Si overcommit_kbytes a une valeur différente de zéro, il est utilisé pour calculer CommitLimit, sinon c'est overcommit_ratio qui est utilisé. Écrire une valeur dans un de ces fichiers fera que la valeur dans l’autre fichier sera définie à zéro.

/proc/sys/vm/overcommit_memory
    Ce fichier contient le mode pour le comptage de la mémoire virtuelle du noyau. Les valeurs sont :

        0 : gestion heuristique du dépassement d'allocation mémoire (c'est la valeur par défaut)
        1 : pas de gestion du dépassement, ne jamais vérifier
        2 : toujours vérifier, gestion stricte du dépassement

    Dans le mode 0, les appels à mmap(2) utilisant MAP_NORESERVE ne sont pas vérifiés et le niveau de vérification par défaut est très faible, avec le risque d'avoir un processus tué à cause du manque de mémoire (« OOM-killed »).

    Dans le mode 1, le noyau prétend qu’il y a toujours assez de mémoire, jusqu’à ce que la mémoire soit réellement épuisée. Un cas d’utilisation de ce mode est celui des applications de calcul scientifique utilisant de grands tableaux creux. Avant Linux 2.6.0, toute valeur différente de zéro impliquait le mode 1.

    Dans le mode 2 (disponible depuis Linux 2.6), l’espace total d’adresses virtuelles pouvant être alloué (CommitLimit dans /proc/meminfo) est calculé ainsi :

        CommitLimit = (total_RAM - total_huge_TLB) *
        	      overcommit_ratio / 100 + total_swap

    où :

    -   total_RAM est la quantité totale de RAM sur le système ;

    -   total_huge_TLB est la quantité de mémoire réservée pour les pages volumineuses ;

    -   overcommit_ratio est la valeur dans /proc/sys/vm/overcommit_ratio ;

    -   total_swap est la quantité d’espace d’échange.

    Par exemple, sur un système ayant 16 Go de RAM physique et 16 Go d'espace d'échange, aucun espace réservé pour les pages volumineuses et avec un overcommit_ratio de 50, cette formule renvoie un CommitLimit de 24 Go.

    Depuis Linux 3.14, si la valeur dans /proc/sys/vm/overcommit_kbytes est différente de zéro, CommitLimit est calculé ainsi :

        CommitLimit = overcommit_koctets + total_swap

    Consulter aussi la description dans /proc/sys/vm/admin_reserve_kbytes et /proc/sys/vm/user_reserve_kbytes.

/proc/sys/vm/overcommit_ratio (depuis Linux 2.6.0)
    Ce fichier éditable définit un pourcentage de dépassement de mémoire. La valeur par défaut dans ce fichier est 50. Consulter la description de /proc/sys/vm/overcommit_memory.

/proc/sys/vm/panic_on_oom (depuis Linux 2.6.18)
    Ce fichier active ou désactive le déclenchement d'une panique dans les situations de mémoire saturée.

    Si ce fichier est configuré à la valeur 0, l’OOM-killer du noyau tuera un processus perturbateur. En général, il peut tuer un processus perturbateur sans tuer le système.

    Si ce fichier est configuré à la valeur 1, le noyau paniquera dans une situation de mémoire saturée. Cependant, si un processus limite les allocations à certains nœuds en utilisant des politiques de mémoire (MPOL_BIND de mbind(2)) ou des ensembles de processeurs (cpuset(7)), et si ces nœuds voient leur mémoire saturée, un processus peut être tué par l’OOM-killer. Aucune panique ne survient dans ce cas. Comme de la mémoire est disponible sur d'autres nœuds, le système n'a pas entièrement atteint une situation de mémoire saturée.

    Si ce fichier est configuré à la valeur 2, le noyau panique toujours dans une situation de mémoire saturée.

    La valeur par défaut est 0. Les valeurs 1 et 2 sont utilisées pour la récupération en cas d'erreur de groupements. Sélectionner l'un ou l'autre en fonction de la politique de récupération en cas d'erreur.

/proc/sys/vm/swappiness
    La valeur dans ce fichier contrôle le niveau d'agressivité utilisé par le noyau pour déplacer des pages mémoire dans l'espace d'échange. Les valeurs élevées indiquent une agressivité plus importante. La valeur par défaut est de 60.

/proc/sys/vm/user_reserve_kbytes (depuis Linux 3.10)
    Ce fichier indique une quantité de mémoire (en Kio) à réserver pour les processus d’utilisateur. Cela permet d’empêcher un utilisateur de démarrer un seul processus monopolisateur de mémoire et qu’il ne puisse récupérer (tuer le monopolisateur). La valeur dans ce fichier a un effet seulement quand /proc/sys/vm/overcommit_memory est défini à 2 (mode « overcommit never »). Dans ce cas, le système réserve une quantité de mémoire qui est le minimum de [3 % de la taille du processus en cours, user_reserve_kbytes].

    La valeur par défaut dans ce fichier est le minimum de [3 % des pages libres, 128 Mio] exprimé en Kio.

    Si la valeur dans ce fichier est définie à zéro, l’utilisateur pourra allouer toute la mémoire libre pour un seul processus (moins la quantité réservée par /proc/sys/vm/admin_reserve_kbytes). Tout essai ultérieur d’exécuter une commande aboutira dans un « fork: Cannot allocate memory ».

    Le changement de la valeur dans ce fichier prend effet dès qu’une application requiert de la mémoire.

/proc/sys/vm/unprivileged_userfaultfd (depuis Linux 5.2)
    Ce fichier (éditable) expose un drapeau qui contrôle si les processus non privilégiés sont autorisés à employer userfaultfd(2). Si ce fichier a pour valeur 1, alors ils le peuvent, si la valeur est 0, seuls les processus ayant la capacité CAP_SYS_PTRACE peuvent utiliser userfaultfd(2). La valeur par défaut dans ce fichier est 1.

VOIR AUSSI
proc(5), proc_sys(5)

TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr> et Lucien Gentis <lucien.gentis@waika9.com>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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 à debian-l10n-french@lists.debian.org.