2009-01-25 13 views
84

Mit welchen Tools oder Techniken kann ich zwischengespeicherte Dateiinhalte entfernen, um zu verhindern, dass meine Leistungsergebnisse verzerrt werden? Ich glaube, ich muss entweder zwischengespeicherte Informationen über Datei- und Verzeichnisinhalte entweder vollständig löschen oder selektiv entfernen. Die Anwendung, die ich entwickle, ist ein spezialisiertes Komprimierungsprogramm, von dem erwartet wird, dass es eine Menge Arbeit beim Lesen und Schreiben von Dateien leistet, die das Betriebssystem in letzter Zeit nicht berührt hat und deren Plattenblöcke wahrscheinlich nicht zwischengespeichert werden.Löschen des Dateicaches zur Wiederholung des Leistungstests

Ich möchte die Variabilität entfernen, die ich in der IO-Zeit sehe, wenn ich die Aufgabe wiederhole, verschiedene Strategien für die Dateiverarbeitung zu erstellen.

Ich bin hauptsächlich an Lösungen für Windows XP interessiert, da dies meine Hauptentwicklungsmaschine ist, aber ich kann auch mit Linux testen und bin daher auch an Antworten für diese Umgebung interessiert. Ich habe gerade gelesen, ein paar Mal

Ich versuchte SysInternals CacheSet, aber Sie auf „Clear“ führt nicht zu einer messbaren Erhöhung (Wiederherstellung Zeitpunkt nach einem Kaltstart) in der Zeit, Dateien zu lesende wieder.

+0

