Es scheint, als würde es eine Weile dauern, bis ich zum ersten Mal find
oder ls
in 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?
Antworten:
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.local
Datei 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-t
Flag anstelle der-ld
Flags.Weitere Informationen zum Seiten-Cache finden Sie hier , hier und auf Wikipedia .
quelle
build-essential
Paket. Herunterladenvmtouch.c
. Führen Siegcc -O2 -o vmtouch vmtouch.c
oder aus,make vmtouch
und Sie erhalten die Binärdatei,vmtouch
die Sie beispielsweise kopieren/usr/local/bin
oder aufrufen können./vmotouch
.vmtouch
als 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."Ü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-cache
und fügen Sie Folgendes ein:Diese Anwendungen
nice
undionice
(die standardmäßig installiert werden soll, und auf jeden Fall über den Paketmanager zur Verfügung stehen; Debian stellt sie incoreutils
undutil-linux
jeweils) die Priorität des senkenfind
Prozess 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.find
selbst wird durchlaufen undstat()
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.
quelle
locate
,updatedb
um einelocate
, aber ich benutzels
viel. Und gelegentlichfind
. (Find und ls sind auch die spezifischen Befehle, nach denen das OP fragt.) Der Sinn der Verwendungfind
besteht 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.