Mit welchen Tools oder Techniken kann ich zwischengespeicherte Dateiinhalte entfernen, um zu verhindern, dass meine Leistungsergebnisse verzerrt werden? Ich glaube, ich muss zwischengespeicherte Informationen über Datei- und Verzeichnisinhalte entweder vollständig löschen oder selektiv entfernen.
Die Anwendung, die ich entwickle, ist ein spezialisiertes Komprimierungsprogramm und wird voraussichtlich viel Arbeit beim Lesen und Schreiben von Dateien leisten, die das Betriebssystem in letzter Zeit nicht berührt hat und deren Festplattenblöcke wahrscheinlich nicht zwischengespeichert werden.
Ich möchte die Variabilität entfernen, die ich in der E / A-Zeit sehe, wenn ich die Aufgabe des Profilierens verschiedener Strategien für die Dateiverarbeitungsarbeit wiederhole.
Ich interessiere mich hauptsächlich für Lösungen für Windows XP, da dies mein Hauptentwicklungscomputer ist, aber ich kann auch unter Linux testen und bin daher auch an Antworten für diese Umgebung interessiert.
Ich habe SysInternals CacheSet ausprobiert , aber das Klicken auf "Löschen" führt nicht zu einer messbaren Erhöhung (Wiederherstellung des Timings nach einem Kaltstart) der Zeit zum erneuten Lesen von Dateien, die ich gerade einige Male gelesen habe.
quelle
Antworten:
Verwenden Sie die RAMMap-App von SysInternal .
Die Menüoption Leere / Leere Standby-Liste löscht den Windows-Dateicache.
quelle
Unter Windows XP sollten Sie in der Lage sein, den Cache für eine bestimmte Datei zu löschen, indem Sie die Datei mithilfe von CreateFile mit den Optionen FILE_FLAG_NO_BUFFERING öffnen und dann das Handle schließen. Dies ist nicht dokumentiert und ich weiß nicht, ob es unter späteren Windows-Versionen funktioniert, aber ich habe dies vor langer Zeit beim Schreiben von Testcode zum Vergleichen von Dateikomprimierungsbibliotheken verwendet. Ich kann mich nicht erinnern, ob der Lese- oder Schreibzugriff diesen Trick beeinflusst hat.
quelle
Ein schnelles Googeln bietet diese Optionen für Linux
sync && echo 1 > /proc/sys/vm/drop_caches
quelle
Ein Befehlszeilenprogramm finden Sie hier
aus der Quelle:
quelle
mit Hinweisoption
POSIX_FADV_DONTNEED
:Auf die angegebenen Daten wird in naher Zukunft nicht zugegriffen.
quelle
Ich habe eine Technik gefunden (außer Neustart), die zu funktionieren scheint:
Es ist jedoch nicht selektiv. Idealerweise möchte ich in der Lage sein, die spezifischen Teile des Speichers zu löschen, die zum Zwischenspeichern der Plattenblöcke von Dateien verwendet werden, die nicht mehr zwischengespeichert werden sollen.
quelle
Für eine viel bessere Ansicht des Windows XP-Dateisystem-Cache - versuchen Sie es mit ATM von Tim Murgent - können Sie sowohl die Größe des Arbeitssatzes des Dateisystem-Caches als auch die Größe der Standby-Liste in einer detaillierteren und genaueren Ansicht anzeigen. Für Windows XP benötigen Sie die alte Version 1 von ATM, die hier zum Download zur Verfügung steht , da für V2 und V3 Server 2003, Vista oder höher erforderlich ist.
Sie werden feststellen , dass Sysinternals Cacheset zwar den "Cache WS Min" reduziert, die tatsächlichen Daten jedoch weiterhin in Form von Standby-Listen vorhanden sind, von denen aus sie verwendet werden können, bis sie durch etwas anderes ersetzt wurden. Um es dann durch etwas anderes zu ersetzen, verwenden Sie ein Tool wie MemAlloc oder flushmem von Chad Austin oder Consume.exe aus den Windows Server 2003 Resource Kit-Tools .
quelle
Da die Frage auch für Linux gefragt, gibt es eine ähnliche Antwort hier .
Mit dem Kommandozeilen-Tool vmtouch können unter anderem Dateien und Verzeichnisse zum Systemdateicache hinzugefügt und daraus entfernt werden.
quelle
Es gibt einen Windows-API-Aufruf https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize , mit dem der Dateisystem-Cache geleert werden kann. Es kann auch verwendet werden, um die Cache-Größe auf einen sehr kleinen Wert zu beschränken. Sieht perfekt für diese Art von Tests aus.
quelle