Se eu fizer operações no Thunderbird com muitos (milhares de) e-mails, ouço uma voz falhando nos meus HDDs. Realmente não soa bonito.
Isso acontece apenas se eu fizer algo com muitos e-mails (por exemplo, mover alguns milhares para a lixeira). Também é muito lento.
Como lidar com este problema?
Uma rápida
strace
mostra que o Thunderbird usa umafsync
chamada para sincronizar seus bancos de dados locais após cada operação de e-mail . Ele força o sistema a gravar todo o seu cache de gravação. 1Fazendo isso, eles tornam o Thunderbird mais estável, pois a probabilidade do dano dos bancos de dados locais diminuirá significativamente devido a uma possível falha do sistema (ou falha do Thunderbird); no entanto, eles usam os HDDs dos usuários e tornam a capacidade de todo o sistema menos ideal.
Comportamento semelhante pode ser visto em muitos outros softwares também, não apenas no mundo de código aberto. Por exemplo, ext4 grava o cache de gravação a cada 5 segundos , tornando seu próprio fs sub-ótimo. Ou o banco de dados PostgreSQL também faz o mesmo após cada transação confirmada . Eles podem ser facilmente desativados em ambos os casos, mas não consegui encontrar o mesmo para o Thunderbird.
Minha pesquisa não mostrou como desativar esse recurso, e recompilar o thunderbird apenas para esse pequeno recurso foi claramente um exagero. Em vez disso, uma maneira simples de proibir todas as
fsync
chamadas para o Thunderbird está facilmente disponível, enquanto o Thunderbird nem sabe o que está acontecendo.O mesmo mecanismo funciona muito bem também para outros processos que gostam de sobrecarregar os discos rígidos para resultados de zero a pouco. A solução alternativa requer um compilador C com os pacotes de desenvolvimento.
O truque é ligar as
fsync()
chamadas disponíveis para o Thunderbird com uma simulação, sem fazer nada.nosync.c
:Nós o compilamos em uma pequena biblioteca compartilhada com o comando
gcc -s -Os -Wall -shared -o nosync.so nosync.c
.Depois disso, o thunderbird deve ser chamado pelo comando
LD_PRELOAD=/path/to/nosync.so thunderbird
Uau! Chega de matar HDD.
Claro, ele remove a proteção extra dos bancos de dados internos do Firefox. Pode ser particularmente perigoso apenas se você tiver dados importantes em sua conta local. No entanto, o Firefox mantém hoje mais tipicamente tudo em uma conta IMAP, seus bancos de dados locais são apenas essencialmente cache. Assim, este regular
fsync
não é necessário.1 Thunderbird é um processo multi-thread, então um pequeno script para
strace
todos os seus threads (strace pode seguir apenas um único pid).