Criaça na frente do computador colocando as mãos na cabeça em sinal de frustração
Pexels

Nos últimos dois anos, experimentei um problema muito estranho ao tentar transferir arquivos grandes — acima de 2 Gb — para dispositivos USB usando o Ubuntu Linux. No meio da transferência, o sistema começava a dar sinais de lentidão e, ao poucos, ficar impossível de utilizar até que o arquivo fosse completamente movido.

Dando uma rápida olhada no Monitor do Sistema do Gnome, era possível notar que a memória RAM nunca passava dos 50% e o uso do CPU, 30-40%. Não poderia ser um problema de hardware, então, depois de muita dor de cabeça com este problema, resolvi pesquisar se mais alguém estava passando pelo mesmo.

De acordo com este bug report no Launchpad, o problema seria — e eu vou fazer um resumo bem porco aqui — o excesso de cache na memória RAM em blocos (“dirty pages”) criados para evitar que grandes arquivos sejam corrompidos durante o processo de transferência no Linux. Esse processo, que roda em background, copia pequenas partes do arquivo para a memória antes de realmente transferi-los para o pendrive ou disco rígido externo. É por isso que você não pode simplesmente remover o pendrive da entrada USB logo após uma transferência ser completada: o cache ainda está sendo escrito no dispositivo.

Resolver este problema é bem simples. Diminuir a taxa de dirty pages ajuda a memória a trabalhar melhor com a transferência de arquivos para dispositivos com velocidade de gravação muito lenta, mas você pode experimentar uma perda relativa de velocidade — nos meus testes, a diferença foi de ~12%, o que considero uma oscilação irrelevante.

O procedimento é o seguinte: Passo 1: Abra o Terminal e cole o código a seguir.

sudo gedit /etc/sysctl.conf

Passo 2: Uma janela do editor Gedit irá abrir com o arquivo sysctl.conf. Depois da última linha, acrescente o seguinte:

# Diminuir taxa de dirty pages
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

Passo 3: Salve o arquivo e, de volta ao terminal, cole o código abaixo para recarregar as configurações do sysctl.

sudo sysctl -p

Você pode experimentar e modificar estes valores para números mais altos e analisar a diferença da performance no seu sistema, mas não recomendo diminuí-los ou deixá-los em zero — o que pode ocasionar travamentos em alguns aplicativos e até perda de dados.

Se tiver alguma dúvida ou sugestão sobre este bug ou algo que possa melhorar este texto, deixe um comentário abaixo e ajude outros usuários enfrentando o mesmo problema.