/proc/sys/vm/ - Sous-sytème de mémoire virtuelle
- /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.
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 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.