Como você limpa o cache da unidade no Windows?

2

Estou desenvolvendo um aplicativo vinculado a E / S e estou tentando rastrear um erro que ocorre durante a leitura de unidades com movimentação lenta. O problema com o rastreio deste Heisenbug é que algo - a unidade ou o próprio Windows, armazena em cache a leitura na memória RAM em algum lugar (seja no cache interno da unidade ou em algum lugar do SO).

Para ver o bug no meu software, tenho que reinicializar meu sistema (a execução dentro de uma VM tem o mesmo problema de desempenho - eu leio os dados uma vez e eles ficam em cache em algum lugar.)

Existe uma maneira de limpar qualquer um desses caches (sejam eles no sistema operacional ou na própria unidade)?

    
por Tritium21 10.06.2016 / 15:30

2 respostas

1

Você pode limpar o Windows StandbyList / Cache chamando a API do Windows chame NtSetSystemInformation .

Em stackoverflow alguém postou um hack diferente para limpar o cache do sistema, talvez seja o que você precisa.

    
por 10.06.2016 / 17:17
0

Você está usando chamadas Win32 IO? Em caso afirmativo, use a opção FILE_FLAG_NOBUFFERING na sua chamada CreateFile . Então, todas as chamadas ReadFile e WriteFile irão diretamente para o hardware, sem buffer ou cache no sistema operacional. Uma limitação: suas chamadas de leitura e gravação por meio desse identificador de arquivo precisam estar em múltiplos do tamanho do bloco e seu deslocamento em arquivo também deve estar em múltiplos do tamanho do bloco.

Isso não irá (afaik) parar o cache no hardware da unidade.

    
por 10.06.2016 / 21:25