ディレクトリが常にキャッシュにあるように強制する

ディレクトリが常にキャッシュにあるように強制する

私はC++プロジェクト全体をコンパイルするのにかかる時間を減らすためにさまざまな方法をテストしてきました。現在は5分かかります。 distcc、ccacheなどを試しました。最近、プロジェクト全体をRAMドライブにコピーしてそこからコンパイルすると、コンパイル時間が元の時間の30%、わずか1.5分に短縮されることがわかりました。

明らかに、RAMドライブで作業することは非現実的です。では、どのような方法を使用できるかを知っている人はいますか?オペレーティングシステムが常にディレクトリをキャッシュするように強制する?私はまだディレクトリがいつものようにディスクに再同期したいのですが、常にデータのメモリ内コピーを望んでいます。可能ですか?

編集する: 考えられる解決策として、私たちはrsyncディスクドライブをRAMドライブと同期させるために10秒ごとに実行されるデーモンプロセスを開始することを考えました。その後、RAMドライブでコンパイルを実行します。非常に高速rsyncですが、実際に動作しますか?もちろん、OSが良いかもしれませんが..

ベストアンサー1

キャッシュに多くのファイルを保持するための確実な方法は、そのファイルに頻繁にアクセスすることです。 Linuxはスワップとキャッシュの間で調整するのに非常に巧みなので、観察された速度の違いは実際にOSがキャッシュにエントリを保持しないためではなく、tmpfsの使用と他の試みの間の異なる違いによるものです。

各ケースでどのIOが実行されているかを見てください。基本的なツールは次のとおりです。iotop。他のツールも役に立ちます。LinuxディスクIO負荷分析(ファイルシステムパスおよび/またはプロセス別)?一定期間のI / Oを測定できるLinuxプログラムは何ですか?、サーバーエラーの他のスレッド。

何が起こるかについてのいくつかの仮定は次のとおりです。測定を行う場合は、これらの仮説を確認または反証できるようにこれを示してください。

  • ファイルがあれば面接時間一度開くと、オペレーティングシステムは、これらのアクセス時間を記録するのに多くの時間を無駄にすることができます。ビルドツリーへのアクセス時間は役に立たないので、必ずマウントオプションを使用してオフにしてくださいnoatime。あなたのtmpfs + rsyncソリューションは決してありません読むハードドライブに保存されているので、一度書き込むために余分な時間を費やす必要はありません。
  • 書かれた内容なら同期、コンパイラ呼び出しやsync()カーネルが出力バッファを頻繁にフラッシュするため、ハードディスクへの書き込みはtmpfsへの書き込みよりも時間がかかります。

おすすめ記事