
Esta preguntaconsulta si usar /dev/shm
o /tmp
. Dentro de las respuestas dadas, surge la impresión general de que /dev/shm
es más rápido /tmp
ya que escribe en la RAM en lugar de en el disco. Una búsqueda en las webs sobre este tema confirma vagamente esta impresión. Desafortunadamente, no puedo encontrar una fuente confiable que muestre sin duda cuál tiene mejor rendimiento, por ejemplo, mediante medición.
Por ejemplo, esta cita de la primera respuesta:
Dado que la RAM es significativamente más rápida que el almacenamiento en disco, puedeuse /dev/shm en lugar de /tmp para aumentar el rendimiento, si su proceso requiere muchas E/S y utiliza ampliamente archivos temporales.
El artículo vinculado dice:
/dev/shm no es más que una implementación del concepto tradicional de memoria compartida. Es un medio eficaz para pasar datos entre programas. Un programa creará una porción de memoria a la que otros procesos (si están permitidos) podrán acceder. Esto acelerará las cosas en Linux.
Esto no confirma la respuesta que cita este sitio web ni compara el rendimiento de /dev/shm
vs. /tmp
Es más bien una mera descripción de lo que /dev/shm
es.
De todos modos, hay unocomentarioen la primera respuesta, indicando (a partir de hoy):
No hay ningún aumento de rendimiento al usar /dev/shm. /dev/shm es memoria (tmpfs) respaldada por el disco (swap). /var/tmp es memoria (caché de disco) respaldada por el disco (sistema de archivos en disco). En la práctica, el rendimiento es más o menos el mismo (tmpfs tiene una ligera ventaja, pero no la suficiente como para importar). /tmp puede ser tmpfs o no dependiendo de cómo lo haya configurado el administrador. No hay ninguna buena razón para usar /dev/shm en sus scripts.
Como este comentario sigue sin ser cuestionado y otras respuestas y comentarios sugieren lo contrario, la pregunta sigue siendo si /dev/shm
es más rápido /tmp
o no.
NB: Soy muy consciente de que lo más probable es que la respuesta sea "depende". Hayuna pregunta aquí en SU:SEsobre qué sistema de archivos usar /tmp
. También hay unapregunta relacionada en SO.
Respuesta1
Cuando usas /dev/shm
no estás escribiendo directamente RAM. Es untmpfssistema de archivos,tmpfsmantiene todos los archivos en la memoria virtual (un disco como extensión de la RAM).
Dekernel.org:
Si lo compara con ramfs (que fue la plantilla para crear tmpfs), obtiene intercambio y verificación de límites. Otra cosa similar es el disco RAM (/dev/ram*), que simula un disco duro de tamaño fijo en una RAM física, donde hay que crear un sistema de archivos normal encima. Los discos Ram no se pueden intercambiar y no tienes la posibilidad de cambiar su tamaño.
Dado que tmpfs vive completamente en la caché de la página y en el intercambio, todas las páginas tmpfs se mostrarán como "Shmem" en /proc/meminfo y "Shared" en free(1). Observe que estos contadores también incluyen memoria compartida (shmem, consulte ipcs(1)). La forma más fiable de obtener el recuento es utilizar df(1) y du(1).
ramfses un sistema de archivos basado en RAM:
Ramfs es un sistema de archivos muy simple que exporta los mecanismos de almacenamiento en caché del disco de Linux (el caché de páginas y el caché dentry) como un sistema de archivos basado en RAM de tamaño dinámicamente redimensionable.
Por lo tanto, respondiendo a su pregunta, no hay un aumento en el rendimiento ya que ambos (/dev/shm y /tmp) están usando el disco.
Puedes verificar cuando escribes en RAM con este ejemplo:
mkdir /mnt/ram
mount -t ramfs -o size=2g ramfs /mnt/ram
# Create random file of 2GB
dd if=/dev/urandom bs=1024 count=2000000 of=/tmp/testfile conv=notrunc
# Check ram usage
free
cp /tmp/testfile /mnt/ram
# Check ram usage again
free