Desabilitar todo o cache de disco para o apache2 no linux

7

Para fins de benchmarking, eu quero forçar o Apache 2 a carregar cada arquivo solicitado do disco em vez de carregá-lo de um cache na memória. Do que eu li fazendo um sync seguido por

echo 3 > /proc/sys/vm/drop_caches

deixa cair o cache do linux. Uma requisição subsequente para um arquivo em particular não será servida a partir do cache do linux, mas solicitações adicionais para o mesmo arquivo serão atendidas novamente pelo cache do linux. Isto é assim porque / proc / sys / vm / drop_caches não desabilita o cache, ele apenas descarta o que foi armazenado em cache até aquele momento. Eu provavelmente poderia descartar o cache antes de cada solicitação, mas preferiria outra solução. Há mais alguma coisa que eu possa fazer para garantir que o apache carregue cada arquivo solicitado do disco?

Por que eu quero fazer isso : Eu sei que em operação normal o cache está habilitado. Mas o servidor não está servindo arquivos pequenos e acessados com freqüência, como páginas em HTML, imagens pequenas, etc. Em vez disso, ele está servindo arquivos que têm, na maioria, um par de megabytes de tamanho de um conjunto muito grande de arquivos. Esses arquivos são acessados de maneira bastante uniforme e, portanto, cada arquivo individual é acessado muito raramente. Assim, em operação normal, espero que a maioria dos acessos não cause um impacto no cache, mas exija que o arquivo seja carregado a partir do disco. Eu tenho vários arquivos de amostra que eu quero acessar usando o benchmark ab do apache para medir quantas transações por segundo o servidor é capaz de servir. Infelizmente, acredito que os resultados que estou obtendo sejam otimistas demais por causa do cache. Portanto, eu quero desativar o cache de disco do Linux e qualquer cache do Apache pode fazê-lo.

Atualização: a resposta dada até agora me diz como desabilitar o cache do Apache, mas ainda estou me perguntando se existe uma maneira de desabilitar o cache feito pelo kernel do linux.

    
por davitenio 23.06.2009 / 13:26

4 respostas

7

Eu não acho que você possa desabilitar todo o cache de disco no Linux.

Como um hack, você poderia continuar executando "sync; echo 3 > / proc / sys / vm / drop_caches" para liberar quase qualquer coisa armazenada em cache na memória. Do console

watch -n 1 'sync; echo 3 > /proc/sys/vm/drop_caches'

faria o truque. No exemplo acima, nada permanecerá em cache pelo kernel por mais de um segundo, embora não tenha nenhum efeito sobre os dados mantidos na memória pelo Apache ou outros processos. Também pode não descarregar coisas de qualquer arquivo mapeado na memória que ainda esteja aberto com trechos bloqueados.

Se você não quer nada armazenado em cache no início de uma execução de teste, e não se importa se ele armazena coisas em cache durante os testes, você pode simplesmente adicionar uma única chamada para "sync" e "echo 3" / proc / sys / vm / drop_caches "no início do seu teste.

Se o seu teste envolver scripts que acessam um banco de dados, você precisará ser capaz de dizer ao seu back-end de banco de dados que ele não armazene o material na RAM entre os testes também.

    
por 23.06.2009 / 19:30
2

Você pode desabilitar a maioria do caching no Apache desabilitando o mod_cache module, comentando as seguintes linhas na sua configuração deve fazer o seguinte:

  • LoadModule cache_module
  • LoadModule disk_cache_module
  • LoadModule mem_cache_module
por 23.06.2009 / 14:23
1

Não, não é possível desativar o uso do cache de buffer. Existem maneiras de fazer isso programaticamente, (abrindo o arquivo em O_DIRECT, por exemplo), mas o apache teria que ser reescrito para fazer isso.

No núcleo, parece que você está tentando avaliar seu subsistema de ES para vários arquivos de tamanho de megabytes de fluxo contínuo. Existem maneiras muito melhores de fazer isso sem misturar a sobrecarga do apache na imagem.

Se você está determinado a tentar isso, você pode tentar escrever um pequeno programa para aumentar a memória física na máquina para reduzir a quantidade de cache de disco disponível, mas isso provavelmente causaria a página arruinar seus resultados de benchmark ( O modelo de vários processos do apaches interagirá mal com isso, a menos que você defina StartServers , MinServers e MaxServers para o mesmo valor para evitar a criação do processo durante a execução do seu benchmark)

    
por 24.06.2009 / 05:18
0

Eu posso estar muito desequilibrado aqui (deixe-me saber se estou fazendo uma suposição incorreta), mas o cache de disco no Linux é conhecido como swap, e usa um swapfile ou uma partição swap.

swapoff -a 

Deve desativar o cache de disco.

    
por 23.06.2009 / 19:22