C’est une vieille question que j’ai vue de temps en temps. Ma compréhension est assez limitée (avoir lu les différences il y a longtemps, mais les factoïdes impliqués ne se sont jamais vraiment collés).
Si je comprends bien,
Les tampons
Sont utilisés par des programmes avec des opérations d’E / S actives, c’est-à-dire des données en attente d’écriture sur le disque
Cache
Résultat d’opérations d’E / S terminées, c’est-à-dire des tampons vidés ou des données lues à partir du disque pour répondre à une demande.
Puis-je avoir une explication claire pour la postérité?
linux
memory
virtual-memory
Avery Payne
la source
la source
Réponses:
Le total "mis en cache" inclura également d'autres allocations de mémoire, telles que les systèmes de fichiers tmpfs. Pour voir cela en pratique, essayez:
et vous verrez la valeur de "cache" chuter de 100 Mo que vous avez copié sur le système de fichiers basé sur la RAM (en supposant qu'il y ait assez de RAM disponible, vous pourriez en trouver une partie en swap si la machine est déjà surchargée en termes de ressources d'utilisation de la mémoire). "Sync; echo 3> / proc / sys / vm / drop_caches" avant chaque appel à libérer doit écrire tout ce qui est en attente dans tous les tampons d'écriture (la synchronisation) et effacer de la mémoire tous les blocs de disque mis en cache / mis en mémoire tampon. allocations dans la valeur "en cache".
La RAM utilisée par les machines virtuelles (telles que celles exécutées sous VMWare) peut également être comptée dans la valeur "mise en cache" de free, de même que la RAM utilisée par les fichiers mappés en mémoire actuellement ouverts (cela varie en fonction de l'hyperviseur / version que vous utilisez et éventuellement entre les versions du noyau également).
Donc, ce n'est pas aussi simple que "les tampons comptent les écritures de fichiers / réseau en attente et les caches mis en cache les blocs récemment lus / écrits conservés dans la RAM pour sauvegarder les lectures physiques futures", bien que cette description plus simple suffira dans la plupart des cas.
la source
Question piège. Lorsque vous calculez l'espace libre, vous devez ajouter du tampon et mettre en cache les deux. 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" sur le disque et stocké pour une utilisation ultérieure.
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
la source
Je cherchais une description plus claire du tampon et je l’ai trouvée dans
"Professional Linux® Kernel Architecture 2008"
la source
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 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 des E / S.
Le noyau Linux est construit 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. À 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 les données 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é. Cependant, 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 leur 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 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 contenant les métadonnées qui pointent vers les fichiers / données réels 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.
la source
Libérer le tampon / cache
Avertissement Ceci explique une méthode puissante non recommandée sur le serveur de production! Donc, vous êtes prévenus, ne me blâmez pas si quelque chose ne va pas.
Pour bien comprendre, vous pouvez forcer votre système à déléguer autant de mémoire que possible au
Préambulecache
contenu du fichier mis en cache:Avant de faire le test, vous pouvez ouvrir une autre fenêtre et un hit:
pour suivre l'évolution du swap en temps réel.
Nota: Vous devez disposer d’autant de disque libre que le répertoire courant, vous avez mem + swap
La démoNota, l'hôte sur lequel j'ai fait cela est fortement utilisé. Ce sera plus significatif sur une machine très silencieuse.
la source