Write-Through-RAM-Disk oder massives Caching des Dateisystems?

6

Ich habe ein Programm, das sehr stark auf das Dateisystem trifft und zufällig eine Reihe von Arbeitsdateien liest und schreibt. Die Dateien sind mehrere Gigabyte groß, aber ich kann den Arbeitsspeicher schonen, um sie größtenteils im Arbeitsspeicher zu behalten. Die Maschinen, auf denen dieses Programm ausgeführt wird, sind normalerweise Ubuntu-Linux-Boxen.

Gibt es eine Möglichkeit, das Dateisystem so zu konfigurieren, dass es einen sehr sehr großen Cache hat und sogar Schreibvorgänge zwischenspeichert, damit sie später auf die Festplatte gelangen? Ich verstehe die Probleme mit Stromausfall oder Ähnlichem und bin bereit, das zu akzeptieren. Bei einem Absturz sollten die Schreibvorgänge im Normalbetrieb die Festplatte erreichen!

Oder gibt es eine Möglichkeit, eine RAM-Disk zu erstellen, die auf die reale Disk durchschreibt?

Wille
quelle

Antworten:

6

Stellen Sie eine hohe Anzahl von E / A-Wartezeiten fest, die darauf hinweisen, dass die Lese- und Schreibanforderungen über vorhandene Puffer nicht erfüllt werden? Wie andere angemerkt haben, ist Linux sehr gut darin, Puffer mit freiem RAM auszustatten. Sie sollten dies also zuerst überprüfen.

Wenn Sie keine E / A-Wartezeiten sehen, ist es möglich, dass Ihre Leistungsprobleme (haben Sie sogar Probleme? Ihre Frage sagt nichts) auf Kernel-Kontextwechsel durch viele kleine programmgesteuerte E / A-Vorgänge zurückzuführen sind. In diesem Fall können Sie eine erhebliche Leistungssteigerung erzielen, indem Sie Ihre Anwendung so umschreiben, dass sie Dateien mit Speicherzuordnung verwendet. Aber das ist eher eine Frage für StackOverflow.

Anon
quelle
hmm ... die letzte Antwort vor meiner war vor 3 Monaten, OP wurde seit dem Posten der Frage nicht gesehen, keine andere offensichtliche Aktivität, aber sie erschien auf der Titelseite ... Ich denke, das System versucht, Antworten auf Fragen zu bekommen
Anon
Genau dafür ist die Community des Benutzerkontos da - um unbeantwortete Fragen zu beantworten. stackoverflow.com/users/-1/community
Corey
: achselzucken: die OP ist schon lange weg, und niemand scheint sich darum zu kümmern
Anon
Es interessiert mich, und ich bin zurück. es wird mir eine Weile dauern , um Ihre Frage zu verdauen und es recht zu beantworten, bitte etwas Geduld
Will
6

Erwägen Sie die Verwendung eines ext4-Dateisystems mit schnellen und losen Mount-Optionen:

noatime,data=writeback,nobh,barrier=0,commit=300

Verschieben des Schreibens von Daten aus dem Cache zurück auf die physische Festplatte.

Ansonsten können Sie aufsein tmpfs-Dateisystem über Ihr reguläres Dateisystem unionsmounten, den gesamten Schreibvorgang ausführen und die tmpfs anschließend wieder zum realen Dateisystem zusammenführen.

RolKau
quelle
3
Bedeutung der Optionen: mjmwired.net/kernel/Documentation/filesystems/ext3.txt
netvope
1

Linux verwendet standardmäßig einen beliebigen freien Arbeitsspeicher als Dateicache, sodass hierfür keine Konfiguration erforderlich ist.

Möglicherweise möchten Sie ext4 als Dateisystem verwenden. Es werden eine Reihe von Techniken verwendet, um den Festplattenzugriff zu beschleunigen, einschließlich verzögerter Zuweisung, die:

Dies hat den Effekt, dass Zuordnungen zu größeren Läufen zusammengefasst werden. Solch eine verzögerte Verarbeitung verringert die CPU-Auslastung und verringert tendenziell die Festplattenfragmentierung, insbesondere bei langsam wachsenden Dateien. Dies kann auch dazu beitragen, die Zuordnungen zusammenhängend zu halten, wenn mehrere Dateien gleichzeitig wachsen.

Datenverlust ist aufgrund der Verwendung von Journaling ziemlich selten .

Ext4 ist jetzt das Standarddateisystem in neueren Linux-Versionen, obwohl Sie wahrscheinlich sicherstellen möchten, dass der von Ihnen verwendete Kernel mindestens 2.6.30 ist

Hamish Downer
quelle
1

Verwenden Sie mmap für diese Dateien - es wird das überlegene Caching des Kernels verwendet, wodurch es viel schneller wird.

gthomas
quelle
1

Sie können meine Antwort hier sehen: Reservieren Sie RAM für Cache und Puffer . Wenn Sie Speicher für Cache und Puffer reservieren möchten: Echo 10> / proc / sys / vm / vfs_cache_pressure, wenn 100 der Standardwert ist. Dann können Sie den von jeder App verwendeten maximalen RAM begrenzen: echo 8192> / proc / sys / vm / max_map_count.

Gigamegs
quelle
0

Linux nutzt Ihren Arbeitsspeicher sehr effizient .
Ich glaube nicht, dass Sie wirklich daran arbeiten müssen, Dinge mit großen Dateien zwischenzuspeichern.
Probieren Sie diese Dinge aus, um dies selbst zu überprüfen .

Der Linux-Festplatten-Cache ist sehr unauffällig. Es verwendet freien Speicher, um die Geschwindigkeit des Festplattenzugriffs erheblich zu erhöhen, ohne dass Anwendungen Speicherplatz verlieren.

Überprüfen Sie, wie viel RAM Ihr System hat und ob Sie es skalieren können.
Für diesen Zweck wird keine RAM-Disk benötigt,
der Disk-Cache funktioniert mit dem gesamten verfügbaren RAM-Speicher.

nik
quelle
Ich denke nicht, dass es sich um Linux handelt, das RAM effizient nutzt, sondern um das Zwischenspeichern von Festplatten, wie ein Linux, das FlashFire entspricht: flashfire.org/xe
0

RapidCache stellt eine RAM-Disk mit Write-Through zur Verfügung, befindet sich jedoch derzeit in der Beta- Phase .

Martin
quelle