Como limpar programaticamente buffers e caches no Windows

2

Eu preciso garantir que nem buffers nem caches estejam sendo empregados antes de comparar as velocidades que alguns comandos bash executam em um ambiente Cygwin. Embora esteja fazendo o benchmarking no Cygwin / bash em um PC com Windows 7, suspeito que qualquer comportamento real de armazenamento em cache seja feito pelo próprio Windows em vez de pelo Cygwin.

Em um sistema baseado em Unix , você pode fazer o seguinte para limpar todos os caches e buffers:

echo 3 > /proc/sys/vm/drop_caches

Qual é o equivalente a este comando no Windows?

    
por Hashim 27.09.2018 / 22:21

2 respostas

0

Twisty está correto de que não há nenhuma ferramenta nativa no Windows para fazer isso.

No entanto, ao fazer mais pesquisas e testes, parece que nem mesmo a ferramenta Sync da SysInternals limpa a memória usada pelo Windows para armazenar em cache arquivos e dados - também conhecidos como cache do sistema de arquivos, e que o Windows chama > memória de espera . Isso pode ser demonstrado usando o RAMMap , outra ferramenta SysInternals que monitora todas as alocações de memória no Windows.

Inspecionar a coluna Standby Memory do RAMMap antes e depois de executar a ferramenta Sync mostra que a memória de espera do Windows permanece praticamente inalterada antes e depois de executar Sync . De fato, Sync parece não ter qualquer efeito perceptível na memória, o que, até onde posso dizer, torna-o essencialmente inútil para os propósitos do teste de desempenho.

Eu descobri um método programático eficaz para limpar a lista de espera do Windows, no entanto, na forma de EmptyStandbyList. exe , um programa de linha de comando simples de Wen Jia Liu:

EmptyStandbyList.exe is a command line tool for Windows (Vista and above) that can empty:

  • process working sets
  • the modified page list
  • the standby lists (priorities 0 to 7)
  • the priority 0 standby list only

Para usá-lo, você precisa garantir que o arquivo EmptyStandbyList.exe esteja em um local dentro da variável de ambiente PATH do seu sistema, então chame EmptyStandbyList.exe do shell ou de um script quando você precisar para liberar memória.

Em CMD :

EmptyStandbyList.exe

E em bash :

cmd \/c EmptyStandbyList.exe

Para confirmar que a memória de espera do Windows foi limpa com sucesso após a execução, você pode usar novamente o RAMMap.

Antes de executar EmptyStandbyList.exe

DepoisdeexecutarEmptyStandbyList.exe

    
por 08.10.2018 / 20:18
3

Não há comando equivalente incorporado ao Windows. No entanto, a Microsoft disponibiliza livremente disponível o comando Sincronização , que faz o que você pergunte o quanto para liberar dados não gravados no disco. Faz parte do conjunto de ferramentas SysInternals.

Aqui está a descrição do autor:

UNIX provides a standard utility called Sync, which can be used to direct the operating system to flush all file system data to disk in order to insure that it is stable and won't be lost in case of a system failure. Otherwise, any modified data present in the cache would be lost. Here is an equivalent that I wrote, called Sync, that works on all versions of Windows. Use it whenever you want to know that modified file data is safely stored on your hard drives.

Você precisa de privilégios administrativos para executar o comando. Para limpar os buffers de todos discos, simplesmente execute:

sync

Se você deseja segmentar apenas uma única unidade, como C: use:

sync c:

Você também pode liberar apenas unidades removíveis com:

sync -r

Este utilitário funciona em todas as versões do Windows a partir do Vista / Server 2008 em diante.

    
por 27.09.2018 / 23:07