Disk-Caching in Windows XP über die Befehlszeile deaktivieren?

2608
DanielSmedegaardBuus

Ich wollte oft eine wirklich schlanke und optimierte Installation von Windows XP für VMware erstellen und dabei alles deaktivieren, was für den Anwendungsfall unbrauchbar ist.

Ich habe einige Tage mit nLite gearbeitet und habe eine wirklich schlanke Installation - nicht zu aggressiv (Mann, es gibt einige Vorbehalte, um mit nLite Sachen zu verändern und zu entfernen!). Die ISO ist wirklich großartig.

Im Geiste des Augenblicks versuche ich nun, ein Batch-Skript nach der Installation zusammenzustellen, das die letzten Handvoll von Optimierungen anwendet, die ich mit nLite nicht machen kann, aber ich würde trotzdem gerne automatisieren.

Eine solche Optimierung ist das Deaktivieren des Festplatten-Caches, da in meinem Host-Betriebssystem bereits Cache-Vorgänge ausgeführt werden. Daher würde ich es sehr bevorzugen, dass Windows keinen kostbaren (und seltenen) Speicher für das Festplatten-Caching verwendet.

Es ist leicht genug, die GUI zu verwenden, wenn alles eingerichtet ist, aber es wäre wirklich cool, wenn ich es in meinem Batch-Skript machen könnte. Entweder das Festplatten-Caching auf jedem Laufwerk gezielt deaktivieren (ich habe zwei Laufwerke in meinem Setup, eines ist für Auslagerungs- und temporäre Dateien vorhanden, damit in Snapshots kein Speicherplatz verschwendet wird), oder es gibt möglicherweise einen Systemdienst oder ähnliches deaktiviert, Caching systemweit in einem Schritt deaktiviert?

Vielen Dank im Voraus für alle Ideen :)

Daniel

BEARBEITEN: Nur um die Debatte "Deaktivieren des Schreib-Cachings ist schlecht" zu vermeiden (ich würde wirklich gerne Antworten auf meine Frage bekommen :) Danke).

ATTO-Benchmarks für kein Schreib-Caching (links) und Schreib-Caching (rechts):

ATTO benchmarks for no write caching (left) and write caching (right)

EDIT 2: Wie von @ techie007 inspiriert, habe ich versucht, die Speichervorteile zu ermitteln, die sich aus der Deaktivierung des Caching ergeben. Wie Sie anhand dieser Screenshots sehen können, wird durch das Deaktivieren der Zwischenspeicherung, zumindest in Bezug auf den Speicher, nichts erreicht. Jede Änderung hier wäre völlig statistisch.

Um es festzuhalten, wusste ich nicht genau, wie dies am besten funktioniert. Deshalb habe ich den Rechner für beide Läufe neu gestartet, ein wenig beruhigt, dann ATTO ausgeführt und die Mem-Nutzung während und nach einem Lauf überwacht.

Zuerst sind zwei mit aktiviertem Schreib-Caching aktiviert (während ATTO, dann danach):

enter image description here

enter image description here

Die nächsten beiden sind dasselbe Szenario, jedoch mit deaktivierter Schreib-Zwischenspeicherung:

enter image description here

enter image description here

1
Die ATTO-Benchmarks sind sicherlich interessant. Haben Sie Benchmarks, die die Vorteile der Deaktivierung des Schreibcaches aufzeigen? Gibt es messbar weniger Speicherplatz? Weniger CPU-Auslastung Weniger Prozesse laufen? Ƭᴇcʜιᴇ007 vor 10 Jahren 0
Verwandte Themen: [Wie kann ich den Dateicache unter Windows Server 2008R2 einschränken oder sogar deaktivieren?] (Http://superuser.com/questions/422113/how-could-i-limit-or-even-disable-file-cache-on -windows-server-2008r2) Ƭᴇcʜιᴇ007 vor 10 Jahren 0
@ techie007 - Das ist eine wirklich gute Frage. Ich gehe nur davon aus, dass der Effekt weniger Speicherverbrauch bedeuten würde. Ich mache ein paar Tests und melde mich zurück. DanielSmedegaardBuus vor 10 Jahren 0
@ techie007 - Wie du in meiner Bearbeitung sehen kannst, gibt es keinen wirklichen Nutzen! Danke, dass Sie mich testen lassen :) DanielSmedegaardBuus vor 10 Jahren 0
Wenn man bedenkt, dass diese Art der Optimierung in den VMware Tools von Anfang an ein Kinderspiel ist, ist dies wahrscheinlich schon der Fall. DanielSmedegaardBuus vor 10 Jahren 0

