Como funciona o cache do sistema de arquivos Linux
O kernel se reserva uma certa quantidade de memória do sistema para armazenar em cache os acessos de disco do sistema de arquivos para tornar o desempenho geral mais rápido. O cache em Linux é chamado de Cache da página. O tamanho do cache da página é configurável com padrões generosos habilitados para cache grandes quantidades de blocos de disco. O tamanho máximo do cache e as políticas de quando despejar dados do cache são ajustáveis com os parâmetros do kernel. A abordagem do cache do Linux é chamada de cache de gravação. Isso significa que, se os dados forem gravados no disco, são gravados na memória no cache e marcados como sujos no cache até que sejam sincronizados com o disco. O kernel mantém estruturas de dados internas para otimizar quais dados despejar do cache quando mais espaço é necessário no cache.
Durante as chamadas do sistema de leitura do Linux, o kernel verificará se os dados solicitados são armazenados em blocos de dados no cache, isso seria um acerto de cache bem -sucedido e os dados serão retornados do cache sem fazer nenhum IO para o sistema de disco. Para um cache, a falta dos dados será buscada no sistema IO e o cache atualizado com base nas políticas de cache, pois esses mesmos dados provavelmente serão solicitados novamente.
Quando certos limiares de uso da memória forem alcançados, as tarefas de fundo começarão a escrever dados sujos no disco para garantir que ele esteja limpando o cache de memória. Isso pode ter um impacto no desempenho de aplicações intensivas em memória e CPU e requer ajuste por administradores e / ou desenvolvedores.
Usando comando grátis para visualizar o uso do cache
Podemos usar o comando gratuito da linha de comando para analisar a memória do sistema e a quantidade de memória alocada ao cache. Veja o comando abaixo:
# grátis -m
O que vemos do livre Comando acima é que há 7.5 GB de RAM neste sistema. Deste apenas 209 Mb é usado e 6.5 MB é grátis. 667 MB é usado no cache do buffer. Agora vamos tentar aumentar esse número executando um comando para gerar um arquivo de 1 gigabyte e ler o arquivo. O comando abaixo gerará aproximadamente 100 MB de dados aleatórios e depois anexará 10 cópias do arquivo juntas em um grande_file.
# dd if =/dev/aleatório de =/root/data_file count = 1400000
# para i na 'seq 1 10'; eco $ i; gato data_file >> grande_file; feito
Agora vamos ler este arquivo de 1 Gig e verificar o comando gratuito novamente:
# gato grande_file> /dev /null
# grátis -m
Podemos ver o uso do cache do buffer aumentou de 667 para 1735 megabytes um aumento de aproximadamente 1 gigabyte no uso do cache do buffer.
Proc Sys VM Drop Caches Comando
O kernel Linux fornece uma interface para soltar o cache, vamos experimentar esses comandos e ver o impacto na configuração gratuita.
# eco 1>/proc/sys/vm/Drop_caches
# grátis -m
Podemos ver acima que a maioria da alocação de cache do buffer foi libertada com este comando.
Verificação experimental que solta os caches
Podemos fazer uma validação de desempenho de usar o cache para ler o arquivo? Vamos ler o arquivo e escrever de volta para /dev /null para testar quanto tempo leva para ler o arquivo do disco. Vamos cronometrar com o tempo comando. Fazemos este comando imediatamente após limpar o cache com os comandos acima.
Demorou 8.4 segundos para ler o arquivo. Vamos ler novamente agora que o arquivo deve estar no cache do sistema de arquivos e ver quanto tempo leva agora.
estrondo! Levou apenas .2 segundos em comparação com 8.4 segundos para lê -lo quando o arquivo não foi armazenado em cache. Para verificar, vamos repetir isso novamente limpando o cache e depois lendo o arquivo 2 vezes.
Funcionou perfeitamente como esperado. 8.5 segundos para a leitura não entrelaçada e .2 segundos para a leitura em cache.
Conclusão
O cache da página é ativado automaticamente nos sistemas Linux e tornará transparentemente o IO mais rápido, armazenando dados usados recentemente no cache. Se você deseja limpar manualmente o cache que pode ser feito facilmente, enviando um comando de eco para o sistema de arquivos /proc indicando ao kernel soltar o cache e libertar a memória usada para o cache. As instruções para a execução do comando foram mostradas acima neste artigo e a validação experimental do comportamento do cache antes e depois da descarga também foram mostradas.