初めて実行したとき、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.c
or 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()を呼び出すストレージ上のすべてを反復するので、カーネルはメタデータをメモリにロードする必要があります。そこに格納されると、再起動後に保存されたのと同じように良好です。