Ist /dev/shm schneller als /tmp?

Ist /dev/shm schneller als /tmp?

Diese Frage/dev/shmFragen, ob oder verwendet werden sollen /tmp. In den bereitgestellten Antworten entsteht der allgemeine Eindruck, dass /dev/shmschneller ist als /tmp, da es in den RAM statt auf die Festplatte schreibt. Eine Suche im Internet zu diesem Thema bestätigt diesen Eindruck vage. Leider kann ich keine zuverlässige Quelle finden, die zweifelsfrei zeigt, welches leistungsfähiger ist, z. B. durch Messung.

Zum Beispiel dieses Zitat aus der ersten Antwort:

Da RAM wesentlich schneller ist als Festplattenspeicher, können Sieverwenden Sie /dev/shm anstelle von /tmp für die Leistungssteigerung, wenn Ihr Prozess E/A-intensiv ist und häufig temporäre Dateien verwendet.

Im verlinkten Artikel heißt es:

/dev/shm ist nichts anderes als die Implementierung des traditionellen Shared-Memory-Konzepts. Es ist ein effizientes Mittel zum Übertragen von Daten zwischen Programmen. Ein Programm erstellt einen Speicherbereich, auf den andere Prozesse (sofern erlaubt) zugreifen können. Dies führt zu einer Beschleunigung der Abläufe unter Linux.

Dies bestätigt weder die Antwort mit Verweis auf diese Website, noch wird die Leistung von /dev/shmmit der von verglichen /tmp. Es ist eher eine bloße Beschreibung dessen, was /dev/shmist.

Dennoch gibt es eineKommentarin der ersten Antwort mit der Aussage (Stand heute):

Die Leistung wird durch die Verwendung von /dev/shm nicht verbessert. /dev/shm ist Speicher (tmpfs), der von der Festplatte (Swap) unterstützt wird. /var/tmp ist Speicher (Festplattencache), der von der Festplatte (Dateisystem auf der Festplatte) unterstützt wird. In der Praxis ist die Leistung ungefähr gleich (tmpfs hat einen leichten Vorteil, aber nicht genug, um eine Rolle zu spielen). /tmp kann tmpfs sein oder nicht, je nachdem, wie der Administrator es konfiguriert hat. Es gibt keinen guten Grund, /dev/shm in Ihren Skripten zu verwenden.

Da dieser Kommentar unwidersprochen bleibt und andere Antworten und Kommentare das Gegenteil nahelegen, bleibt die Frage, ob es /dev/shmschneller ist als /tmpoder nicht?

NB: Ich bin mir durchaus bewusst, dass die Antwort höchstwahrscheinlich "es kommt darauf an" sein wird. Es gibteine Frage hier auf SU:SEdarüber, welches Dateisystem verwendet werden soll /tmp. Es gibt auch eineverwandte Frage bei SO.

Antwort1

Wenn Sie verwenden, /dev/shmschreiben Sie nicht direkt in den RAM. Es ist eintmpsDateisystem,tmpsspeichert alle Dateien im virtuellen Speicher (eine Festplatte als Erweiterung des RAM).

Auskernel.org:

Wenn Sie es mit ramfs vergleichen (das die Vorlage für tmpfs war), erhalten Sie Swapping und Grenzwertprüfung. Eine andere ähnliche Sache ist die RAM-Disk (/dev/ram*), die eine Festplatte mit fester Größe im physischen RAM simuliert, auf der Sie ein normales Dateisystem erstellen müssen. Ramdisks können nicht swappen und Sie haben nicht die Möglichkeit, ihre Größe zu ändern.

Da tmpfs vollständig im Seitencache und im Swap-Speicher liegt, werden alle tmpfs-Seiten in /proc/meminfo als „Shmem“ und in free(1) als „Shared“ angezeigt. Beachten Sie, dass diese Zähler auch den gemeinsam genutzten Speicher (shmem, siehe ipcs(1)) umfassen. Die zuverlässigste Methode, um die Anzahl zu ermitteln, ist die Verwendung von df(1) und du(1).

ramfsist ein RAM-basiertes Dateisystem:

Ramfs ist ein sehr einfaches Dateisystem, das die Festplatten-Caching-Mechanismen von Linux (den Seiten-Cache und den Dentry-Cache) als dynamisch skalierbares RAM-basiertes Dateisystem exportiert.

Daher ist als Antwort auf Ihre Frage keine Leistungssteigerung zu verzeichnen, da beide (/dev/shm und /tmp) die Festplatte verwenden.

Mit diesem Beispiel können Sie überprüfen, wann Sie in den RAM schreiben:

mkdir /mnt/ram
mount -t ramfs -o size=2g ramfs /mnt/ram
# Create random file of 2GB
dd if=/dev/urandom bs=1024 count=2000000 of=/tmp/testfile conv=notrunc
# Check ram usage
free
cp /tmp/testfile /mnt/ram
# Check ram usage again
free

verwandte Informationen