Shmem vs tmpfs vs mmap [chiusa]
Domanda
Qualcuno sa bene il seguente 3 confronto in termini di velocità:
-
memoria condivisa
-
tmpfs (/ dev / shm)
-
mmap (/ dev / shm)
Grazie!
Soluzione
Leggi tmpfs
qui . Di seguito viene copiato da tale articolo, che spiega la relazione tra memoria condivisa e tmpfs
in particolare.
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)
Quindi, quando si utilizzano effettivamente POSIX memoria condivisa (che ho usato prima, anche), quindi glibc
creerà un file alla /dev/shm
, che viene utilizzato per condividere i dati tra le applicazioni. Il file-descrittore restituisce farà riferimento a quel file, che è possibile passare a mmap
per dirgli di mappare il file in memoria, come si può fare con qualsiasi file "reale" sia. Le tecniche che hai elencato sono quindi complementari. Essi non sono in competizione. Tmpfs
è solo il file system che fornisce i file in memoria come una tecnica di implementazione per glibc
.
Per fare un esempio, c'è un processo in esecuzione sulla mia macchina al momento aver registrato come un oggetto di memoria condivisa:
# pwd
/dev/shm
# ls -lh
insgesamt 76K
-r-------- 1 js js 65M 24. Mai 16:37 pulse-shm-1802989683
#
Altri suggerimenti
"Dipende". In generale, sono tutti in memoria e subordinato implementazione del sistema in modo che il rendimento sarà trascurabile e per gli usi più specifico della piattaforma. Se davvero a cuore le prestazioni, si dovrebbe profilo e determinare le vostre esigenze. E 'piuttosto banale per sostituire uno qualsiasi di questi metodi con un altro.
Detto, memoria condivisa è il meno intensa quanto non vi sono operazioni di file coinvolti (ma ancora, molto implementazione-dipendente). Se è necessario aprire e chiudere (mappa / unmap) più volte, un sacco di volte, allora potrebbe essere un overhead significativo.
Cheers!
Sean
Per "Memoria condivisa" intendi System V memoria dinamica, giusto?
Credo che Linux sia un mmap tmpfs nascosti quando si utilizza questo, quindi è effettivamente la stessa mmaping un tmpfs.
In questo file di I / O su tmpfs sta per avere un calcio di rigore ... per lo più (ci sono casi speciali in cui potrebbe avere senso, come ad esempio> 4G in un processo a 32 bit)
tmpfs è il più lento. Memoria condivisa e mmap sono la stessa velocità.