O que significam os campos "buff / cache" e "avail mem" na parte superior?

28

Na saída do topo, existem dois campos, marcados como "buff / cache" e "avail Mem" na memória e nas linhas de uso de swap:

insira a descrição da imagem aqui

O que esses dois campos significam?

Eu tentei pesquisá-los no Google, mas os resultados trazem apenas artigos genéricos no topo e eles não explicam o que esses campos significam.

user2064000
fonte

Respostas:

31

top's página de manual não descreve os campos, mas free' s faz:

tampões

Memória usada pelos buffers do kernel ( Buffersin /proc/meminfo)

cache

Memória usada pelo cache da página e pelas lajes ( Cachede SReclaimabledentro /proc/meminfo)

buff / cache

Soma de buffers e cache

acessível

Estimativa da quantidade de memória disponível para iniciar novos aplicativos, sem troca. Ao contrário dos dados fornecidos pelos campos de cache ou livres, este campo leva em cache de página conta e também que nem todas as placas de memória recuperável será recuperada devido a itens que estão sendo em uso ( MemAvailableno /proc/meminfo, disponível em kernels 3,14, emulados em kernels 2.6.27+ , caso contrário, o mesmo que grátis)

Basicamente, o "buff / cache" conta a memória usada para os dados que estão no disco ou deve terminar lá em breve e, como resultado, é potencialmente utilizável (a memória correspondente pode ser disponibilizada imediatamente, no caso de cache, ou com tempo suficiente, no caso de buffers - estes últimos devem permanecer pequenos de qualquer maneira); “Disponível” mede a quantidade de memória que pode ser alocada e usada sem causar mais trocas (consulte Como posso obter a quantidade de memória disponível de forma portável nas distribuições? Para muito mais detalhes).

Stephen Kitt
fonte
1
Buffers / cache não são disponibilizados com tempo suficiente ; são segmentos de memória que estão disponíveis imediatamente, caso algum programa exija a alocação de alguma memória. Veja também linuxatemyram.com
DopeGhoti 5/17/17
4

Apenas para esclarecer um pouco, os buffers se referem aos dados que estão sendo gravados - que a memória não pode ser recuperada até que a gravação seja concluída.

O cache se refere aos dados que foram lidos - eles são mantidos por aí, caso precisem ser lidos novamente, mas podem ser recuperados imediatamente, pois sempre podem ser lidos novamente a partir do disco.

WallStProg
fonte
Isso não é realmente o que significa aqui. /proc/meminfotem um campo para Writebackespecificamente. Há um campo separado Buffers, e é isso que é mostrado como buffersem free -w. Um motivo comum para Bufferso uso da memória é mostrado aqui: " 30% da RAM são" buffers ". O que é isso? "
sourcejedi
A partir disso ( access.redhat.com/solutions/406773 ), entendo que o Writeback é a parte dos buffers que ainda não foi gravada no disco. Ou você está dizendo outra coisa?
WallStProg
Essa descrição seria enganosa. Buffersé (agora) uma parte do cache da página; não é contado Cached, mas é contado como parte de Active(file) + Inactive(file). Veja comentários sobre a resposta de Stephen Kitt. Dirtyé a parte do cache da página que foi gravada e, portanto, precisa ser gravada novamente no disco. Writebacknão incluiDirty . Portanto, Writebacknão é uma parte do valor de Buffers.
sourcejedi 15/02
O que Buffersrealmente significa é o cache da página associado ao dispositivo de bloco. Alguns sistemas de arquivos usam isso internamente; outros não o usam. / vai corrigir minha resposta na pergunta "30% da minha RAM são buffers".
sourcejedi 15/02
2

A fonte canônica dessas informações é /usr/src/linux/Documentation/filesystems/proc.txt

Buffers : o armazenamento relativamente temporário de blocos de disco bruto não deve ser muito grande (cerca de 20 MB) em cache : cache na memória para arquivos lidos no disco (o cache da página). Não inclui SwapCached.

Você também pode encontrar mais alguns detalhes aqui .

O cache de página do Linux ("em cache :" do meminfo) é o maior consumidor único de RAM na maioria dos sistemas. Sempre que você faz uma leitura () de um arquivo no disco, esses dados são lidos na memória e vão para o cache da página (1).
O cache do buffer (" Buffers :" no meminfo) é um close relativo aos caches de dentry / inode.

Ou analise o código fonte como este .

A quantidade de buffersé o valor de retorno da funçãonr_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;
}

A quantidade de cached:

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
axiqia
fonte