Pergunta

Que ferramentas ou técnicas posso usar para remover o conteúdo do arquivo em cache para impedir meus resultados de desempenho de ser distorcida? Acredito que precisa se quer limpar completamente, ou seletivamente remover informações armazenadas em cache sobre o conteúdo de arquivos e diretórios.

A aplicação que estou desenvolvendo é um utilitário de compressão especializado, e é esperado para fazer um monte de leitura trabalho e gravação de arquivos que o sistema operacional não tocou recentemente, e cujos blocos de disco não são susceptíveis de ser armazenado em cache.

Gostaria de remover a variabilidade I ver em tempo IO quando eu repetir a tarefa de criação de perfis diferentes estratégias para fazer o trabalho de processamento de arquivo.

Estou interessado principalmente em soluções para o Windows XP, como é que minha máquina de desenvolvimento principal, mas eu também pode testar usando linux, e por isso estou interessado em respostas para que o ambiente também.

Eu tentei SysInternals CacheSet , mas clicando em "Clear" doesn' t resultado em um aumento mensurável (restauração ao calendário após um cold-boot) na hora de arquivos leia re-Acabei de ler algumas vezes.

Foi útil?

Solução

Usar Sysinternal RAMMap aplicativo .

rammap de espera vazia

A opção vazio / vazio do menu Lista de Espera irá limpar o cache de arquivos do Windows.

Outras dicas

Para o Windows XP, você deve ser capaz de limpar o cache para um arquivo específico, abrindo o arquivo usando CreateFile com as opções FILE_FLAG_NO_BUFFERING e, em seguida, fechando a alça. Isso não está documentado, e eu não sei se ele funciona em versões posteriores do Windows, mas eu usei isso há muito tempo ao escrever código de teste para comparar bibliotecas de compressão de arquivo. Não me lembro se ler ou escrever acesso afetados este truque.

A googling rápida dá essas opções para Linux

  1. Desmontar e montar a partição que contém os arquivos
  2. sync && echo 1 > /proc/sys/vm/drop_caches

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

a partir da fonte:

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

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

Uso:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist

Eu encontrei uma técnica (diferente de reiniciar) que parece funcionar:

  1. Executar algumas cópias de MemAlloc
  2. Com cada um, alocar grandes blocos de memória algumas vezes
  3. Use o Process Explorer para observar o tamanho do cache do sistema reduzindo a níveis muito baixos
  4. feche os programas MemAlloc

Não é, porém seletiva. Idealmente, eu gostaria de ser capaz de limpar as partes específicas de memória que está sendo usada para armazenar em cache os blocos de disco de arquivos que eu quero não ser armazenado em cache.

 #include <fcntl.h>

int posix_fadvise(int fd, off_t offset, off_t len, int advice);

com opção de aconselhamento POSIX_FADV_DONTNEED:
Os dados especificados não serão acessados ??no futuro próximo.

Para uma visão muito melhor do Windows XP sistema de arquivos de cache - tente ATM por Tim Murgent - ele permite que você ver tanto o sistema de arquivos de cache tamanho conjunto de trabalho e tamanho Lista de espera em uma visão mais detalhada e precisa. Para o Windows XP - você precisa da versão antiga 1 de ATM, que está disponível para download aqui desde V2 e V3 exigem Server 2003, Vista ou superior.

Você vai observar que, embora Sysinternals CacheSet irá reduzir o "Cache WS Min" - os dados reais ainda continua a existir na forma de listas de espera a partir de onde ele pode ser usado até que tenha sido substituído por outra coisa. Para, em seguida, substituí-lo com outra coisa usar uma ferramenta como MemAlloc ou flushmem por Chad Austin ou Consume.exe do Windows Server 2003 Resource Kit Tools .

Como a questão também pediu para Linux, há uma resposta relacionada aqui .

A ferramenta de linha de comando vmtouch permite adicionar e remover arquivos e diretórios a partir do cache de arquivos do sistema, entre outras coisas.

Há uma chamada API janelas https: //docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize que pode ser usado para liberar o cache do sistema de arquivos. Ele também pode ser usado para limitar o tamanho do cache para um valor muito pequeno. Parece perfeito para estes tipos de testes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top