
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
free
extrai 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 free
comando 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 Buffers
e SReclaimable
em cat /proc/meminfo
. Você também pode correr slabtop
para ver a lista de lajes. AFAICT, slabtop
nã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 Buffers
in /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.