Limpe o cache do arquivo para repetir o teste de desempenho

106

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.

Stephen Denne
fonte
possível duplicata de Como invalidar o cache do sistema de arquivos?
user541686
1
Por que esta pergunta foi excluída ?
Dan Dascalescu

Respostas:

82

Use o aplicativo RAMMap da SysInternal .

RAMmap em espera vazia

A opção de menu Lista de espera vazia / vazia limpará o cache de arquivos do Windows.

o menor
fonte
2
RAMMap não funciona no Windows XP. Essas opções de menu fazem algo diferente do botão "Limpar" no aplicativo SysInternals Cacheset?
Stephen Denne
@stephen essa técnica funcionou perfeitamente para mim no Windows 8! O Windows XP já tem 12 anos, há algum motivo para você não tentar fazer isso no Vista, Windows 7 ou Windows 8?
Jeff Atwood
@Jeff Não trabalho mais com essas limitações. Portanto, "Lista de espera vazia" resulta na próxima leitura de um arquivo lido recentemente que requer E / S de disco?
Stephen Denne
2
Pressione F5 para atualizar a lista de arquivos após clicar na lista de espera vazia
JoshG
3
Para uma abordagem programática, consulte esta postagem do SO: stackoverflow.com/a/23085045/430360
snemarch
16

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
Funciona perfeitamente para mim no Windows 7 SP1, x64. Ótima dica!
cxxl
2
Então isso deve ser repetido para todos os arquivos ? Portanto, se, por exemplo, você copiar um diretório contendo 100 MB espalhados por 30 arquivos em 10 subdiretórios, deverá abrir cada um separadamente para ter certeza de ler o disco real em vez do cache.
Synetech 01 de
Outras respostas no site afirmam que isso funciona no Win7 e 8 também. Presumo que funcione no Vista. E sim, você tem que executá-lo em cada arquivo, mas não leva muito tempo. Tudo o que você precisa fazer é abrir e fechar cada arquivo e, ao fechar, o Windows limpa o cache. Depois de fazer isso, ENTÃO você executa o teste de desempenho.
Mooing Duck
1
Esta foi uma resposta perfeita. Simples de codificar, eficaz e deve funcionar na maioria dos sistemas operacionais Windows (incluindo XP, só testei no Win7x64). Abri os arquivos com privilégios de leitura e sem compartilhamento. Não tenho certeza de qual combinação é importante.
Rosco
Funcionalidade semelhante no Linux (2.4.10 em diante) com o sinalizador O_DIRECT no syscall open (2). Bem, mais precisamente, pelo que eu entendi, O_DIRECT não limpa o cache desse arquivo, ele tenta o melhor para contorná-lo.
kaiwan
14

Uma pesquisa rápida no Google fornece essas opções para Linux

  1. Desmonte e monte a partição que contém os arquivos
  2. sync && echo 1 > /proc/sys/vm/drop_caches
John Nilsson
fonte
2
Obrigado, isso parece muito útil, embora eu provavelmente queira exibir 3 em vez de 1. Estou principalmente interessado no Windows XP, e é por isso que não encontrei isso no Google.
Stephen Denne
Infelizmente, o ambiente Linux em que pude fazer uso disso tem kernel versão 2.6.9. drop_caches foi adicionado no kernel 2.6.16
Stephen Denne
Muitos outros posts que li sugerem que você pode desmontar e montar o sistema de arquivos para remover todos os itens chached para ele, eu diria que era o caso antes do 2.6.16, bem como nos kernels mais recentes.
TafT de
12

Um utilitário de linha de comando pode ser encontrado aqui

da fonte:

EmptyStandbyList.exe é uma ferramenta de linha de comando para Windows (Vista e superior) que pode esvaziar:

  • conjuntos de trabalho de processo,
  • a lista de páginas modificadas,
  • as listas de espera (prioridades 0 a 7), ou
  • a lista de espera de prioridade 0 apenas.

Uso:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
Edwin van Mierlo
fonte
3
Resposta altamente subestimada em meio a todo o ruído, utilitário simples que faz um trabalho e o faz bem. Você provavelmente deve incluir mais detalhes na resposta para obter os votos positivos que merece.
Prometheus
3

Encontrei uma técnica (diferente de reinicializar) que parece funcionar:

  1. Execute algumas cópias do MemAlloc
  2. Com cada um, aloque grandes blocos de memória algumas vezes
  3. Use o Process Explorer para observar a redução do tamanho do Cache do sistema para níveis muito baixos
  4. Saia dos programas MemAlloc

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.

Stephen Denne
fonte
Isso tem o efeito colateral de enviar coisas para o arquivo de paginação, o que prejudicará o desempenho por um bom tempo. Se você vai recorrer a um kludge, então pode também ler algum outro arquivo grande; pelo menos isso apenas limpa o cache de disco e nada mais.
Synetech 01 de
3

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 .

robertcollier4
fonte
0

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.

buscador
fonte