É possível desabilitar ou ajustar o compartilhamento de cache do sistema de arquivos para o OpenVZ?

1

Para o OpenVZ, uma implementação de virtualização baseada em contêiner, parece que o host e todos os convidados estão compartilhando o cache do sistema de arquivos. Isso soa paradoxal quando se fala em virtualização, mas isso é realmente um recurso do OpenVZ.

Também faz sentido. Como apenas um kernel está sendo executado, é possível se beneficiar do compartilhamento das mesmas páginas de cache do sistema de arquivos na memória. E, embora pareça benéfico, acho que uma configuração aqui realmente sofre com o desempenho dela. Aqui está o porquê: minhas máquinas não estão realmente compartilhando nenhum arquivo no disco, então não posso me beneficiar dele.

Várias máquinas OpenVZ estão executando o MySQL com tabelas MyISAM. O MyISAM depende do cache do sistema de arquivos do sistema para o armazenamento em cache de arquivos de dados, ao contrário do buffer pool do InnoDB. Além disso, algumas máquinas virtuais são conhecidas por realizar operações de E / S pesadas e grandes no mesmo sistema de arquivos no host. Para fins de teste, executei cat *.MYD > /dev/null em algum banco de dados grande em uma máquina, vi o cache do sistema de arquivos diminuindo em outro, monitorado por htop . Isso essencialmente libera todo o cache útil do sistema de arquivos em guests (FIFO) e libera os caches do MySQL nos guests. Estou certo em minha análise até aqui?

Agora os usuários estão reclamando que o MySQL é muito lento. E isso é. Algumas consultas simples de SELECT demoram vários segundos em que o tempo de E / S do disco é muito usado por outras máquinas.

Então, basta colocar:

Existe uma maneira de evitar que o cache do sistema de arquivos seja apagado por outras máquinas virtuais na virtualização baseada em contêiner?

Em vez de migrar para o KVM ou o InnoDB (veja abaixo), pode haver uma opção de confuração que estou perdendo.

Algumas ideias:

  • Escolhendo o algoritmo para limpar o cache do sistema de arquivos no kernel. (possível? como?)
  • Reservando uma determinada quantidade de páginas para uma única VM. (parece não haver opção para o tipo de páginas de cache do sistema de arquivos que lêem man vzctl )
  • A execução do MySQL em outro sistema de arquivos me levará a algum lugar?
  • Atualizando a RAM na máquina (como sugerido por @ michael-hampton). Apesar de ser uma opção barata, não resolve isso provavelmente. A atualização de + 8 GB não é proporcional à quantidade de operações de E / S do disco durante a noite, digamos, algumas dezenas de Gigabytes.

Se não, acho que minhas alternativas são:

  • Use o KVM para o MySQL-MyISAM executando VMs. O KVM, na verdade, atribui memória à VM e não permite a troca de caches, a menos que seja usado um driver balloon .
  • Mude para o InnoDB e ajuste os buffer pools, páginas sujas, etc. Agora é considerado 'legal ter' no longo prazo, já que nem todos os responsáveis pela administração do sistema entendem o InnoDB.
  • mais sugestões são bem-vindas.

Software do sistema: Proxmox (agora 1.9, pode ser atualizado para 2.x). Um grande LV atribuído para as VMs.

    
por gertvdijk 17.09.2012 / 23:33

1 resposta

1

Além das idéias que você já tinha, você poderia adicionar mais memória RAM, embora isso pareça ser um band-aid caro a curto prazo.

A longo prazo, sua melhor aposta provavelmente será abandonar o OpenVZ.

    
por 17.09.2012 / 23:43