Qual é a coluna de buffers na saída de free?

Qual é a coluna de buffers na saída de free?

Esses questõesliste brevemente o formato do comando free, observando que buffers é a memória do kernel que deve ser gravada no disco e cache são dados de arquivo que não precisam ser gravados no disco.

No meu sistema, diferentemente da maioria das vezes em que fiquei livre, os buffers ocupam mais de 10% da RAM. Normalmente, os buffers são um valor pequeno, quase simbólico.

Minha pergunta é: o que exatamente existe na área chamada buffers? Posso procurar com lsof? Consiste em regiões de arquivos abertos que não foram liberadas? São regiões de arquivos mapeadas na memória? O que é?

O sistema funciona bem e pouca troca é usada, então o desempenho é bom.

Responder1

freeextrai seus dados de/proc/meminfo

slkwr133701:/usr/src/linux # free

             total       used       free     shared    buffers     cached
Mem:       2053456     434572    1618884          0      77888     201820

slkwr133701:/usr/src/linux # cat /proc/meminfo

MemTotal:        2053456 kB
MemFree:         1618736 kB
Buffers:           77928 kB
....

Refere-se à memória usada para armazenamento temporário de E/S de bloco. O kernel tem que atribuir e liberar unidades do mesmo tamanho constantemente, como transferências de E/S de bloco, pacotes de rede e buffers de soquete

Você pode ver melhor os caches e as alocações de buffer executandoslabtop

Em resposta à sua pergunta de uso: O sistema normalmente alocará mais blocos do que o necessário, mas à medida que a "pressão de memória" aumenta, esses blocos adicionais serão liberados.

Responder2

"buffers" são recuperáveis ​​sob pressão de memória. Portanto, é semelhante ao cache da página (coluna "cache"); não é um grande motivo de preocupação. O valor dos "buffers" pode ser pequeno ou grande, depende do que o seu sistema está fazendo :-). Podemos encontrar aqui vários tipos de cache contados.

O cache do buffer é literalmente o cache da página do dispositivo de bloco. O Linux apenas relata isso separadamente.[*] Você pode notar o uso de "buffers" enquanto os programas leem/escrevem o nó do dispositivo de bloco, por exemplo, dd status=progress if=/dev/sda of=/dev/null. Aparentemente as pessoas também percebem isso ao executar um programa reprodutor de DVD.

Para comprovação, veja:30% da RAM são "buffers". O que é?

Se você não acessou o nó do dispositivo de bloco, seus "buffers" provavelmente são todos do sistema de arquivosmetadados. Os sistemas de arquivos usam o cache do buffer internamente como uma conveniência. Eles garantem que o arquivo nunca dupliquedados- conteúdo do arquivo - que é armazenado no cache da página principal. Exatamente para que o sistema de arquivos usa o cache do buffer - se houver alguma coisa - varia dependendo do sistema de arquivos.

Em uma máquina com uma pequena quantidade de RAM física, notei que os "buffers" podem parecer altos quando tenho sistemas de arquivos ext3/ext4. Isso ocorreu porque as gravações no diário passam pelo cache do buffer. (Veja link acima). Os sistemas de arquivos ext3/4 também armazenam o conteúdo do diretório no cache do buffer.

Em segundo lugar, os “buffers” mostrados pelo freecomando também incluem SReclaimable, ou seja, lajes recuperáveis. (Demonstrado aqui:A maneira certa de monitorar a memória do Linux, novamente).

A memória da laje énãoparte do cache de página/buffer. Contudo é conveniente contá-los juntos. Ambos são recuperáveis, e o principal (único?) uso de placas recuperáveis ​​é para cache do sistema de arquivos. Por exemplo, metadados de arquivo (inodes) e pesquisas de caminho (dentry's) são armazenados em cache em placas recuperáveis. "Memória em bloco recuperável [pode] ocupar uma grande fração da memória do sistema em sistemas principalmente ociosos com muitos arquivos."

Você pode ver os valores brutos Bufferse SReclaimableem cat /proc/meminfo. Você também pode correr slabtoppara ver a lista de lajes. AFAICT, slabtopnão fornece estatísticas sobre lajes como recuperáveis ​​ou não. Mas geralmente você pode adivinhar, e se houver alguma laje suspeita, acho que você pode procurar pelo nome.


[*] Para efeitos desta resposta, "cache de buffer" é o cache contado por Buffersin /proc/meminfo. No entanto, outras fontes podem referir-se ao cache de página inteiro como um cache de buffer unificado. Se você quiser a explicação histórica, veja o primeiro link.

Além disso, os desenvolvedores do Linux podem ter usado "buffer cache" para significar coisas diferentes, quando estavam discutindo sobre implementações de sistemas de arquivos.

Responder3

Em segundo lugar, os "buffers" mostrados pelo comando free também incluem SReclaimable

De acordo com a página de manual do comando livre (versão 3.3.15): "memória cache usada pelo cache da página e placas (em cache e SReclaimable em/proc/meminfo)"

Portanto, é o cache que inclui SReclaimable, não os buffers.

informação relacionada