Quelle est la différence entre la mémoire tampon et la mémoire cache sous Linux?

179

Pour moi, la différence entre les deux concepts de mémoire Linux n'est pas claire: bufferet cache. J'ai lu cet article et il me semble que la différence entre eux est la politique d'expiration:

  1. la politique du tampon est le premier entré, premier sorti
  2. la politique de cache est la moins récemment utilisée.

Ai-je raison?

En particulier, je regarde les deux commandes: freeetvmstat

james@utopia:~$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
5  0      0    173     67    912    0    0    19    59   75 1087 24  4 71  1
james@utopia:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          2007       1834        172          0         67        914
-/+ buffers/cache:        853       1153
Swap:         2859          0       2859
James.Xu
la source
Vous devriez nous donner plus de contexte, les deux termes sont utilisés avec des significations différentes. Faites-vous référence à la freesortie de la commande?
leonbloy le
3
vous avez raison, je regarde les deux commandes: free, vmstat. voir mes mises à jour.
James.Xu
1
Vous pouvez également visiter unix.stackexchange.com
leonbloy le

Réponses:

69

Les «tampons» représentent la partie de la RAM dédiée aux blocs de disque de cache. "Cached" est similaire à "Buffers", mais cette fois, il met en cache les pages de la lecture de fichiers.

Citation de:

Seth Robertson
la source
3
J'ai testé cela à l'aide d'un simple programme python qui écrit de grandes quantités de blocs. Ce qui se passe, c'est que le cachese remplit comme indiqué par free -w -h, pas la bufferscolonne. Je pense que la cachecolonne compte à la fois les écritures et les lectures de disque et buffersest utilisée pour autre chose.
CMCDragonkai
@CMCDragonkai merci pour les preuves expérimentales. La question intéressante est de savoir si vous écriviez plus vite que le disque ne pourrait se vider. (par exemple, la synchronisation prendrait beaucoup de temps), ce qui nous indiquerait si les blocs sales sont comptés différemment des blocs propres. Linux mettra certainement en cache les deux types (lru comme mentionné dans la question) mais l'un est beaucoup plus sérieux en termes de pression mémoire.
Seth Robertson
179

Les tampons sont associés à un périphérique bloc spécifique et couvrent la mise en cache des métadonnées du système de fichiers ainsi que le suivi des pages en cours. Le cache contient uniquement des données de fichiers parqués. Autrement dit, les tampons mémorisent ce qui se trouve dans les répertoires, quelles sont les autorisations de fichier et gardent une trace de la mémoire à partir de laquelle est écrite ou lue pour un périphérique bloc particulier. Le cache ne contient que le contenu des fichiers eux-mêmes.

lien de devis

xoy
la source
1
Court et bien expliqué. Merci.
curiousguy
84

Réponse citée (pour référence):

Réponse courte: Cached est la taille du cache de page. Buffers correspond à la taille des tampons d'E / S des blocs en mémoire. Questions en cache; Les tampons ne sont en grande partie pas pertinents.

Réponse longue: Cached est la taille du cache de page Linux, moins la mémoire dans le cache de swap, qui est représentée par SwapCached (donc la taille totale du cache de page est Cached + SwapCached). Linux effectue toutes les E / S de fichiers via le cache de page. Les écritures sont implémentées en marquant simplement comme sales les pages correspondantes dans le cache de pages; les threads de rinçage écrivent ensuite périodiquement sur le disque les pages sales. Les lectures sont implémentées en renvoyant les données du cache de page; si les données ne sont pas encore dans le cache, elles sont d'abord remplies. Sur un système Linux moderne, Cached peut facilement être de plusieurs gigaoctets. Il ne rétrécira qu'en réponse à la pression de la mémoire. Le système purgera le cache de page tout en échangeant les données sur le disque pour rendre disponible davantage de mémoire si nécessaire.

