Essa é uma pergunta antiga que eu tenho visto de tempos em tempos. Meu entendimento é bastante limitado (tendo lido sobre as diferenças há muito tempo, mas os factóides envolvidos nunca realmente ficaram emperrados).
Como eu entendo,
Buffers
São utilizados por programas com operações de E / S ativas, ou seja, dados aguardando gravação no disco
Cache
É o resultado de operações de E / S concluídas, ou seja, buffers que foram liberados ou dados lidos no disco para atender a uma solicitação.
Posso obter uma explicação clara para a posteridade?
linux
memory
virtual-memory
Avery Payne
fonte
fonte
Respostas:
O total "em cache" também incluirá outras alocações de memória, como qualquer item de arquivo tmpfs. Para ver isso de fato, tente:
e você verá o valor do "cache" cair nos 100Mb que copiou para o sistema de arquivos baseado em ram (assumindo que havia RAM livre suficiente, você poderá encontrar alguns deles acabados em troca se a máquina já estiver comprometida demais em termos de termos) uso de memória). O "sync; echo 3> / proc / sys / vm / drop_caches" antes de cada chamada para liberar deve gravar qualquer coisa pendente em todos os buffers de gravação (a sincronização) e limpar todos os blocos de disco em cache / em buffer da memória para que o free apenas leia outros alocações no valor "em cache".
A RAM usada pelas máquinas virtuais (como as que estão sendo executadas no VMWare) também pode ser contada no valor "em cache" do free, assim como a RAM usada pelos arquivos mapeados na memória atualmente abertos (isso varia dependendo do hipervisor / versão que você está usando e possivelmente entre versões do kernel também).
Portanto, não é tão simples como "os buffers contam com gravações pendentes de arquivos / rede e contagens em cache recentemente armazenadas em blocos de leitura / gravação mantidos na RAM para salvar futuras leituras físicas", embora, para a maioria dos propósitos, essa descrição mais simples funcione.
fonte
Questão capciosa. Ao calcular o espaço livre, você realmente precisa adicionar buffer e cache de ambos. Isto é o que eu pude encontrar
Um buffer é algo que ainda precisa ser "gravado" no disco. Um cache é algo que foi "lido" do disco e armazenado para uso posterior.
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
fonte
Eu estava procurando uma descrição mais clara sobre o buffer e encontrei em
"Professional Linux® Kernel Architecture 2008"
fonte
Explicado pelo RedHat :
Páginas de cache:
Um cache é a parte da memória que armazena dados de forma transparente, para que solicitações futuras desses dados possam ser atendidas mais rapidamente. Essa memória é utilizada pelo kernel para armazenar em cache os dados do disco e melhorar o desempenho de E / S.
O kernel do Linux é construído de tal maneira que utilizará o máximo de RAM possível para armazenar informações em cache de seus sistemas e discos de arquivos locais e remotos. À medida que o tempo passa por várias leituras e gravações, são executadas no sistema, o kernel tenta manter os dados armazenados na memória para os vários processos em execução no sistema ou os dados dos processos relevantes que seriam usados no futuro próximo. O cache não é recuperado no momento em que o processo é interrompido / sai; no entanto, quando os outros processos exigem mais memória do que a memória disponível livre, o kernel executará heurísticas para recuperar a memória, armazenando os dados do cache e alocando essa memória para o novo processo.
Quando qualquer tipo de arquivo / dado é solicitado, o kernel procurará uma cópia da parte do arquivo em que o usuário está atuando e, se essa cópia não existir, alocará uma nova página de memória cache e a preencherá com o conteúdo apropriado é lido do disco.
Os dados armazenados em um cache podem ser valores calculados anteriormente ou duplicados de valores originais armazenados em outro local do disco. Quando alguns dados são solicitados, o cache é primeiro verificado para ver se contém esses dados. Os dados podem ser recuperados mais rapidamente do cache do que de sua origem de origem.
Os segmentos de memória compartilhada do SysV também são contabilizados como um cache, embora não representem dados nos discos. Pode-se verificar o tamanho dos segmentos de memória compartilhada usando o comando ipcs -m e verificando a coluna de bytes.
Buffers:
Buffers são a representação do bloco de disco dos dados armazenados nos caches da página. Buffers contém os metadados dos arquivos / dados que residem no cache da página. Exemplo: Quando há uma solicitação de qualquer dado presente no cache da página, primeiro o kernel verifica os dados nos buffers que contêm os metadados que apontam para os arquivos / dados reais contidos nos caches da página. Uma vez que os metadados conhecem o endereço de bloco real do arquivo, ele é captado pelo kernel para processamento.
fonte
Liberando buffer / cache
Aviso Isso explica um método robusto não recomendado no servidor de produção! Então você está avisado, não me culpe se algo der errado.
Para entender, você pode forçar seu sistema a delegar o máximo de memória possível do
Preâmbulocache
que soltar o arquivo em cache:Antes de fazer o teste, você pode abrir outra janela e clicar:
para acompanhar a evolução do swap em tempo real.
Nota: Você deve descartar o máximo de discos livres no diretório atual, pois possui mem + swap
A demoNota, o host no qual eu fiz isso é fortemente usado. Isso será mais significativo em uma máquina realmente silenciosa.
fonte