So programmieren Sie Puffer und Caches unter Windows programmgesteuert

619
Hashim

Ich muss sicherstellen, dass weder Puffer noch Caches verwendet werden, bevor die Geschwindigkeit, mit der einige bashBefehle in einer Cygwin-Umgebung ausgeführt werden, verglichen wird. Obwohl ich das Benchmarking in Cygwin / bashauf einem Windows 7-PC durchführe, vermute ich, dass das eigentliche Caching-Verhalten von Windows selbst und nicht von Cygwin ausgeführt wird.

Auf einem Unix-basierten System können Sie folgende Schritte ausführen, um alle Caches und Puffer zu löschen:

echo 3 > /proc/sys/vm/drop_caches 

Was ist das Äquivalent zu diesem Befehl unter Windows?

2

2 Antworten auf die Frage

3
Twisty Impersonator

Es ist kein gleichwertiger Befehl in Windows integriert. Microsoft stellt jedoch den Sync- Befehl frei zur Verfügung, der das tut, was Sie verlangen, um ungeschriebene Daten auf die Festplatte zu löschen. Es ist Teil der SysInternals-Suite von Tools.

Hier ist die Beschreibung vom Autor:

UNIX bietet ein Standardprogramm namens Sync, mit dem das Betriebssystem angewiesen wird, alle Dateisystemdaten auf die Festplatte zu leeren, um sicherzustellen, dass es stabil ist und bei einem Systemausfall nicht verloren geht. Andernfalls gehen alle modifizierten Daten im Cache verloren. Hier ist ein Äquivalent, das ich geschrieben habe, Sync genannt und für alle Windows-Versionen geeignet. Verwenden Sie es immer dann, wenn Sie wissen möchten, dass geänderte Dateidaten sicher auf Ihren Festplatten gespeichert werden.

Sie benötigen Administratorrechte, um den Befehl auszuführen. Um die Puffer aller Festplatten zu leeren, führen Sie einfach Folgendes aus:

sync 

Wenn Sie nur ein einzelnes Laufwerk als Ziel verwenden möchten, z. B. C:use:

sync c: 

Sie können auch nur Wechsellaufwerke spülen mit:

sync -r 

Dieses Dienstprogramm ist für alle Windows-Versionen ab Vista / Server 2008 verfügbar.

Was ist der Unterschied zwischen dem Linux-Äquivalent und dieser Version? Mit anderen Worten, welche anderen Formen des temporären Speichers verwendet Windows, dass dieser Befehl nicht geleert wird? Hashim vor 5 Jahren 0
Ich kenne keinen Befehl zum Leeren des Speichers, aber wenn Sie mit einem GUI-Dienstprogramm in Ordnung sind, überprüfen Sie [RAMMap] (https://docs.microsoft.com/de-de/sysinternals/downloads/rammap). Ich möchte jedoch darauf hinweisen, dass das Leeren des Speichers unter Windows auf dem Computer eine nicht-reale Situation verursacht, die unrealistische Benchmarking-Ergebnisse hervorbringen kann. HTH. Twisty Impersonator vor 5 Jahren 1
Ich werde es überprüfen, danke. Wäre dies in Bezug auf die unrealistische Situation in der realen Welt nicht auch bei den Zwischenspeichern / Puffern von Linux der Fall, oder funktionieren diese völlig anders? Hashim vor 5 Jahren 0
@Hashim Leider habe ich * nix-Systeme seit Jahren nicht professionell eingesetzt, daher konnte ich die Unterschiede zwischen den beiden nicht vergleichen. Es tut uns leid. Twisty Impersonator vor 5 Jahren 1
Das Dienstprogramm sysinternals sync sollte niemals zwischengespeicherte Daten aus dem RAM entfernen. Es schreibt zwischengespeicherte Daten aus, die seit dem Lesen von der Festplatte geändert wurden. Diese Daten müssen auf die Festplatte geschrieben werden, bevor eine Festplatte sicher entfernt oder das Betriebssystem sicher heruntergefahren werden kann. Selbst nach dem Schreiben auf die Festplatte können die Daten jedoch im RAM verbleiben und werden verwendet, um nachfolgende Leseanforderungen zu erfüllen. Jamie Hanrahan vor 5 Jahren 1
0
Hashim

Twisty ist richtig, dass es in Windows kein natives Tool gibt, um dies zu tun.

Bei einigen weiteren Untersuchungen und Tests scheint es jedoch so zu sein, dass selbst das Sync-Tool von SysInternals den Speicher, den Windows zum Zwischenspeichern von Dateien und Daten verwendet, nicht wirklich löscht. Dies wird auch als Cache des Dateisystems bezeichnet und wird von Windows als Standby-Speicher bezeichnet . Dies kann mit RAMMap, einem anderen SysInternals-Tool, das alle Speicherzuordnungen in Windows überwacht, demonstriert werden .

Wenn Sie die Spalte "Standby-Speicher" von RAMMap vor und nach dem Ausführen des SyncTools überprüfen, wird angezeigt, dass der Windows-Standby-Speicher vor und nach dem Ausführen nahezu unverändert bleibt Sync. Tatsächlich Syncscheint es überhaupt keine merklichen Auswirkungen auf das Gedächtnis zu haben, was meines Erachtens für die Leistungstests praktisch unbrauchbar ist.

Ich habe eine effektive programmatische Methode zum Löschen der Windows-Standby-Liste entdeckt, jedoch in Form von EmptyStandbyList.exe, einem einfachen Befehlszeilenprogramm von Wen Jia Liu:

EmptyStandbyList.exe ist ein Befehlszeilenprogramm für Windows (Vista und höher), das folgende Funktionen ausführen kann:

  • Prozessarbeitssätze
  • die modifizierte Seitenliste
  • die Standby-Listen (Prioritäten 0 bis 7)
  • Nur die Standby-Liste mit Priorität 0

Um es zu verwenden, müssen Sie sicherstellen, dass sich die Datei EmptyStandbyList.exe an einem Ort in der Umgebungsvariablen PATH Ihres Systems befindet. Rufen Sie dann EmptyStandbyList.exedie Shell oder ein Skript auf, wenn Sie den Speicher leeren müssen.

In CMD:

EmptyStandbyList.exe 

Und in bash:

cmd \/c EmptyStandbyList.exe 

Um zu bestätigen, dass der Standby-Speicher von Windows nach der Ausführung erfolgreich gelöscht wurde, können Sie RAMMap erneut verwenden.

Vor dem Laufen EmptyStandbyList.exe

Nach dem Rennen EmptyStandbyList.exe