Como limpar o cache de leitura de disco do Windows?

13

Para teste de desempenho, preciso limpar o cache de leitura de disco do Windows. Tentei pesquisar no Google, mas não consegui encontrar nada além de reiniciar ou outras coisas manuais. Antes de desistir e fazer isso, gostaria de saber se alguém sabe como limpar o cache de leitura de disco do Windows. Estou testando no Windows 7, mas também estou interessado em soluções do Windows XP.

Sebastiaan M
fonte

Respostas:

3

Como alternativa, preencha o cache com dados que você sabe que não serão usados ​​no teste e execute o teste.

Maximus Minimus
fonte
1
Como alternativa, você pode levar toda a RAM disponível. O Windows liberará o cache do arquivo para usar essa RAM. Para detalhes, veja a resposta fornecida por Stephen Denne.
Ultralisk
Eu esperava algo menos 'solução alternativa', mas acho que sua sugestão é mais fácil de implementar em um script de teste automático na minha situação. Obrigado pela sugestão.
Sebastiaan M
7

Eu fiz a mesma pergunta no Stack Overflow

/programming/478340/clear-file-cache-to-repeat-performance-testing

Eu estava usando o Win XP, mas a melhor solução que encontrei foi:

  1. Execute algumas cópias do MemAlloc
  2. Em cada um deles, aloque grandes pedaços de memória algumas vezes
  3. Use o Process Explorer para observar o tamanho do cache do sistema reduzindo para níveis muito baixos
  4. Saia dos programas MemAlloc
Stephen Denne
fonte
3

Para uma visão muito melhor do cache do sistema de arquivos do Windows XP - tente o ATM de Tim Murgent - ele permite visualizar o tamanho do conjunto de trabalho e o tamanho da lista de espera do cache do sistema de arquivos em uma visualização mais detalhada e precisa. Para Windows XP - você precisa da versão antiga 1 do ATM, disponível para download aqui, pois as versões V2 e V3 requerem o Server 2003, Vista ou superior.

Você observará que, embora o Cacheset reduza o "Cache WS Min" - os dados reais ainda existem 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, flushmem de Chad Austin ou Consume.exe nas Ferramentas do Windows Server 2003 Resource Kit.

Robert Collier
fonte
3

Eu usei o RAMMap . Tem possibilidade de liberar memória de alguns tipos de alocações.

O conteúdo do cache do arquivo pode ser observado na guia "Resumo do arquivo" e selecionar "Lista de espera vazia" no menu "Vazio" deve limpar esse cache.

pbies
fonte
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Slm
1

Reinicie a máquina.

Joe Koberg
fonte
Esta é a solução "o grande martelo". Veja a resposta fornecida por Stephen Denne.
Ultralisk
1

A melhor prática é garantir que os arquivos de teste com os quais você está comparando sejam 2x maiores que o cache do controlador de matriz (ou a memória do sistema operacional Windows, se comparados em um convidado da vm), com um arquivo de teste mínimo de 1 GB. Isso garante que qualquer cache será negado. Usamos o SQLIO para benchmarking de disco; há muitas informações na documentação anexa.

Greg Askew
fonte
Uma das coisas que estou tentando fazer é avaliar a rapidez com que nosso projeto se baseia em várias configurações. Eu realmente não posso aumentar o tamanho desses arquivos, eu acho. :)
Sebastiaan M
1

Fazendo eco a Greg, a maneira de solucionar esse problema é garantir que o conjunto de dados com o qual você está trabalhando exceda bastante a quantidade de RAM disponível. Se você estiver testando em uma plataforma de hardware que também inclua uma quantidade significativa de caches de controlador e disco, convém garantir que também esteja excedendo esses valores. Isso garantirá que o desempenho que você vê esteja mais vinculado ao desempenho real do hardware do que as otimizações de software introduzidas por todas essas camadas de cache.

Dito isto, se você está realmente apenas tentando limpar o cache de leitura de dados úteis antes de executar seus benchmarks que QUEREM usar cache de leitura, a maneira de fazer isso é ler em um único arquivo dimensionado apenas sob a memória do cache de leitura e faça algumas operações de arquivo para ele. Isso limpará o cache e o preencherá com esse único arquivo grande. Depois de fechá-lo, seu cache é efetivamente liberado dos dados importantes para você . A parte complicada é descobrir qual o tamanho desse arquivo, que atualmente pode muito bem ter 3 GB de tamanho; Nesse ponto, você pode precisar de vários arquivos indesejados de 1 GB para fazê-lo funcionar.

sysadmin1138
fonte
0

Eu acho que quase todas as opções serão "coisas manuais". No UNIX, é bastante padrão desmontar / remontar um dispositivo antes de cada benchmark ser executado, geralmente com um "newfs" acionado para uma boa medida. Não sei se você pode usar ferramentas de linha de comando no Windows para desmontar / montar dispositivos, mas se a automação é sua meta, vale a pena procurar esses utilitários.

Geoff Fritz
fonte
1
No Linux, se desmonte / remuont não for uma opção, por algum motivo, você também poderá fazê-lo sync; echo 3 > /proc/sys/vm/drop_caches- embora isso afete todos os cache / buffers e não apenas aqueles pertencentes a um volume específico. Eu já procurei um truque semelhante para o Windows, mas não o encontrei.
21915 David Spillett
0

Veja esta resposta que acabei de publicar na minha própria pergunta no StackOverflow.

Basicamente: se você tentar CreateFileum identificador sem acesso de compartilhamento de gravação, ele liberará e invalidará o cache, mesmo se retornar um erro.

Espero que isto ajude!

user541686
fonte