Gibt es eine Möglichkeit, Windows zu zwingen, eine Datei im RAM zwischenzuspeichern?

7

Ich habe einen Windows Server 2008 R2-Dateiserver, der einige große Dateien enthält, die in seltenen Fällen sehr wichtig sind, um so schnell wie möglich auf ein anderes System kopiert zu werden.

Gibt es eine Möglichkeit, zu erzwingen, dass diese Dateien immer im RAM zwischengespeichert werden?

Josh
quelle
1
Hinweis: Nicht direkt verwandt, aber wenn Sie wirklich an Geschwindigkeit leiden und Ihre Dateiübertragung über Code erfolgt, den Sie steuern, und nicht nur über integrierte Dienstprogramme, möchten Sie möglicherweise Ihren Code aktualisieren, um die TransmitFileFunktion zu verwenden . Durch Öffnen einer Datei und FILE_FLAG_SEQUENTIAL_SCANanschließendes TransmitFileSenden der Dateidaten über den Socket ruft Windows aggressiv vorab ab, um Verzögerungen zu minimieren, und führt die Socket-Schreibvorgänge direkt aus dem Systemcache aus, wodurch unnötige Systemaufrufe zum Kopieren in und aus dem Benutzerbereich entfernt werden.
ShadowRanger

Antworten:

8

Meistens besteht der Engpass nicht darin, die Datei von der Festplatte in den Arbeitsspeicher zu bringen, sondern vom Arbeitsspeicher in das Netzwerk. Sofern das System nicht sehr aktiv ist oder wenig RAM hat, sollte Windows das Zwischenspeichern von Dateien ziemlich intelligent handhaben.

Möglicherweise möchten Sie einige Tests durchführen und feststellen, ob es tatsächlich einen Engpass in Ihrem System gibt, der eine deutliche Verbesserung bewirken würde, indem bestimmte Dateien im Speicher bleiben und nicht auf die Festplatte übertragen werden, wenn Windows der Ansicht ist, dass sie auf der Festplatte gespeichert werden sollten. Ich wette, Sie sparen sehr wenig Zeit, da der Engpass höchstwahrscheinlich das Netzwerk ist. Wenn die Datei in die Warteschlange gestellt wird, um zum Netzwerk zu gelangen, füllt das Laufwerk bereits Puffer im Speicher, während es die Datei aus dem Netzwerk zieht Fahrt.

Die einzige wirklich zuverlässige Möglichkeit, Datendateien im Speicher zu speichern, die ich kenne, besteht darin, eine RAM-Disk zu erstellen und die Dateien dort zu kopieren, vorausgesetzt, sie sind statisch. Andernfalls haben Sie einen Stromausfall und sie sind weg.

Andernfalls möchten Sie möglicherweise in viel RAM und Hochgeschwindigkeitslaufwerke investieren. Möglicherweise sogar eine gespiegelte RAID-Konfiguration, da diese eine hohe Leseleistung (langsameres Schreiben) aufweist. Ich würde Windows und den Speichermanager das tun lassen und mich darauf konzentrieren, die Zugriffszeit mit besseren Subsystemen (schnelle Festplatte, RAID, viel Speicher, hohe Geschwindigkeit und hochwertige Netzwerkkarte) zu minimieren, anstatt sie bis zum Debuggen oder zur Fehlerbehebung zu optimieren könnte später ein Schmerz werden.

Bart Silverstrim
quelle
1
Die RAM-Disk hat die Übertragungsgeschwindigkeit erheblich erhöht. Vielen Dank!
Josh
2

Sie können Supercache oder andere alternative Cache-Lösungen ausprobieren oder eine SSD mit Hochgeschwindigkeits-Lesezugriff verwenden. Dadurch wird fast jede Netzwerkverbindung ziemlich einfach gesättigt.

Die einzige andere Option, die meiner Meinung nach nicht Ihren Anforderungen entspricht, aber ich werde sie erwähnen:

Wenn Sie die Datei in Ihrer Anwendung SCHREIBEN, können Sie versuchen, Folgendes zu erstellen:

FILE_ATTRIBUTE_TEMPORARY und FILE_FLAG_DELETE_ON_CLOSE

Dies weist Windows an, zu versuchen, Dateien im RAM statt auf der Festplatte zu speichern. Ich glaube nicht, dass dies Ihren Anforderungen entspricht, aber Sie können mehr unter http://msdn.microsoft.com/en-us/library/aa363858% lesen 28VS.85% 29.aspx # caching_behavior

Steve Radich - http://www.BitShop.com/blogs.aspx

Steve Radich-BitShop.com
quelle
0

Es gibt keinen Standardweg, dies zu tun. Windows fehlen solche Haken. Wenn dies für Sie wirklich wichtig ist, können Sie versuchen, die Windows-Algorithmen zum Zwischenspeichern von Dateien zu spielen, indem Sie häufig über das Netzwerk auf die Datei zugreifen. Das sollte die Datei zwischengespeichert halten, aber es gibt keine Garantien. IIRC, Sie müssen nicht die gesamte Datei lesen, um die gesamte Datei zwischenzuspeichern. Daher sollte das Lesen einer Teilmenge der Datei ausreichend sein.

sysadmin1138
quelle
0

Ja, es gibt eine Möglichkeit, den OS Memory Manager auszutricksen und die gesamte Datei / den gesamten Ordner in den OS System-Cache zu laden. Schauen Sie sich den Beitrag hier an: http://www.arcgis.com/home/item.html?id=08a5a05ff82446bb8a8befad03b1bb86

Dmitry Kudinov
quelle
3
Willkommen bei Server Fault! Wir bevorzugen es wirklich, dass Antworten Inhalte enthalten, die nicht auf Inhalte verweisen. Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
user9517