Prefetching
Deutsche Übersetzung von Auszügen aus dem Microsoft-Dokument
Fast System Startup for PCs Running Windows XP (Auf der MS-Webseite nicht mehr verfügbar)
Für Windows VISTA gibt es ein Word-Dokument zum Download:
Measuring Performance in Windows Vista
In früheren Windows-Versionen vor Windows XP wurden die erforderlichen Speicherseiten für Gerätetreiber, Systemdienste und die "Shell" erst bei Bedarf geladen. In Windows XP gibt es ein neues Feature: "Prefetching". Damit werden bereits vorbereitete Speicherseiten schon geladen, bevor sie gebraucht werden. Dadurch werden Seitenfehler vermieden, die beim Bootvorgang die erforderlichen Disk-E/A-Vorgänge verzögern.
Der Windows XP Prefetcher beschleunigt beides: Das Booten und den Start von Anwendungen. Das jeweilige Scenario der in den Speicher beim Booten oder nach dem Start von Anwendungen geladenen Seiten wird in Log-Dateien im Ordner \windows\prefetch gespeichert.
Beim nächsten Bootvorgang oder Start einer Anwendung werden die Log-Dateien abgefragt, um Speicherseiten im Voraus zu laden.
Die Log-Dateien werden periodisch analysiert und als Ergebnis wird eine Liste "layout.ini" im Verzeichnis \windows\prefetch erstellt, die beim Defragmentieren als Referenz benutzt wird, um Dateien optimal auf der Festplatte anzuordnen. Obwohl die Scenarios für "Prefetching" in den Log-Dateien festgehalten sind, werden die Lese- und Schreibvorgänge auf der Festplatte effektiver, wenn dieses Disk-Layout ausgeführt wurde.
Betrachtung der Disk-Effektivität mit und ohne Prefetching
Der Zweck ist die Minimierung der ziellosen Suche, die 2-3 Sekunden nach dem Booten beginnt und mehrere Sekunden dauern kann, bis die IDE-Geräte gefunden werden. Die Dauer des Prefetchings ist abhängig von der Leistung der Festplatte, dem vorhandenen Speicher und Faktoren, die Lese- und Schreibvorgänge verzögern.
Bootvorgang mit Prefetching
Note: Die Gesamtzeit des Bootvorgangs ist mehrere Sekunden schneller, weil weniger Suchvorgänge ablaufen. Die roten Balken sind Lese-, die blauen Schreibvorgänge. In dieser Grafik erfolgen die meisten Lesevorgänge für das Booten des Systems zwischen 2-7 Sekunden.
Bootvorgang ohne Prefetching
Note: Längere Gesamtzeit, weitaus mehr Suchvorgänge. Ineffektive Disk-I/O Vorgänge.
Die Sektoren-Offset Grafik zeigt die Suchvorgänge auf der Festplatte:
Effektive Suche mit Prefetching und optimiertem Disk-Layout,
aber exzessive Suche ohne Prefetching.
Boot Monitoring
Für Seiten, auf die während des Bootvorgangs zugegriffen wird, wird die Log-Datei %windir%\prefetch\NTOSBOOT-B00DFAAD.pf erstellt. Diese Datei enthält Logs der vorangegangenen 8 Bootvorgänge und wird 1 Minute nach dem Bootvorgang angelegt oder aktualisiert. Dies ist nicht davon abhängig, ob sich das System im Leerlauf befindet.
Der "Prefetcher" benutzt diese Datei als Referenz für das Laden der Seiten beim
Bootvorgang. Die Dateiendung .pf weist auf eine Scenario-Log-Datei.
Tipp: Um Prefetching vorübergehend zu Testzwecken zu deaktivieren, löschen Sie
diese Datei.
Monitoring des Starts von Anwendungen
Beim Starten von Anwendungen wird eine Log-Datei %windir%\prefetch\"appname-xxxxxx".pf erstellt. Der "Prefetcher" benutzt diese Datei als Referenz für das Laden von Speicherseiten beim nächsten erneuten Start der Anwendung.
Disk Layout Optimierung
Prefetching liest Seiten im Voraus in den Speicher aufgrund eines erlernten Scenarios. Für die dazu erforderlichen Lesevorgänge von der Festplatte ist die Anordnung der Dateien darauf wichtig, um exzessive Suchvorgänge zu vermeiden. Prefetching und optimiertes Disk-Layout bewirken effektive Lese- und Schreibvorgänge auf der Festplatte und Reduzierung von Seitenfehlern im Speicher.
Der Prefetcher analysiert periodisch die Log-Dateien für den Bootvorgang und das Starten von Anwendungen, stellt fest, welche Seiten im Voraus geladen werden und erstellt eine Datei %windir%\prefetch\layout.ini. Die Layout.ini wird benutzt, um die Dateien beim Defragmentieren optimiert für schnelleres Lesen auf der Festplatte anzuordnen.
Die Layout.ini wird nach 32 Anwendungsstarts erstellt. Sie wird außerdem periodisch erneuert. Dies geschieht, nachdem sich das System nach dem Bootvorgang länger als 5 bis 30 Minuten im Leerlauf befindet. Eine exakte Voraussage wann sich das System selbst optimiert, ist nicht möglich, denn es wird Leerlaufzeit benötigt. Nach der Installation von Windows XP, zweimaligem Neustart des Systems und Abwarten des Erstellens der Log-Datei für den Bootvorgang gilt in etwa der in der folgenden Tabelle dargestellte Zeitablauf:
Disk Layout Zeitablauf in Minuten (variabel)
| 0 | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 - 30 | |
| Boot Done | ntosboot-B00DFAAD.pf created | Boot Done | ntosboot-B00DFAAD.pf updated | Idle Time | Layout.ini Created & Defrag | ||||
Der Zeitablauf ändert sich bei Aktivität des Systems.
Beim Bootvorgang werden folgende Voraussetzungen für das Ausführen gesetzt:
- Wurde noch nie ausgeführt.
- Wurde in den letzten 3 Tagen nicht ausgeführt.
Die folgenden Registry-Schlüssel können zur Feststellung des Status herangezogen
werden:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Prefetcher]
"LastDiskLayoutTime"=hex:30,cb,3d,2b,34,ed,c0,01
"LastDiskLayoutTimeString"="2001/06/04-13:23:08" (should match time on
layout.ini)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dfrg\BootOptimizeFunction]
"FileTimeStamp"=hex(b):30,cb,3d,2b,34,ed,c0,01
"OptimizeComplete"="Yes" (yes = layout completed successfully)
Boot Optimierung und normale Defragmentierung
Die Windows XP Defragmentierung hebt die Optimierungen des Bootvorgangs und für
den Start von Anwendungen nicht auf, sondern beachtet die in der Registry
gespeicherten Angaben für die logischen Blocks. Eine normale Defragmentierung
des Dateisystems optimiert jedoch nicht für schnelleren Bootvorgang oder Start
von Anwendungen, wenn noch keine Layout.ini existiert.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dfrg\BootOptimizeFunction]
"Enable"="Y" (Y = defrag will optimize for boot and app launch)
"LcnStartLocation"="1396416" (these numbers will vary, do not edit)
"LcnEndLocation"="1443782" (these numbers will vary, do not edit)
Anmerkung des übersetzers:
Das Anlegen der "Layout.ini" und der oben angeführten Registry-Einträge kann
auch vom Anwender manuell erfolgen:
Der Befehl "%windir%\system32\rundll32.exe advapi32.dll,ProcessIdleTasks"
in "Start->Ausführen" bewirkt, dass die beschriebenen Aktionen sofort, ohne
Abwarten einer Leerlaufzeit ausgeführt werden.
Mit dem auf meiner Homepage zum Download angebotenen Script
"IdleTasks" für Windows
XP, Vista und Windows 7 kann diese Aktion (als Administrator!) gestartet werden, wobei
dann auch die Beendigung angezeigt wird.
Generelle Voraussetzung für das Funktionieren von "Prefetching":
Der Taskplaner-Dienst darf nicht deaktiviert sein! Wenn die Empfehlungen
für die Einstellungen von Diensten auf der auch von mir hochgeschätzten Webseite
NT-Dienste sicher konfigurieren befolgt
wurden, ist der Dienst Taskplaner deaktiviert und muss wieder aktiviert werden!