3 Antworten auf die Frage

1
David Schwartz

Es ist nicht möglich. Windows verfügt nicht wirklich über einen Festplatten-Cache, es hat einen Seiten-Cache und das gesamte Speicherverwaltungssubsystem ist darauf aufgebaut. Sogar das Nachverfolgen des aktiven und des inaktiven Arbeitsspeichers wird durch den Seitenschutz im Seitencache verwaltet.

Wenn der Gast die Zwischenspeicherung nicht steuert, muss der Gast alle Festplattenzugriffe an den Host weiterleiten, damit er weiß, was im Speicher bleiben soll. Programme würden mit einer mikroskopischen Geschwindigkeit ablaufen, da ein weicher Fehler auf dem ganzen Weg zum Host jedes Mal auftreten würde, wenn Code eine Seitengrenze durchquert. Das ist nur das offensichtlichste Problem, es gibt noch viel mehr, die alle Arten von Schrecken darstellen würden.

Es wäre, als würde man jeden Tag ein Auto bauen, um zur Arbeit zu fahren.

Hallo David :) Danke für die Antwort! Ich denke, ich habe mich vielleicht schlecht formuliert ... Vielleicht haben Sie recht beim Lesen von Caching, aber zumindest haben wir die Möglichkeit, das Schreib-Caching zu deaktivieren (was standardmäßig für USB-Sticks deaktiviert ist). Dies kann leicht über die GUI deaktiviert werden, aber ich möchte es von der Kommandozeile aus tun. Und wenn es möglich ist (was Sie nicht vorschlagen), gilt dies auch für das Lesen von Zwischenspeichern. Prost :) DanielSmedegaardBuus vor 10 Jahren 0
@DanielSmedegaardBuus Das bringt keine Vorteile. Warum sollten Sie davon profitieren, wenn Sie das Schreib-Caching deaktivieren? David Schwartz vor 10 Jahren 0
Nun, weil ich bereits Schreibcache auf meinem Host habe. Daher würde jede Schreiboperation bereits bei der Synchronisierung ziemlich sofort zurückkehren, da das Host-Betriebssystem schließlich die Schreibanforderung erhält, in den Cache wirft und zurückkehrt. Ich bin auch auf einem 2013 Air mit 700+ MB / s und liest und schreibt. Außerdem würde das meiste, was ich schreiben würde, über vmhgfs freigegebene Ordner auf dem Host sein. DanielSmedegaardBuus vor 10 Jahren 0
@DanielSmedegaardBuus Die Anforderung vom Gast an den Gastgeber weiterleiten zu müssen, wäre alles andere als unmittelbar. Ich denke, Sie vermissen, dass der Hauptpunkt des Schreibcaches darin besteht, viele kleine Schreibvorgänge zu einigen großen zusammenzufassen. David Schwartz vor 10 Jahren 0
Die Anfrage weiterleiten? Was meinst du? Die Schreibanfrage? Wie würde das auf keinen Fall passieren? Der einzige Unterschied, den ich sehen kann, ist, ob die Schreibvorgänge im Gast-RAM in die Warteschlange eingereiht werden und dann zeitweilig an den Host (Cache) geleert werden oder die Schreibvorgänge im Host-Cache in die Warteschlange gestellt und zeitweilig auf die Festplatte geleert werden. Wie meine ATTO-Benchmarks anzeigen, ist die E / A-Leistung dieselbe. Was meinst du damit, dass ich den Punkt des Schreibcaches verpasst habe? Mein Punkt ist, dass es bereits einen Schreibcache auf dem Host gibt, so dass ein anderer im Gast nicht viel zur Leistung beiträgt. DanielSmedegaardBuus vor 10 Jahren 0
@DanielSmedegaardBuus Du liegst falsch. Wenn sich der Schreibcache nur im Gast befand, müsste * jeder * Schreibauftrag an den Host weitergeleitet werden - eine Katastrophe. Mit einem Schreibcache im Gast können Schreibanforderungen aggregiert werden und die Anzahl der durchlaufenen Nummern ist viel niedriger. Dies ist so wichtig und so wichtig, dass Sie es * nicht * deaktivieren können. (Es ist nicht einmal physisch möglich, nur ein Byte auf eine physische Festplatte zu schreiben - wie würden Sie die Stelle finden? - Ein Schreibcache ist daher * Pflicht *, um Schreibvorgänge in größeren Einheiten zusammenzufassen.) David Schwartz vor 10 Jahren 0
Sie scheinen das OS-Caching miteinander zu vermischen und die Grundlagen zu verbessern. Zunächst können Sie ein einzelnes Byte auf die Festplatte schreiben. Sie müssen jedoch 1 Datenblock lesen, ändern und zurückschreiben. Das sind wahrscheinlich 512 Bytes oder 4 KByte bei sich drehenden Medien, bei den meisten Arten von Festkörpermedien wesentlich mehr. Egal, ob Sie, das Betriebssystem, ein Treiber oder die Festplatte dies tun, es wird passieren. (Zum Beispiel machen 4k-Laufwerke, die 512B vortäuschen, einiges für Sie, SSDs tun viel davon). DanielSmedegaardBuus vor 10 Jahren 0
Die Zwischenspeicherung auf Betriebssystemebene ist immer deaktiviert. Sie spüren dies in Windows (und AFAIK alle anderen Betriebssysteme), zum Beispiel mit USB-Sticks, bei denen der Schreibcache standardmäßig deaktiviert ist, um Datenverluste zu vermeiden, wenn Sie ihn nur herausschleudern. In anderen Betriebssystemen als Windows wird dies erreicht, indem Sie das Laufwerk mit der Option / sync / mounten und die Zwischenspeicherung für diese Partition deaktivieren. Hat wieder nichts mit dem Laufwerk zu tun. Es hat mit dem Dateisystem und der Optimierung von Lese- und Schreibvorgängen zu tun, entweder aus Geschwindigkeits- oder Sicherheitsgründen. DanielSmedegaardBuus vor 10 Jahren 0
1
DanielSmedegaardBuus