mögliches Duplikat von [Wie kann der Dateisystemcache ungültig gemacht werden?] (Http://stackoverflow.com/questions/7405868/how-to-invalidate-the-file-system-cache) – Mehrdad

+0

Warum wurde diese Frage [gelöscht ] (http://meta.stackexchange.com/questions/186129/please-undelete-this-moderator-deleted-question-on-so)? –

Antwort

63

Verwenden Sie SysInternal RAMMap app.

rammap empty standby

The Empty/Leer Standby-Liste Menüoption wird die Windows-Datei-Cache löschen.

+2

RAMMap läuft nicht unter Windows XP. Haben diese Menüoptionen etwas anderes als die Schaltfläche "Löschen" in SysInternals Cache-Set-Anwendung? –

+0

@stephen diese Technik funktionierte perfekt für mich unter Windows 8! Windows XP ist jetzt 12 Jahre alt, irgendeinen Grund, warum Sie das nicht unter Vista, Windows 7 oder Windows 8 versuchen können? –

+0

@Jeff Ich arbeite nicht mehr mit diesen Einschränkungen. Also führt "Empty Standby List" zum nächsten Lesen von einer kürzlich gelesenen Datei, die eine Disk IO benötigt? –

13

Eine schnelle googeln gibt theese Optionen für Linux

  1. Aushängen und montieren Sie die Partition, die Dateien
  2. sync && echo 1 > /proc/sys/vm/drop_caches
+2

Danke, das sieht sehr nützlich aus, obwohl ich möglicherweise 3 anstelle von 1 zurückgeben möchte. Ich bin in erster Linie an Windows XP interessiert, weshalb ich das beim Googeln nicht gefunden hatte. –

+0

Leider kann die Linux-Umgebung, in der ich dies verwenden konnte, die Kernel-Version 2.6.9 haben. drop_caches wurde im Kernel 2.6.16 hinzugefügt –

+0

Viele andere Posts, die ich gelesen habe, deuten darauf hin, dass Sie das Dateisystem unmounten und mounten können, um alle Chached-Objekte zu entfernen, ich würde annehmen, dass dies sowohl vor 2.6.16 als auch mehr der Fall war kürzliche Kernel. – TafT

3

Ich habe eine Technik (außer dem Neustart), dass scheint Arbeit:

  1. Führen Sie ein paar Kopien von MemAlloc
  2. Mit jedem, weisen große Teile des Speichers zu einem paar Mal
  3. Verwenden Process Explorer die System-Cache Größe reduziert auf sehr niedriges Niveau
  4. Beenden Sie die MemAlloc Programme

Es beobachten nicht selektiv obwohl. Im Idealfall möchte ich die spezifischen Speicherbereiche löschen können, die zum Zwischenspeichern der Festplattenblöcke von Dateien verwendet werden, die nicht mehr im Cache gespeichert werden sollen.

+0

Ich benutze auch MemAlloc - http://www.soft.tahionic.com/download-memalloc – Ampere

+0

Das hat den Nebeneffekt, Sachen in die Auslagerungsdatei zu pushen, was die Leistung für eine ganze Weile danach zunichte macht. Wenn Sie auf einen Schlamm zurückgreifen, dann können Sie auch einfach eine andere große Datei lesen; zumindest löscht das nur den Plattencache und sonst nichts. – Synetech

13

Für Windows XP sollten Sie in der Lage sein, den Cache für eine bestimmte Datei zu löschen, indem Sie die Datei mit 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 auf späteren Versionen von Windows funktioniert, aber ich habe dies vor langer Zeit beim Schreiben von Testcode verwendet, um Dateikomprimierungsbibliotheken zu vergleichen. Ich kann mich nicht erinnern, ob der Lese- oder Schreibzugriff diesen Trick beeinflusst hat.

+0

Funktioniert perfekt für mich unter Windows 7 SP1, x64. Toller Tipp! – cxxl

+2

Also muss das für * jede Datei * wiederholt werden? Wenn Sie zum Beispiel ein Verzeichnis mit 100 MB in 30 Dateien in 10 Unterverzeichnissen kopieren, müssen Sie jedes einzeln öffnen, um sicherzustellen, dass Sie den tatsächlichen Datenträger anstelle des Zwischenspeichers lesen. – Synetech

+0

Andere Antworten auf der Website bestätigen, dass dies auch in Win7 und 8 funktioniert. Ich nehme an, es funktioniert auf Vista. Und ja, Sie müssen es für jede Datei ausführen, aber es dauert nicht lange. Sie müssen lediglich jede Datei öffnen und schließen, und wenn Sie schließen, löscht Windows den Cache. Nachdem Sie dies getan haben, führen Sie Ihren Leistungstest durch. –

3
#include <fcntl.h> 

int posix_fadvise(int fd, off_t offset, off_t len, int advice); 

mit Rat Option POSIX_FADV_DONTNEED:
Die angegebenen Daten werden nicht in naher Zukunft erreicht werden.

+0

Nur für Linux und andere posix, nicht für Windows: http://stackoverflow.com/questions/29752064/what-is-posix-fadviseposix-fadv-dontneed-equivalent-on-windows http://stackoverflow.com/questions/1201168/Was-ist-Fadvise-Madvise-Äquivalent-auf-Windows – osgx

3

Für eine viel bessere Sicht auf den Windows XP Dateisystem-Cache - versuchen Sie ATM by Tim Murgent - es ermöglicht Ihnen, den Dateisystem-Cache Working Set Größe und Standby-Liste Größe in einer detaillierteren und genauer anzuzeigen. Für Windows XP benötigen Sie die alte Version 1 von ATM, die zum Herunterladen verfügbar ist here, da V2 und V3 Server 2003, Vista oder höher erfordern.

Sie werden beobachten, dass, obwohl Sysinternals Cacheset den "Cache WS Min" reduzieren wird - die tatsächlichen Daten weiterhin in Form von Standby-Listen existieren, von wo es verwendet werden kann, bis es durch etwas anderes ersetzt wurde. Um es dann durch etwas anderes zu ersetzen, verwenden Sie ein Tool wie MemAlloc oder flushmem by Chad Austin oder Consume.exe von der Windows Server 2003 Resource Kit Tools.

+0

Das sieht fantastisch aus. –

0

Ein Kommandozeilen-Dienstprogramm kann here

0

Da die Frage auch für Linux gefragt gefunden werden, gibt es eine ähnliche Antwort here.

Das Befehlszeilentool vmtouch ermöglicht unter anderem das Hinzufügen und Entfernen von Dateien und Verzeichnissen aus dem Systemdateicache.