Les tampons sont des tampons d'E / S de bloc en mémoire. Ils sont relativement de courte durée. Avant la version 2.4 du noyau Linux, Linux avait des caches de pages et de tampons séparés. Depuis 2.4, la page et le cache de tampon sont unifiés et les tampons sont des blocs de disque bruts non représentés dans le cache de page, c'est-à-dire pas de données de fichier. La métrique Buffers est donc d'une importance minimale. Sur la plupart des systèmes, les tampons ne représentent souvent que des dizaines de mégaoctets.

socketpair
la source
7
"Les tampons ne sont en grande partie pas pertinents" - Non. Il existe de nombreux cas où la mise en cache du contenu des fichiers n'est pas pertinente, mais garder les métadonnées dans le cache accélère les choses. Un serveur NAS de streaming vidéo par exemple.
Gunther Piez
Tout système effectuant beaucoup d'E / S utilisera beaucoup de mémoire pour les tampons. Je charge en masse une base de données MySQL / InnoDB de 100 Go et les tampons dépassent les 2 Go tout le temps.
Marcelo Pacheco
21

Ce n'est pas `` tout à fait '' aussi simple que cela, mais cela pourrait aider à comprendre:

Le tampon sert à stocker les métadonnées des fichiers (autorisations, emplacement, etc.). Chaque page de mémoire est conservée ici.

Le cache sert à stocker le contenu réel du fichier.

n00ber
la source
5
IOW, Buffer = Métadonnées; Cache = données;
Freedom_Ben
13

Expliqué par RedHat :

Pages de cache:

Un cache est la partie de la mémoire qui stocke les données de manière transparente afin que les futures demandes 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 construit de telle manière qu'il utilisera autant de RAM que possible pour mettre en cache les informations de vos systèmes de fichiers et disques locaux et distants. Au fur et à mesure que le temps passe au cours de diverses lectures et écritures 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 de processus pertinents qui seraient utilisés dans un proche avenir. 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 disponible 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 recherchera une copie de la partie du fichier sur laquelle l'utilisateur agit et, si aucune copie n'existe, il allouera une nouvelle page de mémoire cache et la remplira avec le contenu approprié lu sur le disque.

Les données stockées dans un cache peuvent être des valeurs calculées antérieurement ou des doublons de valeurs d'origine 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 extraites plus rapidement du cache que de leur origine source.

Les segments de mémoire partagée SysV sont également comptabilisé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 par blocs de disque des données stockées sous les caches de page. Buffers contient les métadonnées des fichiers / données qui résident sous le cache de page. Exemple: Lorsqu'il y a une demande de données présentes dans le cache de 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 page. Une fois que, à partir des métadonnées, l'adresse de bloc réelle du fichier est connue, elle est récupérée par le noyau pour traitement.

Ijaz Ahmad Khan
la source
12

tampon et cache.

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.

