Impacto em vários comandos do Linux em um servidor Varnish

1

Eu sei que o Varnish usa a técnica memória mapeada para armazenar dados em cache na memória, e se eu executar os seguintes comandos em uma máquina, houver alguma penalidade no desempenho geral do Varnish?

por exemplo.

Tamanho total da memória = 4 GB, um manequim de teste.txt gerado aleatoriamente = 2 GB

1. cat test.txt
2. mv test.txt /another-partition
3. cp test.txt /another-partition
4. mv test.txt /another-dir
5. cp test.txt /another-dir
    
por Ryan 26.04.2013 / 09:38

2 respostas

0

Pergunta interessante!

Como referência, esta página do autor do subsistema da VM fornecerá uma boa ideia do que provavelmente acontecerá.

link

Note que isto é realmente muito difícil de responder em sua forma atual (se você está falando sobre caches suportados por arquivos) porque depende de quão quente o cache é, por quanto tempo você armazena os itens e o 'aquecimento' de cada objeto no cache.

Assumindo o seguinte: -

  • O cache é apoiado por um arquivo 10G e foi completamente preenchido.
  • 3% dos objetos no cache perfazem 90% de todos os hits.
  • Você tem uma simultaneidade de cerca de 80 conexões gerenciadas a qualquer momento.
  • Você não alterou sua política de VM do padrão.
  • Antes do comando, o pagecache é quase que quase totalmente preenchido com páginas do seu cache de verniz.
  • 500 M de dados são alocados exclusivamente para páginas anônimas de outras coisas em execução no sistema.

Como o tamanho do seu cache de verniz é 10G, ele nunca se ajustará completamente na memória, portanto a seguinte fórmula é relativamente representativa

  • Existem 3500M de cache de páginas.
  • O mais quente 1750Mb de cache de verniz está na lista "ativa" e protegido do despejo de pagecache.
  • O cooler de 1.750 MB de cache de verniz está na lista "inativo" e não é protegido contra despejo.
  • O mais frio 6500Mb de cache de verniz não reside na memória e vive no disco em algum lugar.

Então, o seguinte é provavelmente o resultado de todos os comandos que você executa ..

  1. Este arquivo é colocado na memória e armazenado em cache, mas todos os novos objetos no cache são enviados para a lista 'inativa' por padrão.
  2. Isso despeja 1750 MB de sua memória 'mais fria / inativa' do cache de verniz e a substitui pelo arquivo catalogado.
  3. O kernel agora é forçado a gravar 1750M desses dados no disco (no pior cenário possível).
  4. IO Espera e a utilização do dispositivo é afetada porque você está lendo em um arquivo 2G e gravando um arquivo 1750M.
  5. 97% das solicitações de entrada não são afetadas por isso, porque querem os 1750Mb mais quentes de dados de verniz que estão na parte ativa do cache de páginas!
  6. 3% dos clientes desafortunados querem dados no cache do cooler. Esses caras vêem um atraso agora porque a utilização do disco já está bem alta e eles estão enfileirados para recuperar as páginas de volta no cache de páginas novamente! Como o arquivo catalogado nunca é relido rapidamente, o cache da página libera essas páginas em favor dos 3% de clientes que desejam alguns dados mais frios.

Este é o pior cenário possível. Então, de um modo geral - qual é o impacto?

Não há impacto negligenciável em 97% das solicitações atendidas.

Dos 3% que são afetados, espere um atraso maior nos que estão sendo atendidos - provavelmente 500 milissegundos.

MAS desses 3% de pedidos de azar em torno de 2% deles de qualquer maneira teriam sido lentos porque eles queriam algo fora do cache de 6500Mb que nunca estava no pagecache de qualquer maneira! No entanto, eles sofrem com a alta utilização de disco agora.

Então, em resumo, com meu exemplo artificial e assumido, você verá em termos gerais uma perda de eficiência de 3%. (100% de eficiência seria todos os objetos para cada solicitação serem atendidos sem memória).

Na execução 'normal' neste exemplo artificial, o desempenho seria cerca de 98% eficiente.

Nada mal para um cache que não cabe na memória!

    
por 27.04.2013 / 01:43
0

A resposta depende de qual back-end de armazenamento seu cache usa.

Se você configurou o verniz para usar um armazenamento baseado em arquivo, suas operações de arquivo podem ter um impacto no desempenho.

Em um sistema dedicado com 4 GB de RAM eu recomendo que você use "malloc" com um tamanho de aproximadamente 3 GB como armazenamento para o seu cache.

Veja: link

    
por 26.04.2013 / 22:15