Festplattenschreib-Cache-Funktion und eingeschränkte RAM-Nutzung mit Windows 10 Pro - 256 GB DDR4

7

Ich habe eine Windows 10 Professional-Workstation, mit der ich den Materialfluss in Impressionen simuliere. Die von mir verwendete FEA-Software erstellt für jede von mir ausgeführte Simulation große Datenbankdateien mit 50 bis 100 GB. Das Kopieren dieser Dateien auf sich drehende Medien zur Speicherung scheint die RAM-Größe dieses Systems während der Übertragung nicht zu nutzen. Beginnen Sie ein oder zwei Sekunden lang schnell und lassen Sie sie dann auf die native Übertragungsgeschwindigkeit der beiden RAID0 7200RPM-Festplatten von 300 MB / s fallen (171-342 Sekunden). Die Dateien stammen von einem Software-RAID0 mit zwei 600-GB-Partitionen auf zwei 1,2-TB-Intel 750 PCIe NVMe-SSDs, sodass die Leseleistung nicht das Problem darstellt. Das System befindet sich auf einer USV mit 2200 VA und einem EBM und wird jede Nacht auf unserem Speicherserver gesichert, sodass Sie sich keine Sorgen über Datenverlust machen müssen.

Was ich mich frage ist:

Wenn ich die Cache-Einstellungen von Windows 10 anpassen kann, um die gesamten 50-100 GB-Dateien mit 4 GB / s (12-25 Sekunden) in den RAM zu lesen, können die beiden Intel 750-Geräte diese und können sie dann transparent auf die Festplatte schreiben. Ich habe den Eindruck, dass die integrierte Windows-Funktion "Festplatten-Caching" dazu in der Lage ist, aber einige Standardeinstellungen für die Cache-Größe in Windows beschränken den Cache auf etwa 5 GB (daher der kleine Geschwindigkeitsschub am Anfang) ). Ich glaube nicht, dass dieser Fehler durch den miserablen 128-MB-Cache auf den Ziellaufwerken verursacht wird, da die "geänderte" physische Speicherauslastung in der ersten Sekunde der Übertragung um ~ 5 GB steigt. Diese 5 GB werden nach dem Verschwinden des Übertragungsdialogfelds auf die Festplatte geschrieben. Die RAM-Auslastung nimmt mit der Geschwindigkeit der beiden 7200 U / min-Laufwerke in RAID0 ab. Einmal vervollständigt, Sie können sehen, dass die Festplattenaktivität auf Null geht und die RAM-Auslastung wieder normal ist. Dies sagt mir, dass das Zwischenspeichern von Datenträgern zumindest funktioniert und nur auf maximal 5 GB begrenzt ist.

Das System würde 50-100 GB des verfügbaren RAM für diese Übertragung verwenden, da die Simulationen normalerweise nur bis zu 80 GB RAM verwenden und die Simulationen diese RAM-Menge erst in den letzten Phasen der Simulation verwenden.

Ich habe eine Dell Precision T7910 Workstation mit den folgenden Spezifikationen:

2P Xeon E5-2687W v4
256GB LRDIMM ECC DDR4 2400MHz
Quadro M4000
x2 Intel 750 1.2TB PCIe NVMe, one boot, 600GB RAID0 Two Partitons
x2 WD Gold 8TB in software RAID0 on SAS 12 GB Ports (128MB Cache)
Eaton 5PX 2200 IRT 240V UPS
Windows 10 Pro 1703 - System is old enough to not have Windows 10 Pro for Workstations

Was ich versucht habe:

Checked/Enabled: "Enable write caching on the device." - On each Disk
Checked/Enabled: "Turn off Windows write-cache buffer flushing on the device." - On each Disk
Made sure Superfetch service is running (for whatever good that does).
Moved away from built-in hardware RAID, as there is NO cache anyway.

Ich habe andere Themen mit ähnlichen Problemen recherchiert und bin auf einen anderen älteren Thread gestoßen, der ein "CacheSet" -Tool erwähnt:

So erhöhen Sie den Festplatten-Cache von Windows 7

Wäre dies auf meinen Anwendungsfall anwendbar oder sollte ich weiter suchen?

