Estou executando alguns benchmarking usando um DBMS e máquinas virtuais. E estou usando este comando
free && sync && echo 3 > /proc/sys/vm/drop_caches && free
em cada convidado, e em cada host, antes de executar uma consulta, para minimizar o efeito do cache / buffer no meu tempo de execução. Se os dados forem armazenados em cache / buffer, o tempo de execução de uma consulta pode variar dependendo de qual consulta foi executada antes, porque uma parte do arquivo usada para responder à consulta pode estar na memória.
Eu gostaria de automatizar o processo (estou fazendo isso manualmente), mas é um pouco complicado executar caches de sincronização / descarte após cada consulta. Eu preciso pedir para cada VM e para cada servidor físico para sincronizar / deixar caches. Eu poderia escrever um script e usar o SSH para fazer isso, mas gostaria de saber se existe uma maneira de impedir que o sistema operacional armazene em buffer / armazene os arquivos em cache.
Eu também encontrei esta ferramenta: link
Mas isso requer que eu o execute junto com o programa que não pode usar o cache. O que eu tenho é um DMBS distribuído rodando em um ambiente de máquina virtual, então não é simples como usá-lo para o meu caso. Eu uso um comando para inilizar cada instância em cada servidor e eles estão no topo de uma VM.
P.S.:Estou usando o Ubuntu 12.04 em todas as VMs (usando KVM) e servidores.
Tags linux virtual-machine