Para esclarecer este ponto:
[Buffers are] used to temporarily store writes until they've been committed to disk. Is that a correct understanding?
Não, isso não está certo.
Você parece entender o conceito de memória cache. Quando um arquivo é lido do disco, o arquivo é mantido na memória como cache. Se um aplicativo precisar acessar esse arquivo novamente, o acesso vem da RAM, que é rápido, ao contrário de acessar o arquivo novamente a partir do disco, que é lento.
Se um aplicativo precisar gravar nesse arquivo, a gravação será executada no arquivo em RAM, que é rápido, e o kernel marcará essas páginas de memória como "sujas". No que diz respeito ao aplicativo, a gravação está completa e o aplicativo pode voltar a fazer o que fizer.
O kernel lida com a limpeza de páginas sujas no disco mais tarde. Você pode forçar um flush de todas as páginas sujas com o comando sync
, ou você verá os daemons de flushing (pdflush ou bdflush) acordarem de tempos em tempos.
Você pode ver a quantidade de memória suja a qualquer momento com cat /proc/meminfo | grep Dirty
.
Para corrigir o seu entendimento, tanto o pagecache limpo (arquivos que foram lidos) quanto o pagecache sujo (arquivos esperando para serem gravados no disco) são contados como "cache" pelo Linux.
O cache de arquivos pode ser liberado se os processos solicitarem mais alocações de memória virtual. Segmentos de memória compartilhada e tmpfs também são relatados como "cache", mas eles não podem ser liberados como o cache de arquivos pode.
Normalmente, os "buffers" são alocações de memória executando processos. Dê uma olhada em top -a
ou similar e veja qual processo está ocupando a maior parte da RAM.