Thunderbirdが大規模な作業中にハードドライブに過負荷をかけるとどうなりますか?

Thunderbirdが大規模な作業中にハードドライブに過負荷をかけるとどうなりますか?

Thunderbirdで何千もの電子メールを操作すると、HDDのクラッシュ音が聞こえます。かなり聞こえません。

これは、大量のメールで操作を実行した場合にのみ発生します(たとえば、何千ものメッセージをごみ箱に移動するなど)。また、非常に遅いです。

この問題をどのように処理しますか?

ベストアンサー1

Thunderbirdの使用量をすばやくstrace表示fsyncローカルデータベースを同期するための呼び出し各メール操作後。システムにすべての書き込みキャッシュを強制的に書き込みます。1

これにより、システムのクラッシュ(またはThunderbirdの競合)によるローカルデータベースの破損の可能性が大幅に減少するため、Thunderbirdはより信頼性が高くなります。ただし、これによりユーザーのハードドライブが磨耗し、システム全体の容量が最適レベルより低くなります。

オープンソースの世界だけでなく、他の多くのソフトウェアでも同様の動作を見ることができます。たとえば、ext4はすべての書き込みで書き込みキャッシュを作成します。5秒、自分のfsを次善策にします。あるいは、PostgreSQLデータベースも同じことをします。各取引が提出された後。これらの機能はどちらの場合でも簡単にオフにできますが、Thunderbirdでは同じ機能を見つけることができません。

私の研究によると、この機能をオフにする方法はなく、この小さな機能のためにThunderbirdを再コンパイルすることは明らかに過剰です。代わりに簡単なアプローチすべてのfsyncThunderbird呼び出しを無効にする簡単に入手でき、Thunderbirdsは何が起こっているのかわかりません。

同じメカニズムは、ハードドライブに過負荷を与え、結果がまったくないかほとんどない他のプロセスにも効果的です。この回避策を使用するには、開発パッケージと共にCコンパイラが必要です。

秘密は、fsync()何もせずにシミュレーションを使用してThunderbirdが使用できる呼び出しに接続することです。

  1. これを次の小さな.cファイルに挿入しますnosync.c
int fsync(int arg) {
  return 0;
}

int fdatasync(int arg) {
  return 0;
}
  1. このコマンドを使用して、それを小さな共有ライブラリにコンパイルしますgcc -s -Os -Wall -shared -o nosync.so nosync.c

  2. その後、Thunderbirdは次のコマンドで呼び出す必要があります。LD_PRELOAD=/path/to/nosync.so thunderbird

うわー!もうハードドライブを殺さないでください。

もちろん、これはFirefox内部データベースのさらなる保護を排除します。これは、ローカルアカウントに重要なデータがある場合にのみ特に危険です。しかし、最近Firefoxは通常すべてをIMAPアカウントに保存し、ローカルデータベースはデフォルトでキャッシュにすぎません。したがって、fsyncこの正規化は必要ありません。

1 Thunderbirdはマルチスレッドプロセスなので、straceすべてのスレッドを処理するには小さなスクリプトが必要です(straceは1つのpidしか追跡できません)。

おすすめ記事