¿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/shm
y 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/shm
directamente. 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?
fuente
/tmp
en la memoria compartida./tmp
es más semántico. Si sus usuarios tienen suficiente memoria RAM para usar/dev/shm
archivos 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/tmp
sistema de archivos. En otras palabras,/tmp
es más sintonizable.Respuestas:
Está perfectamente bien usar algún directorio
/run
siempre que tenga los derechos apropiados sobre él. En algunas distribuciones modernas,/tmp
ya 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/fstab
o escribirmtab
), puede usarlo/tmp
como 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 vistazoman 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.fuente
/run
podría ser/run/user/${UID}/
.