Domanda

Qualcuno sa bene il seguente 3 confronto in termini di velocità:

  • memoria condivisa

  • tmpfs (/ dev / shm)

  • mmap (/ dev / shm)

Grazie!

È stato utile?

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à.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top