Leistungsunterschied zwischen ramfs und tmpfs

23

Ich muss ein In-Memory-Speichersystem für ca. 10 GB Daten einrichten, das aus vielen 100-KB-Einzeldateien (Bildern) besteht. Es wird viele Lese- und Schreibvorgänge geben (Hinzufügen neuer Dateien, Löschen einiger alter Dateien).
Jetzt weiß ich, dass sich tmpfs wie ein reguläres Dateisystem verhält, für das Sie beispielsweise mit df den freien / verwendeten Speicherplatz überprüfen können , was eine nette Funktion ist. Ich bin jedoch interessiert, ob RAMFS einige Vorteile in Bezug auf die Geschwindigkeit von E / A-Vorgängen bieten würde. Ich weiß, dass ich die Größe des verbrauchten Arbeitsspeichers bei Verwendung von RAMs nicht steuern kann und dass mein System hängen bleiben kann, wenn der freie Arbeitsspeicher vollständig verbraucht wird, aber das wird in diesem Szenario kein Problem sein.

Um es zusammenzufassen, ich bin interessiert:
- Leistungstechnisch, was ist schneller: RAMFS oder TMPFS (und möglicherweise warum)?
- Wann verwendet tmpfs Swap Space? Verschiebt es bereits gespeicherte Daten zum Auslagern (um RAM für andere derzeit laufende Programme freizugeben) oder nur neue Daten, wenn in diesem Moment kein RAM mehr frei ist?

Ivan Kovacevic
quelle
Wie viel RAM ist im Server?
Ewwhite
1
Der Server verfügt über insgesamt 16 GB RAM. Erwähnenswert ist auch, dass ich keinen SSD-Speicher habe, sondern eine einzelne Festplatte mit 7200 U / min. Aus diesem Grund erwäge ich, eine Art RAM-Speicher zu verwenden.
Ivan Kovacevic

Antworten:

21

Meine Empfehlung:

Messung und Beobachtung der realen Aktivität unter normalen Bedingungen.

Es ist unwahrscheinlich, dass diese Dateien ALLES benötigen und jederzeit aus dem Cache bereitgestellt werden. Es gibt jedoch ein nützliches Tool namens vmtouch , mit dem Sie feststellen können, was sich zu einem bestimmten Zeitpunkt im Cache befindet. Sie können es auch verwenden, um bestimmte Verzeichnisse oder Dateien im Cache zu sperren. Sehen Sie sich also an, wie die Dinge nach regelmäßigem Gebrauch aussehen. Die Verwendung von tmpfs und ramfs ist in dieser Situation nicht erforderlich.

Siehe: http://hoytech.com/vmtouch/

Ich denke, Sie werden überrascht sein, dass die aktivsten Dateien wahrscheinlich bereits im Cache gespeichert sind.


In Bezug auf tmpfs und ramfs gibt es keinen nennenswerten Leistungsunterschied. Es gibt betriebliche Unterschiede. Ein realer Anwendungsfall ist Oracle, bei dem mithilfe von RAMFS Oracle Daten im RAM verwalten konnte, ohne dass das Risiko eines Datenaustauschs bestand. tmpfs-Daten können unter Speicherdruck ausgelagert werden. Es gibt auch Unterschiede in der Größenänderung und Änderung von Einstellungen im laufenden Betrieb.

ewwhite
quelle
1
Fantastisches kleines Hilfsprogramm! +1
Janne Pikkarainen
1
@ newwhite Ausgezeichnete Antwort. In einem unserer Fälle vor einigen Jahren haben wir tatsächlich herausgefunden, dass die am häufigsten verwendeten Dateien bereits im Cache gespeichert sind. Hinweis: Dateisysteme sind heutzutage viel intelligenter als man denkt.
Giannisapi
13

Überdenken Sie das nicht. Platzieren Sie genügend RAM in Ihrem System und lassen Sie den Festplatten-Cache des Kernels für Sie sorgen. Auf diese Weise erhalten Sie den Vorteil, dass die Lesevorgänge direkt aus dem Speicher stammen und die Daten auf der Festplatte erhalten bleiben.

