Cache de Disco no Linux: Como Funciona e Impacta a Performance

Cache de disco Linux. Vamos falar sobre cache de disco no Linux, de forma detalhada e prática, porque é um dos temas mais importantes para entender desempenho de servidores e sistemas de arquivos.


1️⃣ O que é cache de disco no Linux

O cache de disco (ou page cache) é uma camada de memória RAM usada pelo Linux para armazenar dados lidos ou escritos recentemente no disco. Ele serve para acelerar operações de I/O sem precisar ir ao disco físico toda hora.

  • Quando você lê um arquivo, o Linux tenta servir os dados do cache em RAM em vez do disco.
  • Quando você escreve, o Linux pode primeiro colocar os dados no cache e escrever depois no disco (write-back), melhorando performance.

2️⃣ Como o Linux organiza o cache

O Linux usa a memória RAM de forma agressiva para cache, mas não compromete o sistema. Ele mantém três categorias principais:

  1. Page cache – armazena blocos de arquivos lidos do disco.
  2. Buffer cache – usado para metadados de sistema de arquivos, como inodes e tabelas de diretórios.
  3. Swap cache – páginas que foram para swap, mas ainda podem estar em RAM.

Você pode visualizar a memória de cache com:

free -h

Exemplo de saída:

              total        used        free      shared  buff/cache   available
Mem:           15G         8G         1G         0G         6G         6G
Swap:          2G         0G         2G
  • buff/cache mostra quanto de RAM está sendo usado para cache de disco e buffers.

Também é possível usar:

cat /proc/meminfo | grep -E 'Cached|Buffers|SwapCached'

3️⃣ Tipos de escrita

O Linux tem dois modos de escrita que afetam o cache:

  1. Write-back (padrão)
    • Dados vão para o cache primeiro, depois são gravados no disco em segundo plano.
    • Mais rápido, mas existe risco de perda de dados se o sistema travar antes do flush.
  2. Write-through
    • Dados vão direto para o disco, sem ficar só em cache.
    • Mais seguro, mas mais lento.

4️⃣ Comandos importantes

  • Limpar cache (útil para testes de desempenho, não para uso normal):
# Limpar cache de página, dentries e inodes
sudo sync; sudo echo 3 > /proc/sys/vm/drop_caches
  • Ver estatísticas do cache de disco:
vmstat -s | grep "cache"
  • Forçar flush de dados pendentes no disco:
sudo sync

5️⃣ Cache e desempenho

  • Cache de disco ajuda muito em leituras repetidas.
  • Sistemas de banco de dados ou aplicações I/O intensivas podem se beneficiar do ajuste do cache.
  • Parâmetros importantes em /proc/sys/vm/:
ParâmetroO que faz
vm.swappinessDetermina quando usar swap vs RAM/cache
vm.vfs_cache_pressureControla limpeza de cache de metadados
dirty_ratio / dirty_background_ratioQuando o kernel escreve dados sujos do cache para o disco

Exemplo de ajuste agressivo de cache:

# Diminuir a pressão para limpar cache de metadados
sudo sysctl -w vm.vfs_cache_pressure=50

# Flush automático mais cedo para evitar spikes
sudo sysctl -w vm.dirty_ratio=15
sudo sysctl -w vm.dirty_background_ratio=5

6️⃣ Observações importantes

  • Cache não é memória perdida: Linux libera RAM de cache automaticamente quando algum processo precisa de memória.
  • Não confunda cache com swap: swap é usado quando a RAM realmente falta, cache é apenas otimização.
  • Cache de disco é crítico para performance de I/O: em servidores web, bancos de dados e sistemas de arquivos grandes, ele pode fazer diferença enorme.