Ist mein Verständnis, wie das Zwischenspeichern von Datenträgern auf einer Windows-Plattform funktioniert, korrekt oder funktioniert es anders als erwartet? Ich bin nur auf der Suche nach Schreib-Caching im Hauptspeicher, mit vielleicht bis zu 100 GB RAM, sonst nichts.

Danke für deine Hilfe! Anregungen sind willkommen.

BEARBEITEN : Wenn Sie diese cacheset.exe-Software als ADMIN ausführen, wird die "Peakgröße" von "663732 KB" gemeldet, die zu klein erscheint (648 MB?). Ich bin mir nur nicht sicher, ob ich diese Einstellung ändern und möglicherweise dieses Produktionssystem durcheinander bringen möchte. Das Limit, auf das ich immer wieder stoße, liegt bei 5 GB.

DOUBLE EDIT: Ich habe die scheinbaren GBs überarbeitet, die tatsächlich zwischengespeichert zu sein scheinen. Der Schlüssel sah "Modifizierter physischer Speicher" und sah die ~ 5 GB "Kappe" zu Beginn der Übertragung. Ich versuche immer noch, dies auf etwa 100 GB zu erhöhen.

Danke nochmal!

GHTurbines
quelle
das sieht ... lustig aus. Wenn Sie am Ende keine Antwort bekommen und es Ihnen nichts ausmacht, die Frage für mich im Auge zu behalten, bin ich möglicherweise bereit, eine Prämie dafür zu erhalten
Journeyman Geek
Ich habe keine 'Antwort', da ich nicht testen kann, aber ich frage mich, ob einige der Einstellungen (die Client-Einstellungen) in msdn.microsoft.com/en-us/library/windows/hardware/… helfen würden.
djsmiley2kStaysInside
Sie können Tools von Drittanbietern wie PrimoCache verwenden, wenn Ihnen das integrierte Caching nicht ausreicht. Ich würde vorschlagen, dass Sie mit> 100 GB RAM gut in Spezialgebieten sind.
Bob
Danke Bob. PrimoCache sieht so aus, als ob es das tut, was ich brauche, aber es scheint, dass dies behoben werden kann, indem eine dumme Einschränkung geändert wird, die irgendwo in der Registrierung fest codiert ist (danke djsmiley2k, jetzt schauen). Ich bin mir nicht sicher, ob ich dem Einfügen einer weiteren Schicht eines Drittanbieters zum "Abfangen von E / A" völlig vertrauen würde, ohne sie zuvor gründlich auf einem Nicht-Produktionssystem zu testen. Ich werde sehen, ob wir es mit einem anderen Intel 750 und Spinnrost auf einer geringeren 1P-Präzision testen können. Dieser T7910 ist unsere spezielle Simulationsbox. Danke nochmal!
GHTurbines
Ich werde diese Frage noch eine Weile im Auge behalten, Journeyman Geek. Vielen Dank! So wie es aussieht, sollten wir nicht warten müssen, bis eine Übertragung abgeschlossen ist, um eine neue Simulation zu starten, solange wir der Übertragung der SSD voraus sind, bevor sie voll wird (Übertragung während der Simulationen). 1 TB SSD ist in weniger als 1 Stunde erledigt, wenn wir beschäftigt sind oder an einem komplexen Eindruck arbeiten.
GHTurbines

Antworten:

2

Ein größerer Cache hilft nicht, nicht mit einer Standard-App zum Kopieren von Dateien.

Unabhängig davon, wie groß der Windows-Dateicache ist, schließt kein vernünftiges Dateikopierwerkzeug die Eingabedateien für die Kopieraufgabe (sodass Sie sie löschen können), bevor alle Daten in das Ziel geschrieben wurden. Dies gilt auch dann, wenn die gesamten Eingabedaten zufällig in den Cache eingelesen wurden.

