Que signifient les champs «buff / cache» et «avail mem» en haut?

28

Dans la sortie de top, il y a deux champs, marqués "buff / cache" et "avail Mem" dans la mémoire et permutez les lignes d'utilisation:

entrez la description de l'image ici

Que signifient ces deux domaines?

J'ai essayé de les rechercher sur Google, mais les résultats ne font apparaître que des articles génériques en haut, et ils n'expliquent pas ce que ces champs signifient.

user2064000
la source

Réponses:

31

topLa page de manuel de ne décrit pas les champs, mais freele fait:

tampons

Mémoire utilisée par les tampons du noyau ( Buffersen /proc/meminfo)

cache

Mémoire utilisée par le cache de pages et les dalles ( Cachedet SReclaimablededans /proc/meminfo)

buff / cache

Somme des tampons et du cache

disponible

Estimation de la quantité de mémoire disponible pour démarrer de nouvelles applications, sans échange. Contrairement aux données fournies par le cache ou les champs libres, ce champ prend en compte le cache de page et également que toutes les dalles de mémoire récupérables ne seront pas récupérées en raison d'éléments en cours d'utilisation ( MemAvailabledans /proc/meminfo, disponible sur les noyaux 3.14, émulé sur les noyaux 2.6.27+ , sinon le même que gratuit)

Fondamentalement, "buff / cache" compte la mémoire utilisée pour les données qui se trouvent sur le disque ou qui devraient y arriver bientôt, et par conséquent est potentiellement utilisable (la mémoire correspondante peut être mise à disposition immédiatement, dans le cas du cache, ou avec suffisamment de temps, dans le cas des tampons - ces derniers sont supposés de toute façon rester petits); «Available» mesure la quantité de mémoire qui peut être allouée et utilisée sans provoquer plus de swaps (voir Comment puis-je obtenir la quantité de mémoire disponible de manière portable sur les distributions? Pour beaucoup plus de détails à ce sujet).

Stephen Kitt
la source
1
Les tampons / cache ne sont pas rendus disponibles avec suffisamment de temps ; ce sont des segments de mémoire qui sont immédiatement disponibles si un programme nécessite de la mémoire pour être alloué. Voir aussi linuxatemyram.com
DopeGhoti
4

Juste pour clarifier un peu, les tampons se réfèrent aux données en cours d' écriture - cette mémoire ne peut pas être récupérée avant la fin de l'écriture.

Le cache fait référence aux données qui ont été lues - elles sont conservées au cas où elles devraient être relues, mais peuvent être immédiatement récupérées car elles peuvent toujours être relues à partir du disque.

WallStProg
la source
Ce n'est pas vraiment ce que cela signifie ici. /proc/meminfoa un champ pour Writebackspécifiquement. Il y a un champ séparé Buffers, et c'est ce qui est montré comme buffersdans free -w. Une raison courante pour l' Buffersutilisation de la mémoire est montrée ici: " 30% de la RAM sont des" tampons ". Qu'est-ce que c'est? "
sourcejedi
De cela ( access.redhat.com/solutions/406773 ) je suppose que Writeback est la partie des tampons qui n'a pas encore été écrite sur le disque. Ou dites-vous autre chose?
WallStProg
Cette description serait trompeuse. Buffersfait (maintenant) partie du cache des pages; il n'est pas compté Cached, mais il est compté comme faisant partie de Active(file) + Inactive(file). Voir les commentaires sur la réponse de Stephen Kitt. Dirtyest la partie du cache de pages qui a été écrite, et qui doit donc éventuellement être réécrite sur le disque. Writebackne comprend pasDirty . Par conséquent, Writebackne fait pas partie de la valeur de Buffers.
sourcejedi
Ce Buffersqui signifie en réalité, c'est le cache de pages associé au périphérique de blocage. Certains systèmes de fichiers l'utilisent en interne; d'autres ne l'utilisent pas du tout. / va corriger ma réponse à la question "30% de ma RAM est des tampons".
sourcejedi
2

La source canonique de ces informations est /usr/src/linux/Documentation/filesystems/proc.txt

Tampons : le stockage relativement temporaire pour les blocs de disque bruts ne devrait pas être extrêmement volumineux (environ 20 Mo). En cache : cache en mémoire pour les fichiers lus sur le disque (le cache de page). N'inclut pas SwapCached.

Vous pouvez également trouver plus de détails ici .

Le Linux Page Cache (" Cached :" de meminfo) est le plus grand consommateur de RAM sur la plupart des systèmes. Chaque fois que vous effectuez une lecture () à partir d'un fichier sur le disque, ces données sont lues en mémoire et vont dans le cache de pages (1.).
Le cache de tampon (" Buffers :" dans meminfo) est un proche par rapport aux caches dentry / inode.

Ou analysez le code source comme ceci .

Le montant de buffersest la valeur de retour de la fonctionnr_blockdev_pages(void)

long nr_blockdev_pages(void)
{
        struct block_device *bdev;
        long ret = 0;
        spin_lock(&bdev_lock);
        list_for_each_entry(bdev, &all_bdevs, bd_list) {
                ret += bdev->bd_inode->i_mapping->nrpages;
        }
        spin_unlock(&bdev_lock);
        return ret;
}

Le montant de cached:

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
axiqia
la source