Est-ce que quelqu'un sait comment les éléments suivants 3 comparer en termes de vitesse:SHMEM vs tmpfs vs mmap
mémoire partagée
tmpfs (/ dev/SHM)
mmap (/ dev/shm)
Merci!
Est-ce que quelqu'un sait comment les éléments suivants 3 comparer en termes de vitesse:SHMEM vs tmpfs vs mmap
mémoire partagée
tmpfs (/ dev/SHM)
mmap (/ dev/shm)
Merci!
En savoir plus sur tmpfs
here. Ce qui suit est copié à partir de cet article, en expliquant la relation entre la mémoire partagée et tmpfs
en particulier.
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)
Ainsi, lorsque vous utilisez réellement la mémoire partagée POSIX (que j'ai utilisé avant, aussi), puis glibc
va créer un fichier à /dev/shm
, qui est utilisé pour partager des données entre les applications. Le descripteur de fichier qu'il renvoie se référera à ce fichier, que vous pouvez passer à mmap
pour lui indiquer de mapper ce fichier en mémoire, comme il peut le faire avec n'importe quel fichier "réel". Les techniques que vous avez énumérées sont donc complémentaires. Ils ne sont pas en compétition. Tmpfs
est juste le système de fichiers qui fournit des fichiers en mémoire comme une technique d'implémentation pour glibc
.
À titre d'exemple, il y a un processus en cours d'exécution sur ma boîte actuellement avoir enregistré un tel objet de mémoire partagée:
# pwd
/dev/shm
# ls -lh
insgesamt 76K
-r-------- 1 js js 65M 24. Mai 16:37 pulse-shm-1802989683
#
tmpfs est le plus lent. La mémoire partagée et mmap sont la même vitesse.
"Cela dépend." En général, ils sont tous en mémoire et dépendent de la mise en œuvre du système, de sorte que les performances seront négligeables et spécifiques à la plate-forme pour la plupart des utilisations. Si vous vous souciez vraiment de la performance, vous devez définir et définir vos besoins. C'est assez trivial de remplacer l'une de ces méthodes par une autre. Cela dit, la mémoire partagée est la moins intensive car il n'y a pas d'opérations de fichiers impliquées (mais encore une fois, très dépendante de l'implémentation). Si vous avez besoin d'ouvrir et de fermer (map/unmap) à plusieurs reprises, lots de fois, alors cela pourrait être un surcoût significatif.
À la votre!
Sean
Par "mémoire partagée", vous voulez dire la mémoire partagée System V, n'est-ce pas?
Je pense que Linux mmap est un tmpfs caché quand vous l'utilisez, donc c'est exactement le même que mmaping un tmpfs.
fichier Faire E/S tmpfs va avoir une pénalité ... la plupart du temps (il y a des cas particuliers où il peut être une solution, comme> 4G dans un processus 32 bits)
Donc, la vitesse est la même?Comment les fichiers mmap-ouverts sont comparés aux fichiers ouverts glibc habituels? – SyRenity