Ist es empfehlenswert, ein Verzeichnis in /run/shm
(früher /dev/shm
) zu erstellen und dieses wie ein temporäres Verzeichnis für eine Anwendung zu verwenden?
Hintergrund: Ich schreibe Black-Box-Tests für ein Programm, das viel mit Dateien und Verzeichnissen zu tun hat. Für jeden Test erstelle ich viele Dateien und Verzeichnisse und führe dann das Programm aus und erstelle dann den erwarteten Satz von Dateien und Verzeichnissen und führe dann diff aus, um zu vergleichen. Ich habe jetzt ungefähr 40 Tests und die Ausführung dauert bereits mehr als 2 Sekunden. In der Hoffnung, die Dinge zu beschleunigen, möchte ich die Tests in einem Verzeichnis auf einer Art Ramdisk ausführen.
Als ich über RAM-Disk recherchierte, stieß ich auf eine Frage mit der Antwort, dass es in Ordnung ist, ein Verzeichnis zu erstellen /dev/shm
und dieses wie ein temporäres Verzeichnis zu verwenden. Bei weiteren Recherchen bin ich jedoch auf eine Wiki-Seite von Debian gestoßen, die besagt, dass es ein Fehler ist, sie /dev/shm
direkt zu verwenden . Ich sollte die shm_*
Funktionen verwenden. Leider shm_*
scheinen die Funktionen für die Verwendung in einem Shell-Skript nicht verfügbar zu sein.
Jetzt bin ich verwirrt. Ist es in Ordnung oder nicht /run/shm
(früher /dev/shm
) wie ein temporäres Verzeichnis zu verwenden?
quelle
/tmp
im gemeinsam genutzten Speicher bereitgestellt ./tmp
das semantischer ist. Wenn Ihre Benutzer über genügend RAM verfügen,/dev/shm
um temporäre Dateien zu verwenden, um die Arbeit zu beschleunigen, werden sie ihn dort bereitstellen. Wenn sie jedoch nicht über genügend RAM verfügen und das Mounten dort ihren Computer verlangsamt, indem alle Prozesse zur Verwendung von Auslagerungsdateien gezwungen werden, speichern sie ihren RAM für wichtigere Dinge und verwenden normalen Speicherplatz für das/tmp
Dateisystem. Mit anderen Worten,/tmp
ist besser einstellbar.Antworten:
Es ist vollkommen in Ordnung, ein Verzeichnis zu verwenden,
/run
solange Sie über die entsprechenden Rechte verfügen. In einigen modernen Distributionen/tmp
befindet sich bereits ein virtuelles Dateisystem im Speicher oder ein Symlink zu einem Verzeichnis im Inneren/run
. Wenn dies der Fall ist (Sie können dies einchecken/etc/fstab
oder eingebenmtab
), können Sie es/tmp
als temporäres Verzeichnis verwenden.Verwechseln Sie sich auch nicht mit dem Artikel von Debian.
shm_*
Funktionen werden verwendet, um gemeinsam genutzte Speichersegmente für die Kommunikation zwischen Prozessen zu erstellen. Mit diesen Funktionen können Sie ein Speicherfragment zwischen zwei oder mehr Prozessen gemeinsam nutzen, damit diese mit denselben Daten kommunizieren oder zusammenarbeiten. Die Prozesse haben das Speichersegment in ihrem eigenen Adressraum angehängt und können dort wie gewohnt lesen und schreiben. Der Kernel befasst sich mit der Komplexität. Diese Funktionen sind nicht als Shell-Funktionen verfügbar (und wären in einem Shell-Kontext nicht sehr nützlich). Weitere Informationen finden Sie unterman 7 shm_overview
. Der Punkt des Artikels ist, dass kein Programm die Pseudodateien, die gemeinsam genutzte Segmente darstellen, direkt verwalten sollte, sondern stattdessen die entsprechenden Funktionen zum Erstellen, Anhängen und Löschen von gemeinsam genutzten Speichersegmenten verwenden sollte.quelle
/run
könnte sein/run/user/${UID}/
.