Der Grund ist, dass die Daten im Cache nicht sicher sind - sie können jederzeit verschwinden. Jeder vom Cache verwendete RAM, der seit dem Lesen von der Festplatte nicht geändert wurde, wird vom Speichermanager als verworfen angesehen. Das heißt, wenn etwas anderes den RAM benötigt, kann der vom Cache verwendete RAM aus dem Cache abgerufen und jederzeit "neu verwendet" werden, dh an etwas anderes übergeben werden. Natürlich kann es das - schließlich sollte es nirgendwo Daten geben, die sich nur im Cache befinden. (Es sei denn, es wurde seit dem Lesen von der Festplatte geändert. In diesem Fall wird es automatisch zum Zurückschreiben in die Warteschlange gestellt. Dies erfolgt innerhalb von vier Sekunden. Es kann erst wieder verwendet werden, wenn das Zurückschreiben abgeschlossen ist.)

Bei einem Standardkopierprogramm müssen Sie also warten, bis die sich drehenden Datenträger die Daten geschrieben haben, bevor Sie die Quelldateien löschen können - unabhängig davon, wie viel in einem Cache gepuffert ist.

Beachten Sie, dass ein Kopierprogramm (oder eine andere App) nicht einmal herausfinden kann, ob sich etwas im Cache befindet. Dafür gibt es keine Schnittstelle. Selbst wenn dies der Fall wäre, würden die Informationen in dem Moment, in dem sie abgerufen wurden, als "veraltet" betrachtet, noch bevor die App sie ansah. Der Dateicache soll automatisch funktionieren und für Apps transparent sein. Ein Teil der Transparenz besteht darin, dass nur sehr wenige Steuerelemente vorhanden sind.

Stellen Sie sich das so vor: Sie benötigen eine sichere Zwischenkopie Ihrer Ergebnisse - etwas, das funktional einer anderen Kopie Ihrer Quelldateien in einem anderen Verzeichnis entspricht, möglicherweise sogar einem separaten Laufwerksbuchstaben, bevor Sie die Originale sicher löschen können. Der Windows-Dateicache wird Ihnen das niemals geben. Selbst wenn Windows beschließt, die Originaldateien vollständig in den Dateicache zu schlürfen (was sehr unwahrscheinlich ist), gibt Ihnen der Dateicache dies nicht.

(Sie fragen sich vielleicht: "Was nützt es überhaupt ?" Das Hauptziel des Dateicaches besteht darin, den wiederholten Zugriff auf zahlreiche kleine Dateien (und Dateisystem-Metadaten) zu beschleunigen. Und das funktioniert ganz gut.)

SuperFetch

TL, DR-Version: SuperFetch bietet Ihnen das auch nicht.

Sie haben Recht mit Ihrem ausdrücklichen Zweifel an SuperFetch. SuperFetch ist zwar effektiv bei dem, was es versucht, aber es hilft diesem Fall nicht weiter. SuperFetch verfolgt die Dateien, auf die häufig zugegriffen wird, beispielsweise bei jedem Start, und versucht, sie vor Bedarf in den Arbeitsspeicher einzulesen.

Diese Unterscheidung ist wichtig, wenn Sie das Windows-Caching im Allgemeinen verstehen möchten. Der Windows-Datei-Cache (wie ich im vorherigen Abschnitt beschrieben habe) ist reaktiv , was bedeutet, dass er nichts zwischenspeichert, bis ein Programm tatsächlich versucht hat, ihn zu lesen. Es gehört seit der ersten Veröffentlichung (NT 3.1) zur Windows NT-Familie.

SuperFetch ist ein separater Mechanismus, der ursprünglich mit Vista hinzugefügt wurde. Es ist proaktiv und versucht, Dinge vorab abzurufen, auf die in der Vergangenheit häufig zugegriffen wurde.

SuperFetch verwaltet seinen RAM getrennt vom Windows-Dateicache. SuperFetch verwendet Seiten mit "niedrigerer Priorität" in der Windows-Standby-Seitenliste - und komischerweise bleiben sie nur in dieser Liste, sodass sie Teil des "verfügbaren" RAM bleiben. (Wenn alle anderen Dinge gleich sind, werden Sie keinen Unterschied im "verfügbaren" RAM bemerken, wenn unser ohne SuperFetch aktiviert ist, aber Sie werden einen Unterschied in der Menge des gemeldeten "Cache" bemerken.) Der dem Dateicache zugewiesene RAM ist in einem Arbeitssatz und dauert daher etwas länger, um wiederzuverwenden, wenn dies erforderlich ist. Aufgrund dieses Designs ist der SuperFetch-Cache noch schneller "verwerfbar" als der Windows-Dateicache, sodass Sie keine sichere temporäre Kopie von irgendetwas erhalten, genauso wenig wie der Dateicache.

