Informações sobre o sistema de arquivos BTRFS

Btrfs ( B-tree file system)

Esse sistema de arquivos foi criado para ser mais completo que os outros disponíveis para Linux, algo como o ZFS é para os sistemas BSD.

Lento, porém rápido

O Btrfs, em diversos testes demonstrou ser mais lento que sistemas utilizados tradicionalmente no Linux, por exemplo, Ext4 e Xfs, porém, utilizamos no BigLinux uma configuração que resulta em uma percepção de desempenho por parte do usuário, mais rápida do que os sistemas de arquivos tradicionais.

Isso ocorre com o uso da compactação ZSTD, os dados do sistema ficam salvos de forma compactada. Na versão 19.04, por exemplo, em Ext4 utiliza 6,08 GB, enquanto em Btrfs utiliza 2,40 GB.

Portanto, mesmo que a leitura e gravação de cada MB, utilizando Btrfs seja mais lenta, em diversos casos é necessário ler e gravar uma quantidade menor de dados, no exemplo apresentado, é necessário ler menos da metade dos dados para realizar as mesmas operações. Dessa forma o tempo para ligar o computador, para abrir programas e diversas outras funções, tende a ser consideravelmente mais rápidas utilizando Btrfs do que outros sistemas de arquivos que não possuem o recurso de compactação.

Isso ocorre, pois, geralmente a parte mais lenta dos computadores é o armazenamento de dados, já o processador tende a ficar ocioso na maior parte do tempo, e o processo de compactação e descompactação aumenta a carga no processador e reduz no dispositivo de armazenamento.

Com os novos dispositivos de alto desempenho, SSD ou NVME, o ganho de velocidade não é perceptível, em geral também não se tem percepção de redução de desempenho, mas, ainda assim temos outros benefícios, por exemplo, o outro efeito da compactação, que é o melhor aproveitamento do espaço, apenas na instalação do sistema se economiza mais de 50% do espaço, que pode ser utilizado para armazenar uma quantidade maior de arquivos.

Os snapshots

Uma característica muito interessante é a capacidade de criar e restaurar snapshots com o uso de muito poucos recursos, quando um snapshot é gerado de forma quase instantânea e quase sem utilizar nenhum armazenamento, pois, utiliza o sistema de deduplicação, dessa forma, se você tem o mesmo arquivo em mais de um snapshot, na verdade existe apenas uma versão dele no sistema de armazenamento, e o sistema faz o controle para separar os novos arquivos, ou arquivos modificados.

Por padrão no BigLinux é feito um snapshot por dia, que fica armazenado por 5 dias, portanto, podemos voltar no tempo em até 5 dias caso percebamos que ocorreu algum problema.

Em nossa configuração padrão os arquivo pessoal do usuário não são incluídos nos snapshots, ou seja a pasta /home. Todo o restante do sistema faz parte dos snapshots. Se você preferir incluir os arquivos pessoais nos snapshots, é um processo bem simples.

Lembre que não é recomendado manter mais de 10 snapshots, pois, pode começar a degradar o desempenho do sistema.

A dificuldade de instalar utilizando Btrfs com compactação ZSTD e o Grub

Infelizmente o Grub ainda está trabalhando para incluir o suporte à compactação ZSTD e isso dificulta a instalação do sistema, porém, no instalador do BigLinux foram adicionados scripts que fazem essa configuração automaticamente.

A recomendação por toda a internet é criar uma partição /boot a parte e não utilizar ZSTD na mesma, porém, isso dificulta um pouco o controle dos snapshots do sistema.

Não incluímos no arquivo /etc/fstab o parâmetro para compactar em ZSTD, como é recomendado em todos os guias que encontrei na internet, utilizamos o seguinte comando para compactar as pastas, assim conseguindo utilizar a compactação LZO na pasta /boot, que é bem suportado pelo Grub.

btrfs property set / compression zstd
btrfs property set /home/ compression zstd
btrfs property set /@home/ compression zstd
btrfs property set /boot/ compression lzo

E na configuração do /etc/fstab utilizamos esses parâmetros:

defaults,noatime,space_cache,autodefrag,compress-force

Um destaque ao compress-force, a explicação eu encontrei no fórum do site Phoronix e não na documentação oficial, utilizando apenas o parâmetro compress, é utilizada uma verificação do btrfs para determinar arquivos a serem compactados, mas, essa verificação seria lenta, enquanto o compress-force, utiliza uma checagem que faz parte do próprio ZSTD e possui mais desempenho.

A lentidão ao instalar pacotes .deb

O dpkg/apt utilizam muitas vezes o comando sync, para certificar que os arquivos foram salvos, porém o Btrfs perde muito desempenho com esse excesso de uso do sync, para isso podemos utilizar o comando eatmydata, no BigLinux, já existe automaticamente a verificação para utilizar o eatmydata no apt e no dpkg, portanto não teremos esse tipo de lentidão no sistema.

Complementos

Link que mostra testes com os vários níveis de compressão ZSTD com o Btrfs: https://lkml.org/lkml/2019/1/28/1930

Outra tabela com testes de desempenho: https://docs.google.com/spreadsheets/d/1x9-3OQF4ev1fOCrYuYWt1QmxYRmPilw_nLik5H_2_qA/edit#gid=0

Documentação oficial do Btrfs: https://btrfs.wiki.kernel.org/index.php/Main_Page

2 Curtidas