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.
windows-xp
windows-7
Sebastiaan M
fonte
fonte
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:
fonte
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.
fonte
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.
fonte
Reinicie a máquina.
fonte
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.
fonte
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.
fonte
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.
fonte
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.Veja esta resposta que acabei de publicar na minha própria pergunta no StackOverflow.
Basicamente: se você tentar
CreateFile
um identificador sem acesso de compartilhamento de gravação, ele liberará e invalidará o cache, mesmo se retornar um erro.Espero que isto ajude!
fonte