Verwenden Sie `/ run / shm` (früher` / dev / shm`) als temporäres Verzeichnis

9

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/shmund 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/shmdirekt 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?

Lesmana
quelle
Ja, viele Benutzer werden auch /tmpim gemeinsam genutzten Speicher bereitgestellt .
Eddy_Em
Ich würde mir vorstellen, dass /tmpdas semantischer ist. Wenn Ihre Benutzer über genügend RAM verfügen, /dev/shmum 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 /tmpDateisystem. Mit anderen Worten, /tmpist besser einstellbar.
Jack

Antworten:

10

Es ist vollkommen in Ordnung, ein Verzeichnis zu verwenden, /runsolange Sie über die entsprechenden Rechte verfügen. In einigen modernen Distributionen /tmpbefindet 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/fstaboder eingeben mtab), können Sie es /tmpals 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 unter man 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.

lgeorget
quelle
2
Der am besten geeignete Ort unten /runkönnte sein /run/user/${UID}/.
Paul Fenney
1
In der Tat installieren pulseaudio und systemd auf meinem System einige Dateien wie die dortige PID-Datei. / Tmp wäre jedoch immer noch mein bevorzugter Speicherort für temporäre Dateien.
Lgeorget
2
@PaulFenney: / run / user / $ UID ist auch bekannt als $ XDG_RUNTIME_DIR
user2394284