jemand kennt, wie gut die folgenden 3 in Bezug auf Geschwindigkeit vergleichen:shmem vs tmpfs vs Mmap
Shared Memory
tmpfs (/ dev/shm)
mmap (/ dev/shm)
Dank!
jemand kennt, wie gut die folgenden 3 in Bezug auf Geschwindigkeit vergleichen:shmem vs tmpfs vs Mmap
Shared Memory
tmpfs (/ dev/shm)
mmap (/ dev/shm)
Dank!
Lesen Sie mehr über tmpfs
here. Folgendes wird aus diesem Artikel kopiert, um die Beziehung zwischen dem gemeinsam genutzten Speicher und insbesondere tmpfs
zu erklären.
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)
Also, wenn Sie tatsächlich POSIX Shared Memory verwenden (was ich vorher benutzt, auch), dann glibc
wird eine Datei an /dev/shm
erstellen, die verwendet wird, um Daten zwischen den Anwendungen zu teilen. Der Dateideskriptor, den es zurückgibt, verweist auf diese Datei, die Sie an mmap
weiterleiten können, um sie anzuweisen, diese Datei in den Speicher abzulegen, wie es auch mit jeder "echten" Datei möglich ist. Die Techniken, die Sie aufgelistet haben, sind somit komplementär. Sie konkurrieren nicht. Tmpfs
ist nur das Dateisystem, das In-Memory-Dateien als Implementierungstechnik für glibc
bereitstellt.
Als Beispiel wird ein Prozess gibt es auf meiner Box läuft zur Zeit ein solches Shared-Memory-Objekt registriert haben:
# pwd
/dev/shm
# ls -lh
insgesamt 76K
-r-------- 1 js js 65M 24. Mai 16:37 pulse-shm-1802989683
#
tmpfs ist die langsamste. Gemeinsamer Speicher und mmap sind die gleiche Geschwindigkeit.
"Es kommt darauf an." Im Allgemeinen sind sie alle im Arbeitsspeicher und abhängig von der Systemimplementierung, so dass die Leistung für die meisten Anwendungen vernachlässigbar und plattformspezifisch ist. Wenn Ihnen die Leistung wirklich wichtig ist, sollten Sie Ihre Anforderungen profilieren und festlegen. Es ist ziemlich trivial, irgendeine dieser Methoden durch eine andere zu ersetzen.
Das heißt, Shared Memory ist am wenigsten intensiv, da keine Dateioperationen beteiligt sind (aber wiederum sehr implementierungsabhängig). Wenn Sie öfters Lots öffnen und schließen (map/unmap) müssen, dann könnte es zu erheblichen Mehrkosten kommen.
Prost!
Sean
Mit "Shared Memory" meinen Sie System V Shared Memory, richtig?
Ich denke, Linux mmap ist eine versteckte tmpfs, wenn Sie dies verwenden, so ist es effektiv das gleiche wie mmaping a tmpfs.
Doing Datei-I/O auf tmpfs eine Strafe haben wird ... meistens (es gibt spezielle Fälle, in denen es sinnvoll sein könnte, wie> 4G in einem 32-Bit-Prozess)
So ist die Geschwindigkeit gleich?Wie werden mmap-geöffnete Dateien mit den üblichen glibc geöffneten Dateien verglichen? – SyRenity