it-swarm.com.de

Löschen Sie den Dateicache, um die Leistungstests zu wiederholen

Welche Tools oder Techniken kann ich verwenden, um zwischengespeicherte Dateiinhalte zu entfernen, um zu verhindern, dass meine Leistungsergebnisse verzerrt werden? Ich glaube, ich muss zwischengespeicherte Informationen zu Datei- und Verzeichnisinhalten entweder vollständig löschen oder selektiv entfernen.

Die Anwendung, die ich gerade entwickle, ist ein spezialisiertes Komprimierungsprogramm. Es wird erwartet, dass sie beim Lesen und Schreiben von Dateien, die das Betriebssystem in letzter Zeit nicht berührt hat und deren Plattenblöcke wahrscheinlich zwischengespeichert werden, eine Menge Arbeit erledigt.

Ich möchte die Variabilität beseitigen, die ich in der Zeit IO sehe, wenn ich die Aufgabe des Profilierens verschiedener Strategien für die Dateiverarbeitung wiederhole.

Ich bin vor allem an Lösungen für Windows XP interessiert, da dies meine Hauptentwicklungsmaschine ist, aber ich kann auch mit Linux testen und bin daher 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) in der Zeit, um Dateien erneut zu lesen, die ich gerade ein paar Mal gelesen habe.

97
Stephen Denne

Verwenden Sie SysInternals RAMMap-App .

rammap empty standby

Die Menüoption Empty/Empty Standby List löscht den Windows-Dateicache.

79
smallest

Eine schnelle Suche bietet diese Optionen für Linux

  1. Hängen Sie die Partition mit den Dateien ab und hängen Sie sie an
  2. sync && echo 1 > /proc/sys/vm/drop_caches
14
John Nilsson

Unter Windows XP sollten Sie den Cache für eine bestimmte Datei löschen können, indem Sie die Datei mit CreateFile mit den Optionen FILE_FLAG_NO_BUFFERING öffnen und dann den Griff schließen. Dies ist nicht dokumentiert, und ich weiß nicht, ob es mit 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.

13
user901295

Ein Befehlszeilen-Dienstprogramm finden Sie hier

von der Quelle:

EmptyStandbyList.exe ist ein Befehlszeilentool für Windows (Vista und oben), das Folgendes leeren kann:

  • prozessarbeitssätze,
  • die modifizierte Seitenliste,
  • die Standby-Listen (Prioritäten 0 bis 7) oder
  • nur die Standby-Liste mit Priorität 0.

Verwendungszweck:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
4
 #include <fcntl.h>

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

mit Beratungsoption POSIX_FADV_DONTNEED:
Auf die angegebenen Daten wird in naher Zukunft nicht zugegriffen.

3
Mark

Um einen besseren Überblick über den Dateisystemcache von Windows XP zu erhalten, probieren Sie ATM von Tim Murgent . Damit können Sie sowohl die Größe des Working Sets des Dateisystemcaches als auch die Größe der Standby-Liste in einer detaillierteren und genaueren Ansicht anzeigen. Für Windows XP - Sie benötigen die alte Version 1 von ATM, die zum Download verfügbar ist here , da V2 und V3 Server 2003, Vista oder höher erfordern.

Sie werden feststellen, dass Sysinternals Cacheset zwar den "Cache WS Min" -Zustand verringert, die eigentlichen Daten jedoch weiterhin in Form von Standby-Listen vorhanden sind, von denen sie verwendet werden können, bis sie durch etwas anderes ersetzt werden. Um es dann durch etwas anderes zu ersetzen, verwenden Sie ein Werkzeug wie MemAlloc oder flushmem von Chad Austin oder Consume.exe aus den Windows Server 2003 Resource Kit-Tools .

3
robertcollier4

Ich habe eine Technik gefunden (abgesehen vom Neustart), die scheinbar funktioniert:

  1. Führen Sie einige Kopien von MemAlloc aus.
  2. Weisen Sie jedem Speicherplatz einige Male große Speicherbereiche zu
  3. Verwenden Sie den Process Explorer, um die System-Cache-Größe auf sehr niedrige Werte zu reduzieren
  4. Beenden Sie die MemAlloc-Programme

Es ist jedoch nicht selektiv. Idealerweise möchte ich in der Lage sein, die spezifischen Speicherbereiche zu löschen, die zum Zwischenspeichern der Plattenblöcke von Dateien verwendet werden, die nicht mehr zwischengespeichert werden sollen.

3
Stephen Denne

Es gibt einen Windows-API-Aufruf https://docs.Microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize , mit dem der Dateisystemcache geleert werden kann. Es kann auch verwendet werden, um die Cache-Größe auf einen sehr kleinen Wert zu beschränken. Sieht für diese Art von Tests perfekt aus.

0
Geoff Johnson

Da die Frage auch nach Linux gestellt wurde, gibt es eine verwandte Antwort hier .

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

0
seeker