検索/ lsキャッシング


10

初めて実行したとき、findまたはlsディレクトリで実行したときのように、作業に時間がかかるようです。しかし、その後は毎回、ディレクトリのコンテンツのリストがどこかにキャッシュまたはインデックスされているかのように高速です。

コンピュータの再起動後もこのキャッシュを保持する方法はありますか?


1
確かにキャッシュされています。Linuxはキャッシュとバッファとして未使用のメモリを使用します(これは、「十分な」RAMがある場合でも、常にスワップが必要な理由の1つです)。free-commandは、利用可能な量を示します。再起動の間にキャッシュすることの重要なポイントであるかどうかはわかりませんが、多くは起動の間に変更できます。単純にすべてのファイルを処理するために、10,30分ごとに最優先で実行するcronジョブを作成してみませんか?キャッシュを常に比較的最新の状態に保つ必要があります。また、ファイルの変更を検出する方法(カーネル用)があると考えてください。
Baard Kopperud 2013年

回答:


8

vmtouchを使用して、ページキャッシュ(ディスクキャッシュ)にファイルを追加できます。

入れてnohup vmtouch -dl <files or directories> &、あなたに/etc/rc.localブーツのページキャッシュに追加するファイルとロックファイル。ファイルをページキャッシュに追加したいが、それらをメモリにロックしたくない場合は、-tフラグの代わりにフラグを使用して-ldください。

ページキャッシュの詳細については、ここここ、およびWikipediaを参照してください。


そのコマンドはUbuntuでは利用できないようです-私が試すことができる別の方法はありますか?
Richard

@Richard vmtouchを自分でコンパイルするのは非常に簡単build-essentialです。パッケージをインストールします。ダウンロードvmtouch.cgcc -O2 -o vmtouch vmtouch.cor make vmtouchを実行するとvmtouch、たとえばにコピーし/usr/local/binたり、で呼び出したりできるバイナリを取得します./vmotouch
jofel 2013年

@Richard私はUbuntuを使用していないので、これをテストしていないので責任は負いませんが、「Ubuntu mvtouch」をグーグルするとこのppaが表示されます。
terdon

@jofel、はい、簡単にコンパイルできました-ありがとう。私は可能な限りパッケージを使用することを好みます。
Richard

@エヴァン、私が間違っている場合は修正してください。しかし、vmtouch起動時のコマンドとして使用すると、全体の動作が遅くなりますか?私の希望は、毎回キャッシュを(高価に)再生成するのではなく、ブート全体でキャッシュを保持することでした。
Richard

2

「再起動後も保持する」とは思えません。ただし、起動時にキャッシュを簡単に再構築できます。これにより、ほとんど同じことが行われ、わずかな遅延が発生します。

ファイル/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はそれぞれcoreutilsutil-linuxに配置します)、findプロセスの優先度を可能な限り最高のレベルに下げます。つまり、他のものには干渉しないはずです。システムで実行されていますが、完了するまでに少し時間がかかります。カーネルfind自体がstat()ファイルシステムデータをディスクからメモリにロードするように強制します。

キャッシュが構築されたら、OSが別のメモリを必要とするためにキャッシュが削除されない限り、キャッシュを維持する必要があります。私はしばらくこれを使用しており、正確な数値を引用することはできませんが、上記のcronジョブを使用しない場合よりも、大規模なディレクトリでもディレクトリの一覧表示はかなり高速です。


1
ホイールを再発明する場合は、ロケートデータベースを更新するためにlocate付属しupdatedbているを使用することもできます:en.wikipedia.org/wiki/Locate_
Unix

@laebshadeまったく使用locateしていませんが、よく使用しlsています。そして時折find。(また、findとlsは、OPが要求する特定のコマンドです。)findここで使用するポイントは、stat()を呼び出すストレージ上のすべてを反復するので、カーネルはメタデータをメモリにロードする必要があります。そこに格納されると、再起動後に保存されたのと同じように良好です。
CVn 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.