Ich habe einen Artikel durchgearbeitet, in dem die Vorgehensweise im Ruhezustand in Microsoft Windows erläutert wurde. Die wichtigsten Punkte, die ich dabei heraushole, sind:
- Windows speichert den gesamten Arbeitsspeicher (möglicherweise nach der Verarbeitung) in der
hiberfil.sys
Datei. - Während des Hochfahrens wird die Ruhezustandsdatei gelesen und der Inhalt in den RAM geladen.
Meine Frage ist, wenn ich normalerweise eine Datei mit einer Größe von 1 GB kopiere, dauert es ungefähr 2 Minuten, bis sie fertig ist.
Allerdings , wenn Windows die Überwinterungsdatei (im Ruhezustand Verfahren) schreiben, der gesamte Prozess dauert vielleicht 10 bis 15 Sekunden. Warum ist die Schreibgeschwindigkeit so unterschiedlich?
Meine RAM-Größe beträgt 4 GB. (Ich spreche nicht von Fast-Boot-Technologie.)
Benchmarks:
- Kopieren einer 1-GB-Datei von Datenträger 1 auf Datenträger 2 (extern): 2,3 Minuten.
- Ruhezustand des Systems: 15 Sekunden.
fsutil
.Antworten:
Dies ist wahrscheinlich eine dreifache Antwort.
Eine Sache, die hier möglicherweise im Spiel ist, ist das neue Herunterfahren von Hybriden in Windows, das Ihre Anwendungen effektiv schließt, Sie abmeldet und dann den Kern des Betriebssystems in den Ruhezustand versetzt. Das Speichern dieser Daten würde bedeuten, dass sie möglicherweise nicht erneut in den Ruhezustand versetzt werden müssen.
Das zweite wäre, dass der Ruhezustand keine Speicherseiten speichern müsste, die entweder in die Auslagerungsdatei ausgelagert oder nicht verwendet werden (dies wäre ein Grund, die Auslagerungsdatei aggressiv zu füllen und auch Daten im Speicher zu halten). .
Das dritte wäre, dass die Daten der Ruhezustandsdatei ebenfalls komprimiert werden . Kombiniere das mit meinem zweiten Punkt und wenn du nur einen kleinen Satz von Daten zum Exportieren hast, der stark komprimierbare Daten enthält (ausführbare Dateien werden im Allgemeinen gut komprimiert), kann die Datenmenge, die in die Ruhezustandsdatei ausgegeben werden soll, wesentlich kleiner sein als die Arbeitsmenge von Dateien. Beachten Sie, dass, wie in den Kommentaren angegeben, Datei-Caches und andere unnötige Pufferdaten leicht und ohne negative Auswirkungen gelöscht werden können, um die Datenmenge zu verringern, die in der Ruhezustandsdatei gespeichert werden muss.
Darüber hinaus sind aktuelle Festplatten recht schnell. Mit einer Festplatte mit einem dauerhaften Schreibzugriff in der Größenordnung von 100 MB / s können Sie 4 GB RAM (unkomprimiert) in weniger als einer Minute ausgeben. Da der Ruhezustand als letztes nach dem Anhalten aller Benutzerprozesse und vor dem Anhalten der CPU erfolgen kann, verfügt das Betriebssystem im Allgemeinen über die volle Schreibgeschwindigkeit der Festplatte. Dies ist eine Sache, die Ihr einfacher Benchmark nicht hat, und das Kopieren von Festplatte zu Festplatte ist möglicherweise langsamer als das einfache Schreiben von RAM auf Festplatte.
Kombinieren Sie diese Dinge und die Datenmenge, die in die Ruhezustandsdatei geschrieben werden soll, könnte recht klein sein, möglicherweise in der Größenordnung von 1 GB, und würde wahrscheinlich in weniger als 10 Sekunden in einen großen fortlaufenden Block geschrieben.
quelle
Erstens ist die Menge an RAM, die eingespart werden muss, überraschend gering. Tatsächlich muss nur der Satz zugeordneter unsauberer Seiten ("Lazy Writeback") gelöscht werden, und alle privaten Seiten, die in ausführbaren Code geschrieben und an einen anderen Ort verschoben wurden, müssen geschrieben werden.
Zweitens, im Gegensatz zum Kopieren einer Datei, besteht das Speichern der zu speichernden RAM-Seiten aus einem einzelnen sequentiellen, zusammenhängenden Schreibvorgang aus Sicht des Laufwerks. Die Win32-API stellt für diesen Vorgang sogar eine Funktion auf Benutzerebene zur Verfügung. Gather Write wird direkt von der Hardware unterstützt und arbeitet so schnell, wie die Festplatte Daten physisch aufnehmen kann (der Controller ruft Daten direkt über DMA ab).
Es gibt eine Reihe von Voraussetzungen dafür (wie Ausrichtung, Blockgröße, Fixieren), und es spielt keine Rolle beim Zwischenspeichern, und es gibt kein "Lazy Writeback" (was im Normalbetrieb eine sehr wünschenswerte Optimierung ist) ).
Das ist der Grund, warum nicht jeder schreibtfunktioniert die ganze Zeit so. Wenn das System jedoch die Ruhezustandsdatei speichert, sind alle Voraussetzungen automatisch erfüllt (alle Daten sind seitenausgerichtet, seitengroß und gepinnt), und das Zwischenspeichern ist gerade irrelevant geworden, weil der Computer in einem Moment ausgeschaltet wird.
Drittens ist das Ausführen eines einzelnen zusammenhängenden Schreibvorgangs sowohl für rotierende als auch für Solid-State-Festplatten sehr vorteilhaft .
Die Auslagerungsdatei und die Ruhezustandsdatei gehören normalerweise zu den frühesten Dateien, die auf der Festplatte erstellt und reserviert wurden. Sie haben normalerweise ein, höchstens zwei Fragmente. Sofern also keine Sektoren beschädigt sind und die Festplatte physische Sektoren neu zuordnen muss, wird ein logischer sequentieller Schreibvorgang in einen physischen sequentiellen Schreibvorgang auf einer sich drehenden Festplatte umgewandelt.
Es sind keine Lese-, Änderungs- und Schreibvorgänge auf der Festplatte erforderlich, wenn eine große Menge aufeinanderfolgender, zusammenhängender Daten geschrieben wird. Dieses Problem ist auf sich drehenden Festplatten weniger ausgeprägt, die einzelne Sektoren schreiben können, die recht klein sind. (Vorausgesetzt, Sie schreiben keine einzelnen Bytes, was in der Regel durch Caching verhindert wird, muss das Gerät den ursprünglichen Inhalt nicht abrufen und die geänderte Version zurückschreiben.) .
Dies ist jedoch auf SSD sehr auffällig, da bei jedem Schreibvorgang z. B. ein 512-KB-Block (das ist eine übliche Zahl, die jedoch größer sein kann) vom Controller gelesen, geändert und auf einen anderen zurückgeschrieben werden muss Block. Du kannst zwar prinzipiell schreiben (aber nicht überschreiben) kleinere Einheiten auf Flash-Disks, man kann immer nur riesige Blöcke löschen, so funktioniert die Hardware. Dies ist der Grund, warum SSDs bei großen sequenziellen Schreibvorgängen so viel besser abschneiden.
quelle
Im Ruhezustand wird nicht der gesamte Arbeitsspeicher entleert.
Es ist bereits ein großer Teil des Arbeitsspeichers auf der Festplatte vorhanden. Dies ermöglicht nicht nur einen schnellen Ruhezustand, sondern auch die schnelle Bereitstellung von Speicher für neue Programme (damit diese schnell gestartet werden können).
Daher muss es nur einen kleinen Bruchteil der 4GB schreiben und das kann in 10-15s erledigt werden.
Von Microsoft :
quelle
Zusätzlich zu all dem, denke ich, spielen noch ein paar andere Faktoren eine Rolle.
Zum einen muss beim Kopieren einer Datei diese gelesen und geschrieben werden. Bei der Vernichtung muss nur die Datei geschrieben werden. Es ist per definitionem schon in Erinnerung!
In enger Beziehung dazu ist der Prozess, wenn eine Datei gelesen und gleichzeitig geschrieben wird, um Speicherplatz zu sparen: Lesen eines Blocks, Schreiben eines Blocks, Aktualisieren des Verzeichnisses (um die neue Größe anzuzeigen); Lesen Sie einen Block, schreiben Sie einen Block, aktualisieren Sie das Verzeichnis.
Jedes Mal, wenn Sie sich von einem Teil der Festplatte zu einem anderen bewegen (z. B. Datei a lesen, um Datei b zu schreiben, Datei b schreiben, um das Verzeichnis zu schreiben, und das Verzeichnis, um den nächsten Block zu lesen), muss die Festplatte suchen - bewegen Sie die Köpfe, Lassen Sie die Köpfe sich niederlassen und warten Sie, bis der rechte Teil der Platte vorbeikommt. Dies ist einer der Vorteile einer Solid State Disk - Suche dauert überhaupt keine Zeit. Im Ruhezustand werden die Daten Ende-zu-Ende geschrieben. Die Ruhezustandsdatei (Auslagerungsdatei) ist vorab zugeordnet, sodass das Verzeichnis nicht aktualisiert werden muss (Sie ändern nicht die Größe der Ruhezustandsdatei, sondern nur den Inhalt).
Und schließlich hat Ihr Computer alle anderen Aufgaben angehalten - dies ist das EINZIGE, was er tut (ich bezweifle, dass dies einen großen Unterschied machen wird, aber es wird bestimmt einige bewirken!). Auch Dinge wie Speicherverwaltung und Taskwechsel werden ausgesetzt.
quelle
Dies liegt wahrscheinlich daran, dass der RAM viel schnellere Eingabe- / Ausgabegeschwindigkeiten aufweist als die Festplatte, sodass der RAM die darin enthaltenen Daten so schnell ausgeben kann, wie die Festplatte sie einlesen kann.
Beim Kopieren von Dateien sind Sie auch durch verschiedene Faktoren eingeschränkt - die Geschwindigkeit des Datenträgers, wenn er auf denselben Datenträger ein- und auslesen muss, dauert länger, die begrenzte Geschwindigkeit der Verbindung (wenn zum externen Laufwerk) wird überprüft überschreibt nichts etc
quelle
dd if=/dev/zero of=/tmp/output.img bs=8k count=256k
und bekommen kann1862606848 bytes (1.9 GB) copied, 1.81605 s, 1.0 GB/s
, scheint es also möglich zu sein (ich möchte hinzufügen, dass das Kopieren von Dateien unter Windows ohnehin unnötig lange dauert).