2009-05-24 13 views
9

¿Alguien sabe qué tan bien lo siguiente 3 comparar en términos de velocidad:shmem vs tmpfs vs mmap

  • memoria compartida

  • tmpfs (/ dev/SHM)

  • mmap (/ dev/shm)

¡Gracias!

Respuesta

8

leer sobre tmpfshere. Lo siguiente se copia de ese artículo, explicando la relación entre la memoria compartida y tmpfs en particular.

1) There is always a kernel internal mount which you will not see at 
    all. This is used for shared anonymous mappings and SYSV shared 
    memory. 

    This mount does not depend on CONFIG_TMPFS. If CONFIG_TMPFS is not 
    set the user visible part of tmpfs is not build, but the internal 
    mechanisms are always present. 

2) glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for 
    POSIX shared memory (shm_open, shm_unlink). Adding the following 
    line to /etc/fstab should take care of this: 

    tmpfs /dev/shm tmpfs defaults 0 0 

    Remember to create the directory that you intend to mount tmpfs on 
    if necessary (/dev/shm is automagically created if you use devfs). 

    This mount is _not_ needed for SYSV shared memory. The internal 
    mount is used for that. (In the 2.3 kernel versions it was 
    necessary to mount the predecessor of tmpfs (shm fs) to use SYSV 
    shared memory) 

lo tanto, cuando en realidad se utiliza la memoria compartida POSIX (que he usado antes, también), entonces glibc creará un archivo en /dev/shm, que se utiliza para compartir datos entre las aplicaciones. El descriptor de archivo que devuelve hará referencia a ese archivo, que puede pasar al mmap para indicarle que asigne ese archivo en la memoria, como también puede hacerlo con cualquier archivo "real". Las técnicas que enumeró son así complementarias. Ellos no están compitiendo. Tmpfs es solo el sistema de archivos que proporciona archivos en memoria como una técnica de implementación para glibc.

A modo de ejemplo, no es un proceso que se ejecuta en mi caja Actualmente haber registrado un objeto de memoria compartida como:

# pwd 
/dev/shm 
# ls -lh 
insgesamt 76K 
-r-------- 1 js js 65M 24. Mai 16:37 pulse-shm-1802989683 
# 
+0

¿Entonces la velocidad es la misma?¿Cómo se comparan los archivos mmap-opened con los archivos abiertos glibc habituales? – SyRenity

-1

tmpfs es el más lento. La memoria compartida y mmap tienen la misma velocidad.

+2

podría explicar por favor ... Gracias – hhafez

+1

De hecho, parece que en realidad tmpfs poderes compartidos ¿memoria? Y supongo que mmap solo es rápido cuando se usa el tmpfs como transporte subyacente. – SyRenity

2

"Depende". En general, todos están en la memoria y dependen de la implementación del sistema, por lo que el rendimiento será insignificante y específico de la plataforma para la mayoría de los usos. Si realmente te preocupa el rendimiento, debes perfilar y determinar tus requisitos. Es bastante trivial reemplazar cualquiera de esos métodos con otro.

Dicho esto, la memoria compartida es la menos intensiva ya que no hay operaciones de archivos involucradas (pero de nuevo, depende de la implementación). Si necesita abrir y cerrar (asignar/desasignar) varias veces, lotes de veces, podría ser una sobrecarga significativa.

¡Salud!
Sean

1

Por "memoria compartida" se refiere a la memoria compartida del sistema V, ¿verdad?

Creo que Linux mmap es un tmpfs oculto cuando usas esto, así que es efectivamente lo mismo que mmaping a tmpfs.

Haciendo archivo de E/S en tmpfs va a tener una pena ... sobre todo (hay casos especiales en los que podría tener sentido, como> 4G en un proceso de 32 bits)

+0

¿Cómo es eso? Si mmap usa memoria compartida, ¿el rendimiento debería ser el mismo? – SyRenity

+0

@SyRenity read() y amigos implican copiar de la memoria caché del buffer del kernel. mmap da acceso directo a las páginas en la memoria caché del búfer. Entonces mmap es típicamente más rápido. – Eloff

Cuestiones relacionadas