web-dev-qa-db-fra.com

Comprendre les "tampons" et "mis en cache" à partir de la commande gratuite

Cela a été demandé plus tôt, mais je ne veux pas mettre à jour le même thread à nouveau car c'était un ancien thread.

Je veux me clarifier sur la colonne "buffers" et "cache" de la sortie de la commande free.

C'est ce que je comprends ...

Le tampon est quelque chose où les données sont là en mémoire mais qui n'ont pas encore été vidées sur disque. Les données seront vidées sur le disque par le démon bdflush périodiquement ou nous pouvons le faire manuellement en exécutant la commande sync.

Le cache, d'autre part, est un programme/des données qui est chargé en mémoire mais qui est conservé en mémoire de sorte que s'il est à nouveau nécessaire, il sera rapidement disponible.

Pour comprendre le concept de tampons, j'ai tenté l'expérience suivante ...

Ceci est la lecture de la commande free sur mon bureau

 [zama @ localhost ~] $ free -m 
 total des tampons partagés libres mis en cache 
 Mem: 2897 465 2431 0 30 230 
 -/+ buffers/cache : 204 2692 
 Échange: 4000 0 4000 
 
 [Zama @ localhost ~] $ sync 
 
 [Zama @ localhost ~] $ free - m 
 total des tampons partagés gratuits mis en cache 
 Mem: 2897 466 2431 0 30 230 
 -/+ tampons/cache: 205 2691 
 Swap: 4000 0 4000 

Ici, je ne vois pas la réduction du tampon après l'exécution de la commande sync.

Ensuite, j'ai essayé ce qui suit ... J'ai essayé d'écrire un énorme fichier sur le disque.

 [zama @ localhost ~] $ dd if =/dev/zero of = test bs = 1024k 

Comme prévu, la valeur en cache devrait augmenter et free le confirme.

 @ localhost ~] # free -m 
 total des tampons partagés libres mis en cache 
 Mem: 2897 1466 1430 0 32 1127 
 -/+ buffers/cache: 306 2590 
 Échange: 4000 0 4000 

J'ai de nouveau exécuté la commande sync puis vérifié en utilisant free. Je peux voir que la valeur du tampon a diminué à partir de la sortie de la commande free. Il n'y a pas eu de réduction dans le cache. Cela signifie que les pages sales de RAM après l'exécution de dd coomand ont été vidées sur le disque.

 @ localhost ~] # free -m 
 total des tampons partagés libres mis en cache 
 Mem: 2897 1466 1430 0 10 1127 
 -/+ buffers/cache: 306 2590 
 Échange: 4000 0 4000 

J'ai ensuite mis à jour le drop_cache paramètre du noyau pour que la valeur de cache soit supprimée

 [root @ localhost ~] # cat/proc/sys/vm/drop_caches 
 0 
 
 [root @ localhost ~] # echo "1">/proc/sys/vm/drop_caches 
 
 [root @ localhost ~] # cat/proc/sys/vm/drop_caches 
 1 

free confirme maintenant que la valeur du tampon et du cache est supprimée.

 [root @ localhost ~] # free -m 
 total des tampons partagés libres mis en cache 
 Mem: 2897 299 2597 0 1 74 
 -/+ buffers/cache : 224 2672 
 Échange: 4000 0 4000 

Donc, ma déclaration initiale selon laquelle "Buffer" est RAM les données qui doivent encore être vidées sur le disque semble être correcte.

Veuillez me guider si je suis dans la bonne direction.

20
Zama Ques

Les en-têtes de colonne de la commande libre sont quelque peu mal étiquetés, du moins du point de vue d'un utilisateur Linux (par opposition au développeur). Vous trouverez ci-dessous une clarification de la signification des titres:

total: Oui, c'est du bélier total.

tilisé: C'est probablement la colonne la plus confuse. Il s'agit d'un mélange de mémoire utilisée par l'application et d'une autre mémoire utilisée "temporairement" (tampon + cache) qui est réellement disponible si nécessaire. Donc, techniquement, la mémoire est vraiment utilisée, mais une grande partie de cette mémoire est disponible si une application en a besoin. La mémoire utilisée "temporairement" est empruntée si elle est disponible par le système Linux pour accélérer les performances du système, sinon le système aurait lu plus souvent sur le disque. Une grande partie de ce type de mémoire est indiquée dans la colonne "mise en cache". Cette mémoire est abandonnée par le système Linux si une application a besoin de mémoire.

free: Oui, cette pure mémoire libre et intacte.

shared: Mémoire spécifiquement allouée pour être utilisée par plusieurs processus

buffers: Mémoire temporaire qui est mise de côté pour aider certains processus

cache: Mémoire disponible et "empruntée" par le système d'exploitation pour accélérer de nombreuses opérations du système d'exploitation Linux. Cette mémoire est abandonnée par le système si une application en a besoin.

La ligne qui commence par -/+ buffers/cache est généralement plus utile que la première Mem ligne. L'intersection de gratuit et -/+ tampons/cache est essentiellement ce que vous avez pour la mémoire "disponible".

24
WxWizard

Citant de RHEL :

Linux essaie toujours d'utiliser RAM pour accélérer les opérations sur le disque en utilisant la mémoire disponible pour les tampons (métadonnées du système de fichiers) et le cache (pages avec le contenu réel des fichiers ou des périphériques de bloc).

3
zangw

J'ai toujours compris que la zone de mémoire tampon est destinée au stockage temporaire des données lues ou écrites sur des périphériques (y compris les disques), tandis que la zone de mémoire cache sert à accélérer les futures lectures à partir d'un périphérique.

3
samuelg

Le sous-système Linux vm traite la mémoire libre ou inutilisée ou non allouée comme tampons/cache

Par conséquent, l'exécution de echo 1 > /proc/sys/vm/drop_caches indique au noyau de supprimer ou de nettoyer les caches de page (cache de page), les dentiers (cache de dalle) et les inodes (dans le cache de dalle) et de faire en sorte que la mémoire soit récupérée et disponible.

Les pages de cache de données propres ne sont pas libérées par conception. Ils peuvent être facilement récupérés par le noyau si ou quand de la mémoire supplémentaire doit être allouée (malloc/calloc/brk/sbrk et amis), tandis qu'ils contiennent des données utiles provenant de disques qui, si nécessaire, enregistre à nouveau en faisant une E/S disque.

La commande sync valide uniquement les pages sales de la mémoire sur le disque, elle ne libère pas les tampons/cache. La seule façon de supprimer des tampons/cache est d'utiliser echo "1" > /proc/sys/vm/drop_caches ou le noyau récupère les pages de données pour les nouvelles allocations demandées par les applications

pdflush a été remplacé par l'utilisation de threads de vidage par informations sur le périphérique de support (BDI).

3
askb

C'est ce que je comprends: les tampons vous indiquent la quantité de mémoire réservée pour la maintenance des périphériques de bloc, mais le cache vous indique combien de mémoire est utilisée pour le contenu de fichier.

1
user2699113