web-dev-qa-db-fra.com

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

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

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

Ai-je raison?

En particulier, je regarde les deux commandes: free et vmstat

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
148
James.Xu

Les "tampons" représentent la part de RAM consacrée aux blocs de disques en cache. "Cached" est similaire à "Buffers", mais cette fois, il met en cache les pages de la lecture du fichier.

citation de: 

61
Seth Robertson

Les tampons sont associés à un périphérique bloc spécifique et couvrent la mise en cache métadonnées du système de fichiers ainsi que le suivi des pages en vol. La cache ne contient que des données de fichiers parqués. C'est-à-dire que les tampons se souviennent de ce qui est dans les répertoires, quelles sont les autorisations de fichier et gardez une trace de ce que .__ la mémoire est en cours d'écriture ou de lecture pour un périphérique de bloc particulier . Le cache ne contient que le contenu des fichiers eux-mêmes.

lien de devis

153
xoy

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

Réponse courte: mis en cache est la taille du cache de page. Buffers est la taille des tampons d'E/S de bloc en mémoire. Affaires mises en cache; Les tampons sont en grande partie hors de propos.

Réponse longue: Caché est la taille du cache de page Linux moins la mémoire du cache de swap, qui est représentée par SwapCached (la taille totale du cache de page est donc Cached + SwapCached). Linux effectue toutes les E/S sur les fichiers via le cache de pages. Les écritures sont implémentées simplement en marquant comme sales les pages correspondantes dans le cache de pages; les fils de vidage é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 renseignées. Sur un système Linux moderne, Cached peut facilement atteindre 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 en échangeant les données sur le disque afin de libérer de la mémoire si nécessaire.

Les tampons sont des tampons d'E/S de bloc en mémoire. Ils ont une vie relativement courte. Avant la version 2.4 du noyau Linux, Linux disposait de caches de pages et de tampons distincts. Depuis la version 2.4, le cache de page et le tampon sont unifiés et Buffers est constitué de blocs de disque bruts non représentés dans le cache de page, c'est-à-dire non 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.

74
socketpair

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

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

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

18
n00ber

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" sur le disque et stocké pour une utilisation ultérieure.

11
ChaiZhi

Je pense que cette page aidera à comprendre la différence entre le tampon et le cache en profondeur. 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 la même partie d’un disque plusieurs fois pendant des durées relativement courtes. Par exemple, on peut d'abord lire un message électronique, puis lire la lettre dans un éditeur pour y répondre, puis demander au programme de messagerie de la relire lors de la copie dans un dossier. Vous pouvez également considérer la fréquence à laquelle la commande ls peut être exécutée sur un système comportant de nombreux utilisateurs. En lisant les informations du disque une seule fois, puis en les gardant en mémoire jusqu'à ce que vous n'en ayez plus besoin, vous pouvez accélérer toutes les lectures sauf la première. C'est ce qu'on appelle la mise en mémoire tampon du disque et la mémoire utilisée à cet effet s'appelle le cache de la mémoire tampon.

Comme la mémoire est, malheureusement, une ressource rare, finie, le cache de la mémoire 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 est plein, les données inutilisées depuis 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 écrites sont souvent rapidement relues (par exemple, un fichier de code source est enregistré dans un fichier, puis lu par le compilateur), il est donc judicieux de placer les données écrites dans le cache. D'autre part, en mettant uniquement les données dans le cache et en ne les écrivant pas sur le disque, le programme qui écrit s'exécute plus rapidement. Les écritures peuvent ensuite être effectuées en arrière-plan, sans ralentir les autres programmes.

9
Eric

Expliqué par RedHat :

Cache Pages:

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

Le noyau Linux est construit de manière à utiliser autant RAM que possible pour mettre en cache les informations de vos systèmes de fichiers et disques locaux et distants. À mesure que le temps passe, diverses lectures et écritures sont effectuées sur le système, le noyau tente de conserver les données stockées en mémoire pour les divers processus en cours d'exécution sur le système ou celles de processus pertinents qui seraient utilisés dans un avenir proche. Le cache n'est pas récupéré au moment où le processus est arrêté/arrêté. Toutefois, lorsque les autres processus nécessitent plus de mémoire que la mémoire disponible, le noyau exécute une méthode heuristique pour récupérer la mémoire en stockant les données en cache et en l'affectant à un nouveau processus.

Quand tout type de fichier/donnée est demandé, le noyau cherchera une copie de la partie du fichier sur laquelle l'utilisateur agit, et si aucune copie de ce type n'existe, il allouera une nouvelle page de mémoire cache et la remplira avec le contenu approprié lu à partir du disque.

Les données stockées dans un cache peuvent être des valeurs calculées précédemment 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 son origine.

Les segments de mémoire partagée SysV sont également comptabilisés en tant que 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 stockées dans les caches de page. Les tampons contiennent les métadonnées des fichiers/données qui se trouvent dans le cache de page . Exemple: lorsqu’il existe une demande de données présentes dans le cache de page, le noyau vérifie d’abord les données dans les tampons contenant les métadonnées. qui pointe vers les fichiers/données contenus dans les caches de page. Une fois dans les métadonnées, l'adresse de bloc réelle du fichier est connue et le noyau le récupère pour le traitement.

7
Ijaz Ahmad Khan

Seth Robertson's Link 2 a déclaré: "Pour une compréhension approfondie de ces termes, reportez-vous au manuel du noyau Linux tel que Linux Kernel Development de Robert M. Love."

J'ai trouvé du contenu sur 'tampon' dans la 2e é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 sur le disque en termes de blocs.

Lorsqu'un bloc est stocké en mémoire (par exemple, après une lecture ou une écriture en attente), il est stocké dans un 'tampon'. Chaque "tampon" est associé à exactement un bloc. Le 'tampon' sert d'objet représentant 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’entrée/sortie 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 les pages en mémoire associées. "

3
Chao Yin

Le tampon contient des métadonnées qui aident à améliorer les performances en é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.

1
karthik

Extrait de l'ouvrage: Introduction à la recherche d'information

Cache

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

Buffer

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 de tout le bloc. Des 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é dans une mémoire tampon.

0
yantaq

Une mémoire tampon est une région de la mémoire utilisée pour conserver temporairement des données lorsqu’elles sont déplacées d’un ordinateur à l’autre. Un cache est une zone de stockage temporaire dans laquelle 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, vous pouvez utiliser les ressources suivantes en accédant à la copie en cache plutôt que de récupérer à nouveau les données d'origine, de sorte que le temps d'accès moyen est plus court. 

0
Abigail