Wie geleert man den Windows-Festplattenlesecache?

13

Zum Testen der Leistung muss der Windows-Lesecache geleert werden. Ich habe versucht zu googeln, aber ich konnte nichts anderes als einen Neustart oder andere manuelle Dinge finden. Bevor ich nachgebe und das tue, würde ich gerne wissen, ob jemand eine Möglichkeit kennt, den Windows-Lesecache zu leeren. Ich teste unter Windows 7, bin aber auch an Windows XP-Lösungen interessiert.

Sebastiaan M
quelle

Antworten:

3

Alternativ können Sie den Cache mit Daten füllen, von denen Sie wissen, dass sie nicht für den Test verwendet werden. Führen Sie dann den Test aus.

Maximus Minimus
quelle
1
Alternativ können Sie auch den gesamten verfügbaren Arbeitsspeicher verwenden. Windows gibt den Dateicache frei, um diesen RAM zu verwenden. Für Details siehe die Antwort von Stephen Denne.
Ultralisk
Ich hatte auf etwas weniger Umgehungspotential gehofft, aber ich denke, Ihr Vorschlag lässt sich in meiner Situation am einfachsten in ein automatisches Testskript umsetzen. Danke für den Vorschlag.
Sebastiaan M
7

Dieselbe Frage hatte ich bei Stack Overflow gestellt

/programming/478340/clear-file-cache-to-repeat-performance-testing

Ich habe Win XP verwendet, aber die beste Lösung war:

  1. Führen Sie einige Kopien von MemAlloc aus
  2. Weisen Sie jedem ein paar Mal große Speicherbereiche zu
  3. Verwenden Sie den Prozess-Explorer, um zu beobachten, wie der System-Cache auf sehr niedrige Werte reduziert wird
  4. Beenden Sie die MemAlloc-Programme
Stephen Denne
quelle
3

Für eine viel bessere Ansicht des Windows XP-Dateisystemcaches - probieren Sie ATM von Tim Murgent - können Sie sowohl die Größe des Arbeitssatzes des Dateisystemcaches 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 Sie hier herunterladen können , da für V2 und V3 Server 2003, Vista oder höher erforderlich sind.

Sie werden feststellen, dass Cacheset zwar die "Cache WS Min" reduziert, die tatsächlichen Daten jedoch weiterhin in Form von Standby-Listen vorliegen, von denen aus sie verwendet werden können, bis sie durch etwas anderes ersetzt wurden. Verwenden Sie ein Tool wie MemAlloc, Flushmem von Chad Austin oder Consume.exe aus den Windows Server 2003 Resource Kit Tools, um es dann durch etwas anderes zu ersetzen.

Robert Collier
quelle
3

Ich habe RAMMap verwendet . Es besteht die Möglichkeit, Speicher für einige Arten von Zuordnungen freizugeben.

Der Inhalt des Dateicaches kann auf der Registerkarte "Dateizusammenfassung" beobachtet werden. Wenn Sie im Menü "Leer" die Option "Leere Standby-Liste" auswählen, wird dieser Cache geleert.

pbies
quelle
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Slm
1

Starten Sie die Maschine neu.

Joe Koberg
quelle
Dies ist die "Big Hammer" -Lösung. Siehe die Antwort von Stephen Denne.
Ultralisk
1

Am besten stellen Sie sicher, dass alle Testdateien, mit denen Sie ein Benchmarking durchführen, doppelt so groß sind wie der Array-Controller-Cache (oder Windows OS-Speicher, wenn Sie ein Benchmarking auf einem VM-Gast durchführen), und dass mindestens 1 GB Testdatei vorhanden sind. Dies stellt sicher, dass jegliches Caching negiert wird. Wir verwenden SQLIO für das Festplatten-Benchmarking. Die Begleitdokumentation enthält eine Fülle von Informationen.

Greg Askew
quelle
Ich versuche unter anderem zu messen, wie schnell unser Projekt auf mehreren Konfigurationen aufbaut. Ich kann die Größe dieser Dateien, glaube ich, nicht wirklich erhöhen. :)
Sebastiaan M
1

Echo Greg, die Möglichkeit, dieses Problem zu umgehen, besteht darin, sicherzustellen, dass der Datensatz, mit dem Sie arbeiten, die Größe des verfügbaren Arbeitsspeichers erheblich überschreitet. Wenn Sie Tests auf einer Hardware-Plattform durchführen, die auch eine erhebliche Anzahl von Controller- und Festplatten-basierten Caches enthält, sollten Sie sicherstellen, dass diese ebenfalls überschritten werden. Dadurch wird sichergestellt, dass die angezeigte Leistung stärker mit der tatsächlichen Hardwareleistung zusammenhängt als die Softwareoptimierungen, die alle diese Cache-Ebenen einführen.

Das heißt, wenn Sie wirklich nur den Lesecache von nützlichen Daten leeren möchten, bevor Sie Ihre Benchmarks ausführen, die den Lesecache verwenden möchten, müssen Sie eine einzelne Datei einlesen, die direkt unter Ihrem Lesecache-Speicher liegt und einige Dateioperationen ausführen. Dadurch wird der Cache geleert und mit dieser einzelnen großen Datei gefüllt. Sobald Sie es schließen, wird Ihr Cache effektiv von den Daten geleert, die Sie interessieren . Der knifflige Teil besteht darin, herauszufinden, wie groß diese Datei sein muss, was heutzutage durchaus in der Größenordnung von 3 GB liegen könnte. Zu diesem Zeitpunkt benötigen Sie möglicherweise mehrere 1-GB-Junk-Dateien, damit dies funktioniert.

sysadmin1138
quelle
0

Ich denke, die meisten Optionen werden "manuelle Sachen" sein. Unter UNIX ist es ziemlich üblich, ein Gerät vor jedem Benchmark-Lauf zu deaktivieren / erneut zu aktivieren, häufig mit einem "newfs". Ich weiß nicht, ob Sie Befehlszeilentools unter Windows zum Deaktivieren / Aktivieren von Geräten verwenden können, aber wenn Automatisierung Ihr Ziel ist, lohnt es sich, nach solchen Dienstprogrammen zu suchen.

Geoff Fritz
quelle
1
Unter Linux können Sie dies auch tun, sync; echo 3 > /proc/sys/vm/drop_cacheswenn Unmount / Remuont aus irgendeinem Grund nicht möglich ist. Dies betrifft jedoch alle Caches / Puffer, nicht nur die, die sich auf ein bestimmtes Volume beziehen. Ich habe vorher nach einem ähnlichen Trick für Windows gesucht, aber keinen gefunden.
David Spillett
0

Schauen Sie sich diese Antwort an, die ich gerade auf meine Frage zu StackOverflow gepostet habe.

Grundsätzlich gilt: Wenn Sie versuchen, CreateFileein Handle ohne Write-Share-Zugriff zu erstellen, wird der Cache geleert und anschließend ungültig, auch wenn ein Fehler zurückgegeben wird.

Hoffe das hilft!

user541686
quelle