Quais ferramentas ou técnicas posso usar para remover o conteúdo do arquivo em cache para evitar que meus resultados de desempenho sejam distorcidos? Acredito que preciso limpar completamente ou remover seletivamente as informações armazenadas em cache sobre o conteúdo do arquivo e do diretório.
O aplicativo que estou desenvolvendo é um utilitário de compactação especializado e espera-se que faça muito trabalho lendo e gravando arquivos que o sistema operacional não alterou recentemente e cujos blocos de disco provavelmente não serão armazenados em cache.
Desejo remover a variabilidade que vejo no tempo de E / S quando repito a tarefa de traçar o perfil de estratégias diferentes para fazer o trabalho de processamento de arquivo.
Estou principalmente interessado em soluções para Windows XP, já que essa é minha principal máquina de desenvolvimento, mas também posso testar usando o Linux e, portanto, estou interessado em respostas para esse ambiente.
Tentei SysInternals CacheSet , mas clicar em "Limpar" não resulta em um aumento mensurável (restauração do tempo após uma inicialização a frio) no tempo de reler os arquivos que acabei de ler algumas vezes.
fonte
Respostas:
Use o aplicativo RAMMap da SysInternal .
A opção de menu Lista de espera vazia / vazia limpará o cache de arquivos do Windows.
fonte
Para o Windows XP, você deve ser capaz de limpar o cache de um arquivo específico abrindo o arquivo usando CreateFile com as opções FILE_FLAG_NO_BUFFERING e fechando o identificador. Isso não está documentado e não sei se funciona em versões posteriores do Windows, mas usei isso há muito tempo ao escrever o código de teste para comparar bibliotecas de compactação de arquivo. Não me lembro se o acesso de leitura ou gravação afetou esse truque.
fonte
Uma pesquisa rápida no Google fornece essas opções para Linux
sync && echo 1 > /proc/sys/vm/drop_caches
fonte
Um utilitário de linha de comando pode ser encontrado aqui
da fonte:
fonte
com opção de conselho
POSIX_FADV_DONTNEED
:Os dados especificados não serão acessados em um futuro próximo.
fonte
Encontrei uma técnica (diferente de reinicializar) que parece funcionar:
Mas não é seletivo. Idealmente, gostaria de poder limpar as partes específicas da memória que estão sendo usadas para armazenar em cache os blocos de disco de arquivos que não desejo mais armazenar em cache.
fonte
Para uma visualização muito melhor do Cache do Sistema de Arquivos do Windows XP - experimente ATM de Tim Murgent - ele permite que você veja o tamanho do Conjunto de Trabalho do cache do sistema de arquivos e o tamanho da Lista de Espera em uma visualização mais detalhada e precisa. Para Windows XP - você precisa da versão 1 antiga do ATM, que está disponível para download aqui, já que V2 e V3 requerem Server 2003, Vista ou superior.
Você observará que embora o Sysinternals Cacheset reduza o "Cache WS Min" - os dados reais ainda continuam a existir na forma de listas de espera de onde podem ser usados até que sejam substituídos por outra coisa. Para substituí-lo por outra coisa, use uma ferramenta como MemAlloc ou flushmem de Chad Austin ou Consume.exe do Windows Server 2003 Resource Kit Tools .
fonte
Como a pergunta também feita para o Linux, há uma resposta relacionada aqui .
A ferramenta de linha de comando vmtouch permite adicionar e remover arquivos e diretórios do cache de arquivos do sistema, entre outras coisas.
fonte
Há uma chamada de API do Windows https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize que pode ser usada para liberar o cache do sistema de arquivos. Ele também pode ser usado para limitar o tamanho do cache a um valor muito pequeno. Parece perfeito para esses tipos de testes.
fonte