Por que eu desejaria desabilitar o Copy-On-Write ao criar imagens QEMU?

0

O arch wiki recomenda que as imagens tenham o recurso Copy-On-Write desativado no diretório ao usar o btfs. Eu vejo que seria uma boa idéia se você tivesse muitos arquivos de leitura / escrita. Esta pergunta explora essa ideia. Eu sei que o VMWare vai crescer em arquivos diferentes e irá gravar instantâneos que podem ser problemáticos ao usar o Copy-On-Write.

Para o QEMU, o arquivo é deixado aberto para a existência de VMs, portanto, há um possível problema na gravação depois que a VM é encerrada, mas eu veria E / S lenta após uma VM ser desligada não sendo um problema. Quais armadilhas eu estaria evitando executando este passo para o QEMU.

Além disso: Eu assumi que a imagem é bruta para essa questão. Existe um possível problema de estabilidade já que o qcow2 já tem gravação copy-on.

    
por DarkSheep 28.09.2017 / 15:59

1 resposta

4

A degradação do desempenho com imagens da VM no BTRFS não se deve apenas a muitas gravações de arquivos; no que diz respeito ao BTRFS, as gravações são para o mesmo arquivo. O problema surge de muitas gravações aleatórias no mesmo arquivo. Estas são gravações que ocorrem em todo o arquivo.

Em poucas palavras, as gravações aleatórias interferem na COW do BTRFS, resultando na fragmentação do arquivo, o que, por sua vez, causa a degradação do desempenho de leitura. Se você tiver um arquivo de imagem em mãos, poderá verificar a fragmentação de arquivos com filefrag .

Observe que isso não é um problema apenas com imagens de VM. Ela afeta qualquer arquivo gravado em deslocamentos de arquivos aleatórios, como os bancos de dados SQLite usados pelo Firefox.

Soluções / soluções alternativas

Existem algumas coisas que você pode fazer sobre a fragmentação de arquivos no BTRFS. Escolha uma das seguintes opções:

  1. Monte o sistema de arquivos com nodatacow , que desativa a COW em todo o sistema de arquivos. Embora, na verdade, evite usar COW a menos que seja absolutamente necessário (como criar um instantâneo).
  2. Use chattr para desativar a COW no diretório que contém os arquivos em questão e, em seguida, recrie os arquivos, pois o chattr não se aplica aos arquivos existentes.
  3. Executa periodicamente btrfs fi defrag nos arquivos em questão.
  4. Monte o sistema de arquivos com autodefrag para desfragmentar automaticamente o sistema de arquivos.

As duas primeiras opções desativam COW enquanto as duas últimas permitem COW, mas limpam as coisas após o fato. O BTRFS COW e o QEMU COW não devem interferir, seria apenas mais lento :)

Minha experiência pessoal

Na minha experiência com arquivos de banco de dados SQLite ...

  1. nodatacow - não tentei.
  2. chattr - acabei com arquivos fragmentados de qualquer maneira.
  3. btrfs fi defrag - Eu fiz isso por um tempo para testar o conceito.
  4. autodefrag - Eu tenho usado isso com bastante sucesso.

Para imagens QEMU, eu uso volumes LVM em vez de arquivos de imagem. Então eu não lidei com a questão da vaca.

Recursos

Leitura recomendada para ter uma noção melhor de como o COW funciona no BTRFS.

por 28.09.2017 / 18:32

Tags