Quelle est la différence entre un tampon et une mémoire cache sous Linux?
pour moi, il n'est pas clair quelle est la différence entre les deux concepts de mémoire Linux: buffer
et cache
. J'ai lu à travers ce post et il me semble que la différence entre eux est la Politique d'expiration:
- la Politique de buffer est premier entré, premier sorti La Politique de cache
- est la moins récente.
ai-je raison?
In 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
10 réponses
"Tampons" représentent combien la quantité de RAM est dédié à la cache de blocs sur le disque. "Cached "est similaire à" Buffers", seulement cette fois il cache des pages de lecture de fichier.
citation de:
Les tamponssont associés à un dispositif de blocage spécifique, et la mise en cache du couvercle des métadonnées du système de fichiers ainsi que le suivi des pages en vol. Cache ne contient garé fichier de données. C'est-à-dire que les tampons se souviennent dans les répertoires, quelles sont les permissions de fichiers, et garder une trace de ce que la mémoire est écrite ou lue à partir d'un périphérique de bloc particulier. Le cache ne contient que le contenu des fichiers eux-mêmes.
réponse Citée (pour référence):
courte réponse: la taille de la page cache est mise en cache. Les tampons sont de la taille des tampons d'entrées/sorties en mémoire. La mise en cache est importante; Les tampons ne sont pas pertinents.
réponse longue: cache est la taille du cache de la page Linux, moins la mémoire dans le cache d'échange, qui est représentée par SwapCached (ainsi la taille totale du cache de la page est mise en cache + SwapCached). Linux exécute tout fichier I / O à travers le cache de la page. Les Écritures sont implémentées aussi simplement en marquant comme sales les pages correspondantes dans le cache de page; les threads de flusher écrivent ensuite périodiquement de nouveau sur le disque les pages sales. Les lectures sont implémentées en retournant les données du cache de la page; si les données ne sont pas encore dans le cache, elles sont d'abord peuplées. Sur un système Linux moderne, la mise en cache peut facilement atteindre plusieurs gigaoctets. Il ne se rétrécira qu'en réponse à la pression de la mémoire. Le système va purger le cache de la page avec échanger les données sur le disque pour rendre plus de mémoire disponible au besoin.
Les tamponssont des tampons d'entrées/sorties en mémoire. Ils sont relativement de courte durée. Avant la version 2.4 du noyau Linux, Linux avait des pages séparées et des caches tampon. Depuis 2.4, la page et le cache tampon sont unifiés et les tampons sont des blocs de disques bruts non représentés dans le cache de la page-c'est-à-dire pas des données de fichier. La métrique des tampons a donc une importance minime. Sur la plupart des systèmes, les tampons ne sont souvent que des dizaines de mégaoctets.
ce n'est pas aussi simple que cela, mais cela pourrait aider à comprendre:
Buffer est pour stocker des métadonnées de fichier (permissions, location, etc). Chaque page de mémoire est enregistrée ici.
Cache est pour stocker le contenu réel du fichier.
tampon et cache.
Un tampon est quelque chose qui doit encore être "écrit" sur le disque.
un cache est quelque chose qui a été" lu " à partir du disque et stocké pour une utilisation ultérieure.
je pense que cette page aidera à comprendre profondément la différence entre le buffer et le cache. http://www.tldp.org/LDP/sag/html/buffer-cache.html
lire à partir d'un disque est très lent par rapport à l'accès (réel) de la mémoire. En outre, il est courant de lire la même partie d'un disque plusieurs fois pendant des périodes relativement courtes. Par exemple, on pourrait d'abord lire un message électronique, puis lire la lettre dans un éditeur en répondant à il, puis faire le programme de courrier le relire en le copiant dans un dossier. Ou, pensez à la fréquence à laquelle la commande ls
peut être exécutée sur un système avec de nombreux utilisateurs. En lisant l'information du disque qu'une seule fois et en la gardant en mémoire jusqu'à ce qu'elle ne soit plus nécessaire, on peut accélérer tout sauf la première lecture. C'est ce qu'on appelle le tampon de disque, et la mémoire utilisée à cette fin est appelée le cache tampon.
comme la mémoire est, malheureusement, une ressource limitée, le cache buffer ne peut généralement pas être assez grand (il ne peut pas contenir toutes les données que l'on veut utiliser). Lorsque le cache se remplit, les données inutilisées depuis le plus longtemps sont rejetées et la mémoire ainsi libérée est utilisée pour les nouvelles données.
le tampon de disque fonctionne aussi bien pour les Écritures. D'une part, les données qui sont écrites sont souvent relues rapidement (par exemple, un fichier de code source est sauvegardé dans un fichier, puis lu par le compilateur), donc mettre les données qui sont écrites dans le cache est une bonne chose idée. D'autre part, que de mettre les données dans le cache, pas l'écriture sur le disque à la fois, le programme qui écrit s'exécute plus rapidement. L'écrit peut alors être effectuée en arrière-plan, sans ralentir les autres programmes.
expliquée par RedHat :
Mettre En Cache Les Pages:
un cache est la partie de la mémoire qui stocke les données de manière transparente afin que les demandes futures pour ces données puissent être servies 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 des e/s.
le noyau Linux est construit de telle manière qu'il utilise autant de mémoire vive que possible pour mettre en cache les informations vos systèmes de fichiers et disques locaux et distants. Au fur et à mesure que le temps passe, 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 qui fonctionnent sur le système ou les données des 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 / sort, cependant lorsque les autres processus nécessitent plus de mémoire alors la mémoire libre disponible, le noyau exécutera heuristics pour récupérer la mémoire en stockant les données du cache et en attribuant cette mémoire à un nouveau processus.
Lorsqu'un type quelconque 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 de ce type n'existe, il attribuera une nouvelle page de mémoire cache et la remplira avec le contenu approprié lu à partir du disque.
les données qui sont stockées dans un cache peuvent être des valeurs qui ont été calculées plus tôt ou les doublons des valeurs originales qui sont stockées ailleurs dans le disque. Lorsque certaines données sont demandées, le cache est d'abord vérifié pour voir si elle contient des données. Les données peuvent être récupérées plus rapidement à partir du cache que de son origine source.
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 bytes.
tampons:
Buffers sont la représentation de bloc de disque des données qui est stocké sous les caches de page. Les tampons contiennent les métadonnées des fichiers/données qui se trouvent sous le cache de la page. Exemple: Lorsqu'il y a une requête d'une donnée présente 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 la page. Lorsque à partir des métadonnées, l'adresse réelle du bloc du fichier est connue, elle est récupérée par le noyau pour être traitée.
Seth Robertson a déclaré Link 2 " pour une compréhension approfondie de ces termes, se référer à Linux kernel book comme Linux Kernel Development par Robert M. Love."
j'ai trouvé du contenu sur 'buffer' 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 du 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 une "zone tampon". Chaque 'buffer' est associé à exactement un bloc. Le 'buffer' sert d'objet qui représente un bloc disque en mémoire.
Une "zone tampon" est la représentation en mémoire d'un disque physique unique bloc.
Les opérationsde bloc I/O manipulent un seul bloc de disque à la fois. Une opération courante de bloc I/O est la lecture et l'écriture inodes. Le noyau fournit la fonction bread () pour effectuer une lecture de bas niveau d'un bloc simple à partir du disque. Par l'intermédiaire des "tampons", les blocs de disques sont mis en correspondance avec les pages associées en mémoire. "
le tampon contient des métadonnées qui aident à améliorer les performances d'écriture
Cache contient le contenu du fichier lui-même (parfois encore à écrire sur le disque) ce qui améliore les performances de lecture
une mémoire tampon est une région de mémoire utilisée pour stocker temporairement des données pendant qu'elles sont déplacées d'un endroit à un autre dans un ordinateur.tandis qu'une 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 les données stockées dans le cache, il est possible de les utiliser ultérieurement en accédant à la copie mise en cache plutôt qu'en récupérant les données originales, de sorte que le temps d'accès moyen est plus court.