use `/ run / shm` (anteriormente` / dev / shm`) como directorio temporal

9

¿Es una buena práctica crear un directorio en /run/shm(anteriormente /dev/shm) y usarlo como un directorio temporal para una aplicación?

Antecedentes: estoy escribiendo pruebas de recuadro negro para un programa que hace muchas cosas con archivos y directorios. Para cada prueba creo muchos archivos y directorios y luego ejecuto el programa y luego creo el conjunto esperado de archivos y directorios y luego ejecuto diff para comparar. Ahora tengo alrededor de 40 pruebas y ya están tardando más de 2 segundos en ejecutarse. Con la esperanza de acelerar las cosas, quiero ejecutar las pruebas en un directorio en algún tipo de ramdisk.

Al investigar sobre el disco RAM, me topé con una pregunta con una respuesta que decía que está bien crear un directorio /dev/shmy usarlo como un directorio temporal. Investigando un poco más, sin embargo, me topé con una página wiki de Debian que indica que es un error usar /dev/shmdirectamente. Debería usar las shm_*funciones. Lamentablemente, las shm_*funciones parecen no estar disponibles para su uso en un script de shell.

Ahora estoy confundido. ¿Está bien o no usar /run/shm(anteriormente /dev/shm) como un directorio temporal?

lesmana
fuente
Sí, muchos usuarios también se montan /tmpen la memoria compartida.
Eddy_Em
Me imagino que /tmpes más semántico. Si sus usuarios tienen suficiente memoria RAM para usar /dev/shmarchivos temporales para acelerar las cosas, entonces lo montarán allí. Pero si no tienen suficiente ram, y montarlo allí ralentiza su computadora al obligar a todos los procesos a usar archivos de intercambio, entonces guardarán su ram para cosas más importantes y usarán espacio en disco ordinario para el /tmpsistema de archivos. En otras palabras, /tmpes más sintonizable.
Jack

Respuestas:

10

Está perfectamente bien usar algún directorio /runsiempre que tenga los derechos apropiados sobre él. En algunas distribuciones modernas, /tmpya hay un sistema de archivos virtual en la memoria o un enlace simbólico a un directorio dentro /run. Si este es su caso (puede verificarlo /etc/fstabo escribir mtab), puede usarlo /tmpcomo su directorio temporal.

Además, no se confunda con el artículo de Debian. shm_*Las funciones se utilizan para crear segmentos de memoria compartida para la comunicación entre procesos. Con esas funciones, puede compartir un fragmento de memoria entre dos o más procesos para que se comuniquen o colaboren utilizando los mismos datos. Los procesos tienen el segmento de memoria adjunto en su propio espacio de direcciones y pueden leer y escribir allí como de costumbre. El núcleo se ocupa de la complejidad. Esas funciones no están disponibles como funciones de shell (y no serían muy útiles en un contexto de shell). Para más información, eche un vistazo man 7 shm_overview. El objetivo del artículo es que ningún programa debe administrar directamente los pseudoarchivos que representan segmentos compartidos, sino utilizar las funciones apropiadas para crear, adjuntar y eliminar segmentos de memoria compartida.

lgeorget
fuente
2
El lugar más apropiado a continuación /runpodría ser /run/user/${UID}/.
Paul Fenney
1
De hecho, en mi sistema, pulseaudio y systemd instalan algunos archivos como el archivo pid allí. Sin embargo, / tmp aún sería mi ubicación preferida para archivos temporales.
lgeorget
2
@PaulFenney: / run / user / $ UID también se conoce como $ XDG_RUNTIME_DIR
user2394284