48GB RAM(6x8GBスティックを備えたX58プラットフォーム)を取得し、Win7でFancyCacheに16GBを割り当てました。FancyCacheには組み込みの監視機能が付属しています。使用率の監視は断然、その決定を下すためにあなたができる最も重要なことです。
このボックスを使用して、大きな辞書(〜400GB)を使用してパスワードを解読しているので、少なくとも最も頻繁に使用される辞書のいくつかをRAMに保持したいと考えていました。驚いたことに、私のスクリプトのセットアップ方法のために、異なる辞書を使用して同じ一連のハッシュをループ処理し、新しい辞書を継続的に読み取ってキャッシュを事実上「ダーティアップ」しました。その結果、キャッシュヒット率は非常に悪くなりました(0.1%程度)。だから私はこのように注文をひっくり返しました:
から
for hash in hashes;
for dict in dicts;
crack hash with dict
に
for dict in dicts;
for hash in hashes;
crack hash with dict`
このようにして、読み込まれたばかりの辞書は次のハッシュセットのためにメモリ内に残り、次の読み込みはディスクではなくRAMから行われます。
この小さなオーダーフリップは、現在約80%の平均であるため、読み取りキャッシュを起動しました。その一つの観察は金の価値があった。
さらに、FancyCacheを、IOに依存せずにI / Oが大きくなることがわかっているデータを含むディスクでのみ動作するように制限することも非常に有益です。
2番目に良かったのは、書き込みキャッシュの動作を観察することでした。結局のところ、いくつかのプログラムはそれを安全に再生しており、複数の書き込みをより頻繁ではないがより大きな書き込みにマージする代わりに、少しの機会ごとにデータをダンプしようとします。完全同期方式で実行すると、書き込みが完了するまでプログラムがブロックされました。私のボックスはUPS上にあるので、書き込みキャッシュがライトバックを完了する前に爆発を心配する必要はありません。これはメインプログラムの生のパフォーマンスを大いに助けましたが、書き込みキャッシュがディスクへのダーティバッファのコミットでビジー状態になるたびにシステムが停止することはないため、システムのスムーズさも目に見えて役立ちました。もちろん、UPS(ラップトップの場合はバッテリー)がなければ、これは危険なシナリオになります。
「ワーキングセット」サイズの場合、これらすべてが根本的なCS問題になります。単一の4GBファイルで作業している場合、おそらく4GBを少し超える程度で十分です(アプリケーションが複数レベルの元に戻す操作をメモリに保存しようとしない限り)。実際に使用していない限り、FancyCacheにメモリを割り当てる意味はありません。100%に近い場合は大きくしますが、2%の場合はRAMを無駄にしています。