Maior Desempenho e Performance

Preparamos algumas configurações para melhorar a performance  do BigLinux.

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 duplicaçã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.

DISABLE FSYNC

Quando um programa salva um arquivo, esse arquivo primeiro vai para a cache em memória RAM, que é muito mais rápida que o armazenamento, então depois disso o arquivo será realmente salvo no dispositivo de armazenamento, geralmente um HD ou um SSD.

Para o programa saber se o arquivo já foi realmente salvo no armazenamento, é utilizando o fsync.

Geralmente ao efetuar um fsync o programa interrompe os processos e aguarda uma resposta do sistema confirmando que o arquivo foi salvo, após isso o programa segue seus processos.

Uma memória RAM DDR2-400, tecnologia de 2003, tem velocidade de 3200 MB/s, uma memória RAM DDR4-4400 chega a 35200 MB/s, ou mesmo uma popular e já antiga DDR3-1333 chega a 10667 MB/s.

Em 2021 poucos dispositivos de armazenamento NVME, os mais rápidos atualmente, chegam a 3200 MB/s, a maioria dos SSDs chegam a 400 MB/s e os HDs rotacionais em torno de 150 MB/s.

Em quase todos os computadores a diferença de velocidade entre a memória RAM e o dispositivo de armazenamento é no mínimo 10x, muitas vezes a diferença é maior que 100x.

Ao mesmo tempo o fsync é a forma de assegurar que aquela informação realmente foi salva e caso ocorra travamento no sistema ou falta de energia, aquela informação está armazenada.

É uma questão de equilíbrio entre assegurar a integridade dos dados ou assegurar o desempenho.

Por muito tempo ocorreu a discussão sobre utilizar a opção nobarrier no arquivo /etc/fstab, porém isso sempre trouxe grande quantidade de corrompimento de arquivos em situação de falta de energia, o nobarrier é uma forma de ignorar o fsync diretamente no sistema de arquivos.

Aqui o foco é apenas no sistema de arquivos BTRFS, que possui níveis de checagens maiores que a maioria dos sistemas de arquivos, o que evita o corrompimento dos dados.

A forma que consegui atingir um bom nível de desempenho com o mínimo de perda na integridade dos dados foi utilizar o LD_PRELOAD para desativar o fsync e o fdatasync no nível do aplicativo e não do sistema de arquivos.

Para ter mais desempenho também utilizo essas configurações no BTRFS, no arquivo /etc/fstab:

noatime,usebackuproot,space_cache=v2,discard=async,autodefrag,compress-force=zstd:2,commit=10

A opção commit=10 ajuda a melhorar a integridade dos dados, reduzindo de 30 segundos para 10 segundos o tempo que o sistema de arquivos aguarda até salvar os arquivos que estão em cache na memória RAM, tornando bastante improvável que sejam perdidos mais do que os últimos 10 segundos de arquivos salvos no caso de falta de energia.

Essa configuração trouxe grandes ganhos de desempenho, principalmente em computadores que ainda utilizam HD rotacional.

btrfs + zstd que além de rápido, economiza espaço e tem snapshot integrado ao grub
com nofsync deixa ainda mais rápido o sistema.

zram e preload que deixa o carregamento dos programas mais rápido, economizaram sem swap.

customização do TLP (tem uma parte que foi lançada esses dias que melhora ainda mais a performance, mas foi o jibreel que escreveu, eu só ajudei a testar, não sei dizer ao certo que foi implementado.)

optimização dos navegadores web que rodam mais liso e consumindo menos recursos da máquina

altas customizações para diminuir o uso de CPU e memória RAM

render via software, aceleração de navegadores, pre-load, botões, travar desktop, rolagem e indexação de arquivos

NOSYNC BROWSER

Não me refiro à quantidade de dados armazenados, mas à frequência de gravações, nos meus testes não foi difícil com algumas abas abertas ter situações com 2 GB de dados gravados por minuto, utilizando o nosync-browser, a redução ficou entre 80% e 90%, isso mesmo, de 2 GB foi para algo em torno de 200 MB a 400 MB.

Para monitorar as gravações utilizei o comando:

 sudo iotop -Pak

Eu já sabia que o eatmydata reduz muito a gravação em disco dos navegadores, tanto no Firefox quanto no Chromium, porém, outros navegadores não abrem utilizando o eatmydata, efetuei alguns testes com o strace e percebi conflito com o FUTEX, testei também com o nosync e o erro permanecia, porém, o código do nosync é mais simples e consegui adaptá-lo para funcionar com outros navegadores, o que nomeei como nosync-browser.

Isso reduz o número de sincronizações dos dados com o armazenamento, não tem nenhuma relação entre o sistema de sincronização do navegador com sistemas nas nuvens. Na prática, não percebemos nenhuma alteração no uso do navegador, exceto o desempenho, principalmente ao ter muitas abas abertas. Essa redução de sincronizações pode fazer perder alguns segundos do histórico do navegador em caso de falta de energia, o tipo de “problema”, que me parece em quase todos os casos, irrelevante.

BIGBASHVIEW

Interface gráfica para o terminal, utilizando Web para execução de scripts e apps.
Frontends gráficos para shellscripts usando HTML/JS/CSS
O BigBashView é uma interface para o terminal Bash que renderiza a saída do terminal utilizando QTwebkit.

Uma forma fácil e rápida para criar interfaces em sistemas Linux.

Nós do BigLinux precisávamos de uma solução, opções como Kdialog e Zenity são simplistas demais para o que precisamos, por isso criamos o BigBashView que tem se mostrado muito eficiente, inclusive mais que o Kommander.

BigBashView utiliza:

Uma forma fácil e rápida para criar interfaces em sistemas Linux. Para quem desenvolve sites em PHP irá notar diversas similaridades.

Servidores e Apoiadores

Alguns dos nossos parceiros que ajudam o BigLinux.

Pronto para começar?

Seja Big, use o BigLinux!