
Existe uma maneira de desativar o cache de páginas para leituras no Linux? Mais especificamente, gostaria que meus processos fossem lidos diretamente do disco.
A configuração do meu problema: estou testando novas técnicas de processamento de consultas no Postgres e medindo seu tempo de execução. Para ter uma comparação precisa do tempo de execução de diferentes métodos, preciso desativar a leitura do cache do sistema operacional.
Eu li as seguintes abordagens, mas nenhuma delas se aplica ao meu caso:
- Limpe o cache usando
echo 1 > /proc/sys/vm/drop_caches
: preciso chamar isso a cada iteração da minha consulta, o que atrapalharia meus tempos finais medidos. - Use
O_DIRECT
dentro do programa: não tenho controle sobre como o Postgres lê os arquivos - Monte meu dispositivo usando
-o sync
. Eu leioaquique desativará o buffer de gravação, mas não tenho certeza se também desativará a leitura do cache? - Uso
hdparm -W 0 /dev/sda1
: Novamente, isso desabilita apenas o cache para gravações. - Use um script específico do aplicativo explicadoaqui: Isso funcionaria se eu tivesse um único aplicativo, mas na minha configuração, tenho um servidor Postgres como serviço (com muitos threads) e um cliente. Não tenho 100% de certeza, mas parece que o script funciona para aplicativos regulares e não para serviços como o Postgres.