GNU/Linux >> Tutoriels Linux >  >> Linux

Sous Linux, quelle est la différence entre les tampons et le cache signalés par la commande free ?

Solution 1 :

Le total "caché" inclura également d'autres allocations de mémoire, telles que tous les systèmes de fichiers tmpfs. Pour voir cela en effet, essayez :

mkdir t
mount -t tmpfs none t
dd if=/dev/zero of=t/zero.file bs=10240 count=10240
sync; echo 3 > /proc/sys/vm/drop_caches; free -m
umount t
sync; echo 3 > /proc/sys/vm/drop_caches; free -m

et vous verrez la valeur "cache" chuter de 100 Mo que vous avez copiés sur le système de fichiers basé sur la mémoire vive (en supposant qu'il y avait suffisamment de RAM libre, vous pourriez en trouver une partie dans l'échange si la machine est déjà surchargée en termes d'utilisation de la mémoire). Le "sync; echo 3> /proc/sys/vm/drop_caches" avant chaque appel à free doit écrire tout ce qui est en attente dans tous les tampons d'écriture (la synchronisation) et effacer tous les blocs de disque mis en cache/tampon de la mémoire afin que free ne lise que les autres allocations dans la valeur "en cache".

La RAM utilisée par les machines virtuelles (telles que celles fonctionnant sous VMWare) peut également être comptée dans la valeur "cachée" de free, tout comme la RAM utilisée par les fichiers mappés en mémoire actuellement ouverts (cela variera en fonction de l'hyperviseur/version que vous utilisez et peut-être aussi entre les versions du noyau).

Ce n'est donc pas aussi simple que "les tampons comptent les écritures de fichiers/réseaux en attente et le cache compte les blocs récemment lus/écrits conservés dans la RAM pour enregistrer les lectures physiques futures", bien que dans la plupart des cas, cette description plus simple convienne.

Solution 2 :

Question piège. Lorsque vous calculez l'espace libre, vous devez en fait ajouter le tampon et le cache à la fois. C'est ce que j'ai pu trouver

Un tampon est quelque chose qui n'a pas encore été "écrit" sur le disque. Un cache est quelque chose qui a été "lu" à partir du disque et stocké pour une utilisation ultérieure.

http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135

Solution 3 :

Je cherchais une description plus claire du tampon et j'ai trouvé dans "Professional Linux® Kernel Architecture 2008"

Chapitre 16 :Cache de pages et de tampons

Interaction

Établir un lien entre les pages et les tampons ne sert à rien s'il n'y a aucun avantage pour les autres parties du noyau. Comme déjà noté, certaines opérations de transfert vers et depuis des périphériques blocs peuvent devoir être effectuées dans des unités dont la taille dépend de la taille de bloc des périphériques sous-jacents, alors que de nombreuses parties du noyau préfèrent effectuer des opérations d'E/S avec une granularité de page car cela rend les choses beaucoup plus faciles. — notamment en termes de gestion de la mémoire. Dans ce scénario, les tampons agissent comme des intermédiaires entre les deux mondes.

Solution 4 :

Expliqué par RedHat :

Pages cache :

Un cache est la partie de la mémoire qui stocke de manière transparente les données afin que les demandes futures pour ces données puissent être traitées plus rapidement. Cette mémoire est utilisée par le noyau pour mettre en cache les données du disque et améliorer les performances d'E/S.

Le noyau Linux est conçu de manière à utiliser autant de RAM que possible pour mettre en cache les informations de vos systèmes de fichiers et disques locaux et distants. Au fil du temps, diverses lectures et écritures sont effectuées sur le système, le noyau essaie de conserver les données stockées dans la mémoire pour les différents processus en cours d'exécution sur le système ou les données des processus pertinents qui seraient utilisés dans un avenir proche. Le cache n'est pas récupéré au moment où le processus s'arrête/quitte, mais lorsque les autres processus nécessitent plus de mémoire que la mémoire libre disponible, le noyau exécutera une heuristique pour récupérer la mémoire en stockant les données du cache et en allouant cette mémoire au nouveau processus.

Lorsqu'un type de fichier/données est demandé, le noyau recherche une copie de la partie du fichier sur laquelle l'utilisateur agit et, si aucune copie n'existe, il alloue une nouvelle page de mémoire cache et la remplit avec le contenu approprié lu à partir du disque.

Les données stockées dans un cache peuvent être des valeurs qui ont été calculées précédemment ou des doublons de valeurs d'origine qui sont stockées ailleurs sur le disque. Lorsque certaines données sont demandées, le cache est d'abord vérifié pour voir s'il contient ces données. Les données peuvent être récupérées plus rapidement du cache que de leur source d'origine.

Les segments de mémoire partagée SysV sont également considérés comme un cache, bien qu'ils ne représentent aucune donnée sur les disques. On peut vérifier la taille des segments de mémoire partagée en utilisant la commande ipcs -m et en vérifiant la colonne d'octets.

Tampons :

Les tampons sont la représentation de bloc de disque des données qui sont stockées sous les caches de page. Les tampons contiennent les métadonnées des fichiers/données qui résident sous le cache de la page. Exemple :lorsqu'il y a une demande de données présentes dans le cache de la page, le noyau vérifie d'abord les données dans les tampons qui contiennent les métadonnées qui pointent vers les fichiers/données réels contenus dans les caches de pages. Une fois que l'adresse de bloc réelle du fichier est connue à partir des métadonnées, elle est récupérée par le noyau pour traitement.

Solution 5 :

Libérer le tampon/cache

Avertissement Ceci explique une méthode forte non recommandée sur un serveur de production ! Vous êtes donc prévenu, ne me blâmez pas si quelque chose ne va pas.

Pour comprendre, la chose, vous pourriez forcer votre système pour déléguer autant de mémoire que possible à cache que de supprimer le fichier en cache :

Préambule

Avant de faire le test, vous pourriez ouvrir une autre fenêtre un coup :

$ vmstat -n 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  1  39132  59740  39892 1038820    0    0     1     0    3    3  5 13 81  1
 1  0  39132  59140  40076 1038812    0    0   184     0 10566 2157 27 15 48 11
...

pour suivre l'évolution du swap en temps réel.

Remarque : Vous devez disposer d'autant de disque libre sur le répertoire courant, vous avez mem+swap

La démo
$ free
         total       used       free     shared    buffers     cached
Mem:       2064396    2004320      60076          0      90740     945964
-/+ buffers/cache:     967616    1096780
Swap:      3145720      38812    3106908

$ tot=0
$ while read -a line;do
      [[ "${line%:}" =~ ^(Swap|Mem)Total$ ]] && ((tot+=2*${line[1]}))
    done </proc/meminfo
$ echo $tot
10420232

$ dd if=/dev/zero of=veryBigFile count=$tot
10420232+0 records in
10420232+0 records out
5335158784 bytes (5.3 GB) copied, 109.526 s, 48.7 MB/s

$ cat >/dev/null veryBigFile

$ free
             total       used       free     shared    buffers     cached
Mem:       2064396    2010160      54236          0      41568    1039636
-/+ buffers/cache:     928956    1135440
Swap:      3145720      39132    3106588

$ rm veryBigFile 

$ free
         total       used       free     shared    buffers     cached
Mem:       2064396    1005104    1059292          0      41840      48124
-/+ buffers/cache:     915140    1149256
Swap:      3145720      39132    3106588

Nota, l'hébergeur sur lequel j'ai fait cela est fortement utilisé. Ce sera plus significatif sur une machine vraiment silencieuse.


Linux
  1. Quelle est la différence entre un conteneur Linux et une image ?

  2. Comment supprimer les tampons de mémoire et le cache sous Linux

  3. Quelle est la différence entre les options -i et -U utilisées dans la commande rpm sous Linux

  4. Quelle est la différence entre ls et l ?

  5. Quelle est la différence entre Unix, Linux, BSD et GNU ?

Quelle est la différence entre les noyaux macOS et Linux

Quelle est la différence entre Linux et Unix ?

Quelle est la différence entre Rsync et BTRFS sous Linux ?

Quelle est la différence entre la commande apt et apt-get ?

Quelle est la différence entre les commandes kill et killall ?

Quelle est la différence entre DMA et les E/S mappées en mémoire ?