usa `/ run / shm` (precedentemente` / dev / shm`) come directory temporanea


9

È buona norma creare una directory /run/shm(precedentemente /dev/shm) e usarla come una directory temporanea per un'applicazione?

Sfondo: sto scrivendo test in scatola nera per un programma che fa un sacco di cose con file e directory. Per ogni test creo molti file e directory e quindi eseguo il programma e quindi creo il set previsto di file e directory e quindi eseguo diff per confrontare. Ora ho circa 40 test e stanno già impiegando più di 2 secondi per essere eseguiti. Sperando di velocizzare le cose, voglio eseguire i test in una directory su una specie di ramdisk.

Facendo delle ricerche su ram disk mi sono imbattuto in una domanda con una risposta affermando che va bene creare una directory /dev/shme usarla come una directory temporanea. Facendo qualche ricerca in più, tuttavia, mi sono imbattuto in una pagina wiki di Debian affermando che è un errore da usare /dev/shmdirettamente. Dovrei usare le shm_*funzioni. Sfortunatamente le shm_*funzioni sembrano non essere disponibili per l'uso in uno script di shell.

Ora sono confuso. Va bene o non usare /run/shm(precedentemente /dev/shm) come una directory temporanea?


Sì, molti utenti si monta anche /tmpnella memoria condivisa.
Eddy_Em

Immagino che /tmpsia più semantico. Se i tuoi utenti hanno RAM sufficiente per l'utilizzo /dev/shmdi file temporanei per velocizzare le cose, allora lo monteranno lì. Ma se non hanno abbastanza RAM, e il montaggio lì rallenta il loro computer costringendo tutti i processi a usare i file di scambio, quindi salveranno la loro RAM per cose più importanti e useranno lo spazio su disco ordinario per il /tmpfilesystem. In altre parole, /tmpè più sintonizzabile.
Jack,

Risposte:


10

Va benissimo usare un po 'di directory /runpurché tu ne abbia i diritti appropriati. In alcune distribuzioni moderne, /tmpesiste già un file system virtuale in memoria o un collegamento simbolico a una directory all'interno /run. Se questo è il tuo caso (puoi verificarlo /etc/fstabo digitarlo mtab), potresti usarlo /tmpcome directory temporanea.

Inoltre, non confonderti con l'articolo di Debian. shm_*le funzioni vengono utilizzate per creare segmenti di memoria condivisa per la comunicazione tra processi. Con queste funzioni, è possibile condividere un frammento di memoria tra due o più processi per farli comunicare o collaborare utilizzando gli stessi dati. I processi hanno il segmento di memoria collegato nel proprio spazio di indirizzi e possono leggere e scrivere lì come al solito. Il kernel si occupa della complessità. Queste funzioni non sono disponibili come funzioni di shell (e non sarebbero molto utili in un contesto di shell). Per ulteriori informazioni, dai un'occhiata a man 7 shm_overview. Il punto dell'articolo è che nessun programma dovrebbe gestire direttamente gli pseudo-file che rappresentano segmenti condivisi, ma invece utilizzare le funzioni appropriate per creare, allegare ed eliminare segmenti di memoria condivisa.


2
Il posto più appropriato qui sotto /runpotrebbe essere /run/user/${UID}/.
Paul Fenney,

1
In effetti, sul mio sistema, pulseaudio e systemd installano lì alcuni file come il file pid. Tuttavia, / tmp sarebbe comunque la mia posizione preferita per i file temporanei.
Lgeorget,

2
@PaulFenney: / run / user / $ UID è anche noto come $ XDG_RUNTIME_DIR
user2394284
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.