Und die endgültige Antwort lautet: Ja, Sie können es auf die (hässliche) Weise tun, die ich zuvor beschrieben habe, aber es bringt keinen Vorteil (zumindest mit XP).

Die Speichernutzung ist praktisch die gleiche wie die Leistung.

Alles in allem also eine gute Nachricht, denn die Umsetzung in mein Skript erwies sich als sehr schwierig!

Vielen Dank, dass Sie mich angestoßen haben;)

0
DanielSmedegaardBuus

Nun, dieses Benchmarking zu haben, erwies sich tatsächlich als gummigerissenes Erlebnis :)

Dies ist keine wirklich gute Antwort, es sei denn, Sie wissen, dass Sie sich in einem bestimmten Anwendungsfall befinden, z. B. bei mir mit VMware. Weil Sie dies über Registrierungsschlüssel tun können, aber nur, wenn Sie den Pfad zu den Schlüsseln kennen.

Hier sind die Befehle in meinem Fall:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3030303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3130303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f  reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3030303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3130303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f 

Das ist für die beiden Laufwerke des virtuellen ide0-Adapters - das primäre und das Slave-Laufwerk. Zumindest in Fusion 6.

Ich würde viel lieber eine Suche nach UserWriteCacheSetting durchführen und dann jedes deaktivieren, aber ATM weiß nicht, wie ich das von der Befehlszeile aus tun würde. Wenn ich es herausfinde, werde ich es aktualisieren :)