初めて実行したとき、findまたはlsディレクトリで実行したときのように、作業に時間がかかるようです。しかし、その後は毎回、ディレクトリのコンテンツのリストがどこかにキャッシュまたはインデックスされているかのように高速です。
コンピュータの再起動後もこのキャッシュを保持する方法はありますか?
初めて実行したとき、findまたはlsディレクトリで実行したときのように、作業に時間がかかるようです。しかし、その後は毎回、ディレクトリのコンテンツのリストがどこかにキャッシュまたはインデックスされているかのように高速です。
コンピュータの再起動後もこのキャッシュを保持する方法はありますか?
回答:
vmtouchを使用して、ページキャッシュ(ディスクキャッシュ)にファイルを追加できます。
入れてnohup vmtouch -dl <files or directories> &、あなたに/etc/rc.localブーツのページキャッシュに追加するファイルとロックファイル。ファイルをページキャッシュに追加したいが、それらをメモリにロックしたくない場合は、-tフラグの代わりにフラグを使用して-ldください。
ページキャッシュの詳細については、ここ、ここ、およびWikipediaを参照してください。
build-essentialです。パッケージをインストールします。ダウンロードvmtouch.c。gcc -O2 -o vmtouch vmtouch.cor make vmtouchを実行するとvmtouch、たとえばにコピーし/usr/local/binたり、で呼び出したりできるバイナリを取得します./vmotouch。
vmtouch起動時のコマンドとして使用すると、全体の動作が遅くなりますか?私の希望は、毎回キャッシュを(高価に)再生成するのではなく、ブート全体でキャッシュを保持することでした。
「再起動後も保持する」とは思えません。ただし、起動時にキャッシュを簡単に再構築できます。これにより、ほとんど同じことが行われ、わずかな遅延が発生します。
ファイル/etc/cron.d/rebuild-fs-cacheを作成し、その中に以下を入れます:
@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1
これはniceおよびを使用してionice(デフォルトでインストールされ、パッケージマネージャーを介して確実に利用可能です。Debianはそれぞれcoreutilsとutil-linuxに配置します)、findプロセスの優先度を可能な限り最高のレベルに下げます。つまり、他のものには干渉しないはずです。システムで実行されていますが、完了するまでに少し時間がかかります。カーネルfind自体がstat()ファイルシステムデータをディスクからメモリにロードするように強制します。
キャッシュが構築されたら、OSが別のメモリを必要とするためにキャッシュが削除されない限り、キャッシュを維持する必要があります。私はしばらくこれを使用しており、正確な数値を引用することはできませんが、上記のcronジョブを使用しない場合よりも、大規模なディレクトリでもディレクトリの一覧表示はかなり高速です。
locateしていませんが、よく使用しlsています。そして時折find。(また、findとlsは、OPが要求する特定のコマンドです。)findここで使用するポイントは、stat()を呼び出すストレージ上のすべてを反復するので、カーネルはメタデータをメモリにロードする必要があります。そこに格納されると、再起動後に保存されたのと同じように良好です。