Ich habe festgestellt, dass nachfolgende grep
Ausführungen derselben Abfrage (und auch einer anderen Abfrage, aber derselben Datei) viel schneller sind als die erste Ausführung (der Effekt ist beim Durchsuchen einer großen Datei leicht erkennbar).
Dies legt nahe, dass grep eine Art Zwischenspeicherung der für die Suche verwendeten Strukturen verwendet, ich jedoch im Internet keinen Verweis finden konnte.
Welcher Mechanismus ermöglicht es grep
, Ergebnisse bei nachfolgenden Suchvorgängen schneller zurückzugeben?
Linux- und * NIX-Systeme verwenden verschiedene Caches, die zwischen den Dateisystemen (abstrahiert durch VFS) und den Prozessen auf Benutzerebene liegen. Es ist also nicht grep und es ist nicht das Dateisystem, das das Caching durchführt - es ist das Betriebssystem.
Der Cache, der für Ihre grep-Leistung verantwortlich ist, ist der VFS-Puffercache. Andere Caches sind für Inodes und Verzeichnisse gedacht, aber diese würden hier nicht ins Spiel kommen.
Weitere Informationen finden Sie unter: Linux-Dokumentationsprojekt: 9.2 Das virtuelle Dateisystem http://tldp.org/LDP/tlk/fs/filesystem.html
quelle
/usr/include
dauerte ein Grep innerhalb von ~ 16,4 Sekunden auf meinem System, wobei alle Caches gelöscht wurden. Mit allem, was zwischengespeichert ist, ca. 0,3 Sekunden. Wenn ich nur den Seiten-Cache lösche (der den Puffer-Cache enthält), dauert es ~ 14,3 Sekunden. Wenn ich den Seiten-Cache verlasse und die Dentry- / Inode-Caches lösche, sind es ungefähr 12 Sekunden.Und wenn Sie sich für eine Cache - Version von grep suchen Besuche https://stackoverflow.com/questions/7734596/grep-but-indexable
quelle