ChaiZhi
la source
2
nouvel astuce: faites en sorte que votre réponse se rapporte aussi clairement que possible à la question. Si j'étais à votre place, j'ajouterais à votre réponse une section commençant par «Donc, avec votre exemple ...» et je développerais un peu ce sujet.
Piotr Wadas
25
Je ne pense pas que cette réponse soit vraie dans le même contexte que celui de la question (à savoir, ce que le noyau Linux entend par «tampon» et «cache»
Freedom_Ben
8

Je pense que cette page vous aidera à comprendre en profondeur la différence entre tampon et cache. http://www.tldp.org/LDP/sag/html/buffer-cache.html

La lecture à partir d'un disque est très lente par rapport à l'accès à la mémoire (réelle). De plus, il est courant de lire plusieurs fois la même partie d'un disque pendant des périodes de temps relativement courtes. Par exemple, on peut d'abord lire un message électronique, puis lire la lettre dans un éditeur en y répondant, puis faire en sorte que le programme de messagerie la lise à nouveau lors de sa copie dans un dossier. Ou, considérez la fréquence à laquelle la commande lspeut être exécutée sur un système avec de nombreux utilisateurs. En lisant les informations du disque une seule fois, puis en les gardant en mémoire jusqu'à ce qu'elles ne soient plus nécessaires, on peut tout accélérer sauf la première lecture. C'est ce qu'on appelle la mise en mémoire tampon du disque, et la mémoire utilisée à cet effet est appelée le cache tampon.

Puisque la mémoire est, malheureusement, une ressource limitée, voire rare, le cache tampon ne peut généralement pas être assez grand (il ne peut pas contenir toutes les données que l'on souhaite utiliser). Lorsque le cache se remplit, les données inutilisées le plus longtemps sont supprimées et la mémoire ainsi libérée est utilisée pour les nouvelles données.

La mise en mémoire tampon du disque fonctionne également pour les écritures. D'une part, les données qui sont écrites sont souvent rapidement relues (par exemple, un fichier de code source est enregistré dans un fichier, puis lu par le compilateur), donc mettre les données écrites dans le cache est une bonne idée. D'un autre côté, en ne mettant que les données dans le cache, et non en les écrivant sur le disque à la fois, le programme qui écrit s'exécute plus rapidement. Les écritures peuvent alors être effectuées en arrière-plan, sans ralentir les autres programmes.

Eric
la source
Cela explique ce qu'est le cache tampon, mais pas la différence entre tampon et cache dans les sorties des commandes vmstat et free.
Roel Schroeven
4

Le lien 2 de Seth Robertson a déclaré: "Pour une compréhension approfondie de ces termes, reportez-vous au livre sur le noyau Linux comme Linux Kernel Development par Robert M. Love."

J'ai trouvé du contenu sur «tampon» dans la 2ème édition du livre.

Bien que le périphérique physique lui-même soit adressable au niveau du secteur, le noyau effectue toutes les opérations de disque en termes de blocs.

Lorsqu'un bloc est stocké en mémoire (par exemple, après une lecture ou en attente d'une écriture), il est stocké dans un «tampon». Chaque «tampon» est associé à exactement un bloc. Le «tampon» sert d'objet qui représente un bloc de disque en mémoire.

Un «tampon» est la représentation en mémoire d'un seul bloc de disque physique.

Les opérations d'E / S de bloc manipulent un seul bloc de disque à la fois. Une opération d'E / S de bloc courante consiste à lire et à écrire des inodes. Le noyau fournit la fonction bread () pour effectuer une lecture de bas niveau d'un seul bloc à partir du disque. Via des «tampons», les blocs de disque sont mappés sur leurs pages en mémoire associées. "

Chao Yin
la source
2

Le tampon contient des métadonnées qui aident à améliorer les performances d'écriture

Le cache contient le contenu du fichier lui-même (parfois encore à écrire sur le disque), ce qui améliore les performances de lecture

Karthik
la source
1

Citation du livre: Introduction à la recherche d'informations

Cache

Nous souhaitons conserver autant de données que possible en mémoire, en particulier celles auxquelles nous devons accéder fréquemment. Nous appelons la technique de conservation des données de disque fréquemment utilisées dans la mise en cache de la mémoire principale.

Tampon

Les systèmes d'exploitation lisent et écrivent généralement des blocs entiers. Ainsi, la lecture d'un seul octet à partir du disque peut prendre autant de temps que la lecture du bloc entier. Les tailles de bloc de 8, 16, 32 et 64 kilo-octets (Ko) sont courantes. Nous appelons la partie de la mémoire principale où un bloc en cours de lecture ou d'écriture est stocké un tampon.

yantaq
la source
0

Un tampon est une région de mémoire utilisée pour contenir temporairement des données pendant qu'elles sont déplacées d'un endroit à un autre dans un ordinateur, tandis qu'un cache est une zone de stockage temporaire où les données fréquemment consultées peuvent être stockées pour un accès rapide. Une fois que les données sont stockées dans le cache, une utilisation future peut être faite en accédant à la copie mise en cache plutôt qu'en récupérant les données d'origine, de sorte que le temps d'accès moyen soit plus court.

Abigail
la source