
Thunderbirdで何千もの電子メールを操作すると、HDDのクラッシュ音が聞こえます。かなり聞こえません。
これは、大量のメールで操作を実行した場合にのみ発生します(たとえば、何千ものメッセージをごみ箱に移動するなど)。また、非常に遅いです。
この問題をどのように処理しますか?
答え1
Thunderbirdの使用量をすばやくstrace
表示fsync
ローカルデータベースを同期するための呼び出し各メール操作後。システムにすべての書き込みキャッシュを強制的に書き込みます。1
これにより、システムのクラッシュ(またはThunderbirdの競合)によるローカルデータベースの破損の可能性が大幅に減少するため、Thunderbirdはより信頼性が高くなります。ただし、これによりユーザーのハードドライブが磨耗し、システム全体の容量が最適レベルより低くなります。
オープンソースの世界だけでなく、他の多くのソフトウェアでも同様の動作を見ることができます。たとえば、ext4はすべての書き込みで書き込みキャッシュを作成します。5秒、自分のfsを次善策にします。あるいは、PostgreSQLデータベースも同じことをします。各取引が提出された後。これらの機能はどちらの場合でも簡単にオフにできますが、Thunderbirdでは同じ機能を見つけることができません。
私の研究によると、この機能をオフにする方法はなく、この小さな機能のためにThunderbirdを再コンパイルすることは明らかに過剰です。代わりに簡単なアプローチすべてのfsync
Thunderbird呼び出しを無効にする簡単に入手でき、Thunderbirdsは何が起こっているのかわかりません。
同じメカニズムは、ハードドライブに過負荷を与え、結果がまったくないかほとんどない他のプロセスにも効果的です。この回避策を使用するには、開発パッケージと共にCコンパイラが必要です。
秘密は、fsync()
何もせずにシミュレーションを使用してThunderbirdが使用できる呼び出しに接続することです。
- これを次の小さな.cファイルに挿入します
nosync.c
。
int fsync(int arg) {
return 0;
}
int fdatasync(int arg) {
return 0;
}
このコマンドを使用して、それを小さな共有ライブラリにコンパイルします
gcc -s -Os -Wall -shared -o nosync.so nosync.c
。その後、Thunderbirdは次のコマンドで呼び出す必要があります。
LD_PRELOAD=/path/to/nosync.so thunderbird
うわー!もうハードドライブを殺さないでください。
もちろん、これはFirefox内部データベースのさらなる保護を排除します。これは、ローカルアカウントに重要なデータがある場合にのみ特に危険です。しかし、最近Firefoxは通常すべてをIMAPアカウントに保存し、ローカルデータベースはデフォルトでキャッシュにすぎません。したがって、fsync
この正規化は必要ありません。
1 Thunderbirdはマルチスレッドプロセスなので、strace
すべてのスレッドを処理するには小さなスクリプトが必要です(straceは1つのpidしか追跡できません)。