Expulsions de cache Linux

8

En regardant le comportement du cache VFS sur ma machine Linux, je peux voir que même lorsqu'il est effectivement inactif (crond et la plupart des autres démons arrêtés, interfaces désactivées), la quantité de mémoire libre augmente progressivement, ce qui implique que les éléments sont expulsés du cache.

J'ai fait beaucoup de recherches sur Google, mais je ne trouve aucune référence à la façon dont cela est contrôlé (sauf si c'est un effet secondaire de vm_swappiness). Quelqu'un peut-il me mettre sur la bonne voie pour comprendre pourquoi les éléments sont expulsés du cache alors qu'il n'y a pas de demande de nouvelle allocation de mémoire?

symcbean
la source
«Impliquant que des éléments sont expulsés du cache» - eh bien, dans ce cas vmstat, la taille des caches augmenterait, - le sont-ils vraiment?
poige
décroissant sûrement. Oui, ils sont en baisse
Symcbean
Donc, vous dites que la mémoire libre augmente et que la taille du cache / buf diminue en même temps, n'est-ce pas?
poige

Réponses:

1

swappiness affecte uniquement si la mémoire d'application allouée est permutée pour faire de la place au cache. vfs_cache_pressure est le sysctl qui contrôle ce que vous voyez.

Bratchley
la source
1
Non - vfs_cache_pressure contrôle le rapport entre les métadonnées et la rétention de pagecache (au moins selon les documents que j'ai lus et les expériences que j'ai exécutées)
symcbean
1
C'est suffisant. J'ai fait un peu plus de recherche et d'après ce que je peux voir, tout est ordonné dans une liste de commandes LRU et regardé uniquement lorsqu'un certain seuil (artificiel ou physique) est atteint ou dépassé. Compte tenu de cela, je suppose que quelque chose se passe toujours (comme un fil de noyau se réveillant ou quelque chose). S'il est très important pour vous de comprendre cela, il semble qu'il y ait un script de capture système pré-écrit appelé "mmreclaim.stp" qui suit les récupérations du gestionnaire de mémoire. Je m'assurerais également que ça n'échangerait pas en utilisant "sar -A".
Bratchley
1

Linux vide les données du cache de pages à l'aide d'un processus appelé pdflush

pdflush est contrôlé par les paramètres de / proc / sys / vm

#/proc/sys/vm/dirty_expire_centisecs
The hundredth of the second after which data will be considered to be expired from the page cache and will be written at the next opportunity.

#/proc/sys/vm/dirty_writeback_centisecs`    
The hundredth of a second after which the pdflush wakes up to write data to disk.

#/proc/sys/vm/vfs_cache_pressure`    
This will reclaim dentries and inodes which are also part of the cache.

Vous pouvez consulter les discussions suivantes pour plus d'informations:

Démon pdflush
Théorie du fonctionnement et de l' optimisation des charges de mémoire cache Linux à forte charge d'écriture

Joe
la source
Merci Joe, cependant les 2 premières options concernent spécifiquement les données qui doivent être réécrites dans le système de fichiers (c'est-à-dire le tampon d'écriture) et non les données qui ont été lues et qui n'ont pas été modifiées (le tampon de lecture). Vfs_cache_pressure contrôle la préférence pour l'expulsion des métadonnées de fichier par rapport au contenu du fichier.
symcbean
@symcbean Vous avez raison. La réponse en dit plus sur le cache d'écriture. Le cache de lecture est effacé sur la base de LRU. Cependant, Linux utilise une stratégie à deux listes sur la base de laquelle le cache de lecture est effacé. Vous pouvez en savoir plus sur Two-List Stragety et comment Linux efface le cache de lecture ici . Faites-moi savoir si cela a du sens. Dans votre cas, je suppose qu'après l'arrêt de tous les processus, ces caches de lecture entrent dans la liste inactive et sont effacés
Joe
merci, bel article. Une idée de quel livre vient le chapitre? Cependant, bien qu'il explique comment une page particulière est priorisée pour l'expulsion, il n'explique pas vraiment pourquoi les pages sont expulsées lorsqu'il n'y a pas de demande apparente de mémoire. Qu'est-ce qui contrôle le processus "pour réduire le cache pour rendre plus de RAM disponible pour d'autres utilisations"? Avec quoi les remplace-t-il?
symcbean
@symcbean L'éviction du cache fonctionne immédiatement en cas de demande de mémoire. Cependant, cela n'a aucun sens de l'avoir en cache lorsque personne ne l'utilise activement. Là, les pages actives deviennent des pages inactives et finissent par être expulsées. Je suppose que votre question provient du fait que l'expulsion ne se produira que lorsqu'il y a une demande de mémoire. Le Linux effacerait chaque page inactive au fur et à mesure de leur disponibilité. Comme [noté dans l'article] [ jothirams.com/linux-cached-memory/] si tout est actif, vous manquerez de mémoire et OOM sera appelé.
Joe