Para mim, não está claro qual é a diferença entre os dois conceitos de memória do Linux: buffer
e cache
. Eu li este post e me parece que a diferença entre eles é a política de expiração:
- a política do buffer é a primeira a entrar, a primeira a sair
- a política do cache é Menos Utilizada Recentemente.
Estou certo?
Em particular, estou olhando para os dois comandos: free
evmstat
james@utopia:~$ vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
5 0 0 173 67 912 0 0 19 59 75 1087 24 4 71 1
james@utopia:~$ free -m
total used free shared buffers cached
Mem: 2007 1834 172 0 67 914
-/+ buffers/cache: 853 1153
Swap: 2859 0 2859
free
saída do comando?Respostas:
"Buffers" representam quanta porção de RAM é dedicada ao cache de blocos de disco. "Em cache" é semelhante a "Buffers", só que desta vez ele armazena em cache as páginas da leitura do arquivo.
Citação do:
fonte
cache
preenchimentos são preenchidos conforme relatado porfree -w -h
, não abuffers
coluna. Eu acho que acache
coluna conta as gravações e leituras do disco ebuffers
é usada para outra coisa.link de citação
fonte
Resposta citada (para referência):
fonte
Não é tão simples assim, mas pode ajudar a entender:
O buffer é para armazenar metadados de arquivo (permissões, localização, etc.). Cada página de memória é mantida por aqui.
O cache é para armazenar o conteúdo real do arquivo.
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 dos 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 em um 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 são conhecidos, o endereço de bloco real do arquivo é captado pelo kernel para processamento.
fonte
buffer e cache.
Um buffer é algo que ainda precisa ser "gravado" no disco.
Um cache é algo que foi "lido" do disco e armazenado para uso posterior.
fonte
Acho que esta página ajudará a entender profundamente a diferença entre buffer e cache. http://www.tldp.org/LDP/sag/html/buffer-cache.html
A leitura de um disco é muito lenta em comparação com o acesso à memória (real). Além disso, é comum ler a mesma parte de um disco várias vezes durante períodos relativamente curtos. Por exemplo, pode-se primeiro ler uma mensagem de email, depois ler a carta em um editor ao responder a ela e fazer com que o programa de email a leia novamente ao copiá-la para uma pasta. Ou considere com que frequência o comando
ls
pode ser executado em um sistema com muitos usuários. Lendo as informações do disco apenas uma vez e mantendo-as na memória até que não sejam mais necessárias, é possível acelerar tudo, exceto a primeira leitura. Isso é chamado de buffer de disco e a memória usada para esse fim é chamada de cache do buffer.Como a memória é, infelizmente, um recurso finito, ou escasso, o cache do buffer geralmente não pode ser grande o suficiente (não pode conter todos os dados que se deseja usar). Quando o cache fica cheio, os dados que não foram utilizados por mais tempo são descartados e a memória liberada é usada para os novos dados.
O buffer de disco também funciona para gravações. Por um lado, os dados gravados geralmente são lidos em breve novamente (por exemplo, um arquivo de código-fonte é salvo em um arquivo e depois lido pelo compilador); portanto, colocar os dados gravados no cache é uma boa idéia. Por outro lado, colocando apenas os dados no cache e não os gravando no disco de uma só vez, o programa que grava é executado mais rapidamente. As gravações podem ser feitas em segundo plano, sem diminuir a velocidade dos outros programas.
fonte
O Link 2 de Seth Robertson disse "Para uma compreensão completa desses termos, consulte o livro do kernel do Linux, como o Linux Kernel Development, por Robert M. Love".
Encontrei alguns conteúdos sobre 'buffer' na 2ª edição do livro.
fonte
O buffer contém metadados que ajudam a melhorar o desempenho da gravação
O cache contém o próprio conteúdo do arquivo (às vezes ainda não foi gravado no disco), o que melhora o desempenho da leitura
fonte
Citação do livro: Introdução à recuperação de informações
Cache
Amortecedor
fonte
Um buffer é uma região da memória usada para reter dados temporariamente enquanto estão sendo movidos de um local para outro dentro de um computador. Enquanto um cache é uma área de armazenamento temporário onde dados acessados com frequência podem ser armazenados para acesso rápido. Depois que os dados são armazenados no cache, o uso futuro pode ser feito acessando a cópia em cache, em vez de buscar novamente os dados originais, para que o tempo médio de acesso seja menor.
fonte