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 comfilefrag
.
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:
- 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). - Use
chattr
para desativar a COW no diretório que contém os arquivos em questão e, em seguida, recrie os arquivos, pois ochattr
não se aplica aos arquivos existentes. - Executa periodicamente
btrfs fi defrag
nos arquivos em questão. - 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 ...
-
nodatacow
- não tentei. -
chattr
- acabei com arquivos fragmentados de qualquer maneira. -
btrfs fi defrag
- Eu fiz isso por um tempo para testar o conceito. -
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.