Listen Sie alle Dateien auf, die im Cache vorhanden sind

8

Diese Frage beantwortet die Frage, wie der Teil des Caches gefunden werden kann. In der fincoreausführbaren Datei müssen Sie jedoch den Dateinamen übergeben, um zu überprüfen, ob er Teil des Caches ist.

Gibt es ein Werkzeug oder eine Methode, um alle Einträge zu finden, die Teil des zwischengespeicherten Speichers sind, ohne die Dateinamen zu übergeben?

PS: Wir führen es in einem eingebetteten System aus, und das Ausführen einer for-Schleife und das Übergeben aller Dateien an sich fincoreselbst ist zeit- und speicherintensiver. Daher suche ich nach anderen Methoden.

Joe
quelle

Antworten:

6

Ich kenne keinen Ort, an dem der Kernel die Dateinamen verfügbar macht, die den zwischengespeicherten Blöcken zugeordnet sind. Nach dieser Antwort

https://stackoverflow.com/a/4941371

Das Beste, was Sie wahrscheinlich sogar mit einem benutzerdefinierten Kernelmodul tun könnten, wäre, eine Liste der Inodes und Geräte zu erhalten. Von dort aus müssten Sie wahrscheinlich noch im Dateisystem nach diesen Dateien suchen.

Sie können dann fragen: "Aber woher fincorewissen Sie, welche Dateien ich aufgelistet habe?" Oder vielleicht auch nicht, aber ich fand die Methode ziemlich clever, also hier ist sie. Das fincoreTool funktioniert wie folgt:

Der mincoreSystemaufruf teilt Ihnen mit, ob sich die angegebenen Speicherseiten im Kernspeicher befinden (dh beim Zugriff keinen Seitenfehler verursachen würden). Da mmapdie zugeordnete Datei träge geladen wird und wir noch keinen der zugeordneten Bereiche gelesen haben, müssen alle Seiten, die keinen Seitenfehler verursachen würden, ansonsten Teil unseres Caches sein.

Steven D.
quelle