2010-02-17 5 views
17

Ich habe ein Programm, das sehr stark das Dateisystem trifft, liest und schreibt in eine Reihe von Arbeitsdateien. Die Dateien sind mehrere Gigabyte groß, aber nicht so groß, dass sie nicht auf eine RAM-Disk passen. Die Maschinen, auf denen dieses Programm läuft, sind normalerweise Ubuntu Linux-Boxen.Write-Through-RAM-Disk oder massive Zwischenspeicherung des Dateisystems?

Gibt es eine Möglichkeit, den Dateimanager so zu konfigurieren, dass er einen sehr sehr großen Cache hat und sogar Schreibvorgänge zwischenspeichert, sodass sie später auf die Festplatte gelangen?

Oder gibt es eine Möglichkeit, eine RAM-Festplatte zu erstellen, die auf echte Festplatte schreibt?

+1

Besser auf SuperUser fragen. – extraneon

+0

Halten Sie es einfach: Arbeiten Sie in/dev/shm und kopieren Sie von Zeit zu Zeit eine Kopie in den permanenten Speicher. –

Antwort

22

Standardmäßig verwendet Linux freies RAM (fast alles), um Plattenzugriffe zwischenzuspeichern, und verzögert Schreibvorgänge. Die Heuristiken, die vom Kernel verwendet werden, um die Caching-Strategie zu entscheiden, sind nicht perfekt, aber es ist nicht leicht, sie in einer bestimmten Situation zu schlagen. Auch bei Journaling-Dateisystemen (d. H. Allen Standard-Dateisystemen heutzutage) werden tatsächliche Schreibvorgänge auf die Platte in einer Weise ausgeführt, die die Abstürze nachgiebig macht; Das bedeutet ein wenig Overhead. Vielleicht möchten Sie versuchen, mit Dateisystemoptionen herumzualbern. Z. B. für ext3, versuchen Sie die Montage mit data=writeback oder sogar async (diese Optionen können die Leistung des Dateisystems verbessern, auf Kosten der reduzierten Widerstandsfähigkeit gegen Abstürze). Verwenden Sie außerdem noatime, um die Dateisystemaktivität zu reduzieren.

Programmgesteuert können Sie auch Festplattenzugriffe über Speicherzuordnungen durchführen (mit mmap). Dies ist ein wenig hands-on, aber es gibt mehr Kontrolle über die Datenverwaltung und -optimierung.

+3

Das Anhängen der entsprechenden Dateisysteme mit 'noatime' ist definitiv ein guter Rat für diesen Fall. – caf

+0

'vmtouch' ist auch nützlich, wenn Sie wirklich wollen, dass der Kernel Dinge im Cache speichert (wie ich es gerade mache) –

16

Haben Sie überprüft, ob Ihre Festplatten ihren integrierten Schreibcache verwenden? Es kann einen erheblichen Unterschied machen. Unter Linux können Sie das Verhalten mit hdparm wechseln:

/sbin/hdparm -W 0 /dev/hda 0 Disable write caching 
/sbin/hdparm -W 1 /dev/hda 1 Enable write caching 

Offensichtlich wenn Schreibcache aktiviert ist, dann gibt es das Potenzial für Datenverlust oder Korruption, wenn Ihr System uncleanly abschaltet (zum Beispiel Stromausfall).

In Bezug auf Software verwendet der Linux-Kernel zwei Hauptnummern, um das Schreibverhalten zu parametrisieren.

/proc/sys/vm/dirty_ratio 
/proc/sys/vm/dirty_background_ratio 

Moderne Standardwerte sind häufiger schreiben huge write spikes zu vermeiden. Sie könnten versuchen, diese auf Ihre Bedürfnisse abzustimmen. Hier ist ein excellent discussion der verfügbaren Parameter und wie Sie versuchen könnten, sie anzupassen.

12

Sie könnten eine Ramdisk und RAID-1 es mit einer physischen Partition erstellen. Sehen Sie sich die Optionen --write-mainly und --write-behind an. Sie können diese verwenden, um die physische Festplatte zu einer zu machen, von der nicht gelesen werden soll (nur in die geschrieben werden soll), und um die Anzahl der ausstehenden Schreiboperationen jeweils einzustellen.

Alternativ sehen Sie sich die Dokumentation für pdflush an. Es gibt eine gute Seite hier: http://www.westnet.com/~gsmith/content/linux-pdflush.htm (auch verlinkt von ire_and_curses) Abgesehen von dem, was ich erwähnt habe, werden Sie wahrscheinlich Swappiness bis 100 kurbeln wollen, um den Disk-Cache über Swap zu bevorzugen.

Aber es würde sich lohnen zu lernen, wie alles funktioniert, und es auf Ihre spezifische App abstimmen. Linux ist bereits auf den allgemeinen Fall abgestimmt und nur Sie wissen, wie sich Ihre spezifische Situation unterscheidet. :)

+3

Dannysauer bedeutet die Optionen' --write-most' und '--write-behind' von' mdadm' – mabraham

+0

Bedenken Sie, dass Linux-Software-RAID-1 nicht darauf wartet, dass bei einem normalen Herunterfahren alle Daten auf dem Write-Behind-Gerät repliziert werden. Es markiert einfach die Bereiche, die in der Schreib-Bitmap synchronisiert werden müssen, und plant, die Daten bei erneutem Systemstart weiter zu kopieren. Wenn es jedoch wieder eingeschaltet ist, ist das primäre RAID-Gerät nicht mehr vorhanden oder durch eine neue RAM-Festplatte ersetzt. Datenverlust. –

-4

Vielleicht brauchen Sie RAM-basierte SSD-Festplatte?

+0

Er/Sie möchte seinen/ihren RAM verwenden, um die Disk-IO zu optimieren. Keine neue Fahrt. – alfonx

1

Die Frage hier ist wirklich, wie viel Haltbarkeit benötigen Sie?

Normalerweise verwendet Linux so viel RAM wie es ist, um Dateien für eine Weile im Cache zu speichern, dann schreiben Sie die Änderungen zurück. Dies ist normalerweise das, was Sie wollen, damit Sie einige, aber nicht zu viele Daten im Falle eines Absturzes verlieren.

Anwendungen können natürlich ein Zurückschreiben mit (zum Beispiel) fdatasync() und fsync() erzwingen.

Um eine bessere Leistung zu erzielen, könnten Sie fdatasync seltener aufrufen, um beispielsweise die Haltbarkeit zu opfern.

Verwandte Themen