EEAA
quelle
1
Mein System verfügt derzeit über 16 GB RAM. Es ist eine einfache Debian-Installation, auf der Nginx ausgeführt wird, um diese Images bereitzustellen. Ich habe eine 1-Gbit-Netzwerkverbindung, die die ganze Zeit über zu 100% ausgelastet ist und diese Bilder in keiner bestimmten Reihenfolge bereitstellt. Glauben Sie, dass der Kernel in diesem Szenario all diese 10 Gigs Bilder trotzdem in den Cache lädt?
Ivan Kovacevic
3
Ja, wenn im System genügend RAM vorhanden ist und andere Anwendungen auf dem Server nicht um RAM-Ressourcen konkurrieren, verbleiben diese Dateien im Cache.
EEAA
2
Ich habe für ~ 15 Jahre bei Unix - Administration gewesen, und ich habe nie in eine Situation kommen, wo tmpfs / ramfs Verfügung gestellt hätte jeden Vorteil gegenüber dem nativen Kernel fs - Cache. Das heißt nicht, dass es keine Situationen gibt, in denen dies gerechtfertigt wäre, aber sie sind ziemlich selten. Wenn Sie RAM - Cache für bestimmte Dinge benötigen, wird in der Regel eine speziell erstellte Caching - Ebene (Redis / Memcache / etc.) Verwendet.
EEAA
4
Das Zwischenspeichern von Datenträgern funktioniert sicherlich für den Fall, dass die Bilder gelesen werden müssen, aber tmpfs oder ramfs immer noch nützlich sein können, wenn Sie viele zufällige / kleine Schreibvorgänge beschleunigen möchten, aber an einen Datenträger gebunden sind, der mit zufälligen I / langsam ist. O. Denken Sie daran, dass bei einem Absturz oder einem Stromausfall der Inhalt von tmpfs gelöscht wird, da er (nur) im Speicher vorhanden ist.
Martijn
1
@ Martijn ist richtig. tmpfs und ramfs sind in der Tat nützlich. Zum Beispiel mache ich ein intensives Rewrite (Filter-Branch) eines Git-Repositorys. Das Speichern ist schneller als das Speichern auf meiner SSD. Caching hilft beim Lesen und nicht beim Schreiben, da Linux (normalerweise) einige Garantien für die Dauerhaftigkeit von Festplattenoperationen erfüllen muss.
Paul Draper
7

1) Leistungsbenchmark.

Mit dieser Seite als Referenz habe ich einen E / A-Vergleich zwischen tmpfs und ramfs durchgeführt. Die Ergebnisse sind in Bezug auf die Leistung ziemlich identisch:

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) Laut dieser Seite verwendet tmpfs swap und ramfs swap nicht.

Michael Martinez
quelle
2
Ihre Antwort ist auf dem richtigen Weg. Allerdings würde ich Ihrer Schlussfolgerung bezüglich der Leistung nicht zustimmen, Ihre Tests zeigen, dass es Unterschiede von 0,2 GB / s und 0,1 GB / s zugunsten von RAMFS gibt. Ich denke, dies sollte noch weiter getestet werden, um eine gültige statistische Stichprobe zu erhalten. Zu 2) Ja, das ist bekannt, aber ich wünschte, ich könnte einen genaueren Einblick darüber bekommen, wann Swap verwendet wird.
Ivan Kovacevic
Wenn wir diesen Benchmark einige Male mit Dateien unterschiedlicher Größe durchgeführt haben, werden wir wahrscheinlich keinen Unterschied feststellen. Sie werden feststellen, dass sich der Unterschied eher verringert als vergrößert hat, als ich ihn viermal vergrößert habe.
Michael Martinez
1
Was ist mit dem Fall, in dem Sie eine Menge kleiner Dateien haben? Zum Beispiel das Schreiben von Millionen Dateien mit 100 bis 200 KB. Erhalten Sie bei gleicher Dateigröße auch immer wieder 0,2 GB / s Unterschied? Was auf jeden Fall auf Leistungsunterschiede hinweisen würde. Ich werde das wahrscheinlich selbst testen, wenn es in meinem Zeitplan liegt. Aber deshalb habe ich hier nachgefragt, damit ich es vielleicht von der To-Do-Liste streichen kann, wenn es schon jemand anderes getan hat.
Ivan Kovacevic
Ja, der einzige Weg, sicher zu sein, ist, die Tests durchzuführen.
Michael Martinez
1

Wenn Sie genügend RAM installiert haben, um die verschiedenen Kernel-Puffer, den Anwendungsstapel und -heaps, den regulären Dateisystem-Cache und alle Dateien, die Sie dort ablegen möchten, zu hosten, ramfssollte dies niemals langsamer sein, tmpfsda dies kein Risiko darstellt physische E / A von Entwurf. Physische I / Os sind zweifellos die Hauptursache für Leistungseinbußen in diesem Bereich.

Wenn Sie jedoch nicht so viel RAM installiert haben, ist die Verwendung ramfsmöglicherweise und wahrscheinlich langsamer als tmpfsdie Verwendung der virtuellen Speicherheuristik, um zu entscheiden, was sich besser auf der Festplatte (dh im Auslagerungsbereich) als auf dem RAM befinden sollte während mit tmpfs, ist Ihr Dateisystemdaten auf RAM stecken , die eine Verschwendung von Ressourcen sein könnte.

Wenn Sie die zweite Frage mit "Ja" beantworten, tmpfswerden alte Daten zuerst in den Auslagerungsbereich verschoben, nicht in den letzten "heißen".

jlliagre
quelle