Was können Sie also tun?

Um Ihr Problem zu lösen, würde ich mich mit dedizierter Hardware befassen. Besorgen Sie sich möglicherweise eine einzelne, nicht so teure oder schnelle SSD mit beispielsweise 120 GB, kopieren Sie die Daten von Ihrem SSD-Array auf diese und kopieren Sie sie von dort auf die Festplatte. Dies würde leider bedeuten, dass Sie erst dann mit dem Schreiben auf die Festplatten beginnen können, wenn alle Ihre Daten auf die temporäre Festplatte kopiert wurden. Dies dauert also länger als jetzt. Die Quelldaten werden jedoch früher freigegeben.

Eine einfachere Idee wäre, mehr Festplatten zu bekommen und sie in einen größeren Streifensatz zu legen, um den Schreibdurchsatz zu erhöhen.

Ein spezielles Kopierprogramm, das die Struktur Ihrer Daten kennt, kann hilfreich sein.

Übrigens hoffe ich, dass Ihre FEA-Software beim Erstellen des Datensatzes den Zugriff auf zugeordnete Dateien verwendet - dies ist weitaus schneller als herkömmliche Lese- / Schreibaufrufe.

Jamie Hanrahan
quelle
Technisch gesehen denke ich, dass er nicht wirklich zwischengespeichert werden möchte. Er möchte, dass es gepuffert wird . Das ist natürlich sicher, bietet aber dennoch keinen Vorteil.
Daniel B
Sie haben Recht, aber mein starker Eindruck ist, dass er gefragt hat, ob der Windows-Datei-Cache die Aufgabe übernehmen soll. Daher mein Diskurs darüber, warum es nicht geeignet ist.
Jamie Hanrahan
0

Dies ist etwas spät, aber Sie können ein Programm namens PrimoCache (ehemals FancyCache) verwenden, um das zu erreichen, was Sie benötigen. Richten Sie ein Volume auf einer Ersatz-SSD (oder auf Ihrem 600 GB schnellen NVMe RAID0-Array, obwohl dies ein wenig riskant ist, es sei denn, Sie haben Redundanz ...) als Level-2-Cache ein, und der Cache liest und schreibt auf ein bestimmtes langsames Volume . Ihre Schreibvorgänge auf diesem Volume werden zuerst transparent über das schnelle Volume zwischengespeichert. Wenn das Cache-Volume während des Schreibens fehlschlägt, haben Sie natürlich Daten beschädigt, aber das ist ein unvermeidbares Opfer. Wenn Sie genau auswählen, was genau Sie zwischenspeichern, kann dies bei minimalem Risiko äußerst effektiv sein. Mit einem Cache-Volume mit geeigneter Größe (256 GB wären wahrscheinlich mehr als genug) können Sie eine SSD-nahe Leistung auf langsamen mechanischen Arrays mit hoher Kapazität für Blöcke mit häufigem Zugriff erzielen. Denken Sie auch daran, dass SSDs eine begrenzte Anzahl von Schreibvorgängen enthalten, obwohl ich bisher einen Fehler gesehen habe. Wenn dies der Fall ist, ersetzen Sie es im schlimmsten Fall und füllen den Cache neu. Möglicherweise gehen Daten verloren, wenn dies beim Schreiben auf das Festplatten-Volume fehlschlägt. Sie können dasselbe Programm auch verwenden, um einen Level-1-Cache im RAM zu erstellen, anstatt eine SSD zu verwenden, die noch schneller ist, aber etwas RAM verbraucht.

Die bessere Lösung besteht natürlich darin, VMWare ESX auf der Workstation zu installieren, eine VM bereitzustellen und dann Ihr Speicherarray genau so zu konfigurieren, wie Sie es für maximale Leistung und Skalierbarkeit wünschen. Installieren Sie Windows in der VM und greifen Sie über den vSphere-Client remote darauf zu. Auf diese Weise erfolgt das Caching unterhalb des Betriebssystems so nah wie möglich an der Hardware.

Betrunkener Code-Affe
quelle