Find / ls Caching

10

Es scheint, als würde es eine Weile dauern, bis ich zum ersten Mal findoder lsin einem Verzeichnis arbeite. Aber jedes Mal danach ist es schnell, als ob eine Liste des Inhalts des Verzeichnisses irgendwo zwischengespeichert oder indiziert worden wäre.

Gibt es eine Möglichkeit, diesen Cache beim Neustart des Computers beizubehalten?

Richard
quelle
Es ist in der Tat zwischengespeichert. Linux verwendet unbenutzten Speicher als Cache und Puffer (das ist ein Grund, warum Sie immer einen Swap haben sollten, auch mit "genug" RAM). Der Befehl free zeigt Ihnen, wie viel verfügbar ist. Ich bin mir nicht sicher, ob es sinnvoll ist, zwischen Neustarts zwischenzuspeichern. Zwischen den Starts kann sich viel ändern. Wie wäre es, wenn Sie alle 10,30 Minuten einen Cron-Job mit der niedrigsten Priorität ausführen, um einfach alle Ihre Dateien durchzugehen? Sollte den Cache jederzeit relativ aktuell halten. Denken Sie auch, dass es eine Möglichkeit (für den Kernel) gibt, Dateiänderungen zu erkennen.
Baard Kopperud

Antworten:

8

Mit vmtouch können Sie Dateien zu Ihrem Seiten-Cache (Festplatten-Cache) hinzufügen.

Fügen Sie nohup vmtouch -dl <files or directories> &Ihre /etc/rc.localDatei ein, um Dateien beim Booten in Ihren Seitencache einzufügen und dort zu sperren. Wenn Sie Dateien zu Ihrem Seitencache hinzufügen möchten, diese aber nicht im Speicher sperren möchten, verwenden Sie das -tFlag anstelle der -ldFlags.

Weitere Informationen zum Seiten-Cache finden Sie hier , hier und auf Wikipedia .

Gemeinschaft
quelle
Dieser Befehl scheint in Ubuntu nicht verfügbar zu sein - gibt es eine Alternative, die ich ausprobieren kann?
Richard
@Richard Es ist sehr einfach, vmtouch selbst zu kompilieren: Installieren Sie das build-essentialPaket. Herunterladen vmtouch.c. Führen Sie gcc -O2 -o vmtouch vmtouch.coder aus, make vmtouchund Sie erhalten die Binärdatei, vmtouchdie Sie beispielsweise kopieren /usr/local/binoder aufrufen können ./vmotouch.
Jofel
@Richard Ich benutze kein Ubuntu, also habe ich dies nicht getestet und übernehme keine Verantwortung, aber das Googeln von "Ubuntu mvtouch" brachte diesen ppa hervor .
Terdon
@jofel, ja, es war einfach genug zu kompilieren - danke. Ich bevorzuge es einfach, wenn möglich Pakete zu verwenden.
Richard
@Evan, korrigiere mich, wenn ich falsch liege, aber würde es nicht vmtouchals On-Boot-Befehl die Arbeit verlangsamen? Meine Hoffnung war es gewesen, einen Cache über Stiefel hinweg zu erhalten, anstatt ihn jedes Mal (teuer) neu zu generieren.
Richard
1

"Über Neustarts hinweg erhalten", bezweifle ich. Sie können den Cache jedoch beim Booten trivial neu erstellen, wodurch fast dasselbe erreicht wird, abzüglich einer kleinen Verzögerung.

Erstellen Sie eine Datei /etc/cron.d/rebuild-fs-cacheund fügen Sie Folgendes ein:

@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1

Diese Anwendungen niceund ionice(die standardmäßig installiert werden soll, und auf jeden Fall über den Paketmanager zur Verfügung stehen; Debian stellt sie in coreutilsund util-linuxjeweils) die Priorität des senken findProzess zu den schönsten Ebenen möglich, das heißt , es sollte nicht anders mit etwas stören Die Ausführung auf Ihrem System dauert jedoch etwas länger. findselbst wird durchlaufen und stat()alles, was den Kernel zwingt, die Dateisystemdaten von der Festplatte in den Speicher zu laden.

Sobald der Cache erstellt wurde, sollte er beibehalten werden, solange er nicht gelöscht wird, weil das Betriebssystem den Speicher für etwas anderes benötigt. Ich benutze dies schon eine Weile und Verzeichnislisten sind selbst in großen Verzeichnissen erheblich schneller als ohne den oben genannten Cron-Job, obwohl ich keine genauen Zahlen angeben kann.

ein CVn
quelle
1
Wenn Sie das Rad neu erfinden wollen, können Sie es auch verwenden locate, updatedbum eine
Suchdatenbank
@laebshade Ich benutze überhaupt nicht locate, aber ich benutze lsviel. Und gelegentlich find. (Find und ls sind auch die spezifischen Befehle, nach denen das OP fragt.) Der Sinn der Verwendung findbesteht darin, dass alles über den Speicher iteriert wird, indem stat () aufgerufen wird, sodass der Kernel die Metadaten in den Speicher laden muss. Sobald es dort ist, ist es so gut, als ob es während eines Neustarts gespeichert wurde.
Ein Lebenslauf