
Ich habe es versucht
ipcs -lm
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 67108864
max total shared memory (kbytes) = 34359738368
min seg size (bytes) = 1
Und
cat /proc/sys/kernel/shmmni
4096
cat /proc/sys/kernel/shmmax
68719476736
cat /proc/sys/kernel/shmall
8589934592
Aus der Dokumentation, die ich gelesen habe, ist mir klar geworden, dass sie dieselben Werte beschreiben, aber dennoch unterschiedlich sind. Können Sie mir bitte erklären, was der Unterschied zwischen ihnen ist?
Prost
Antwort1
Unter Linux liest ipcs die gemeinsam genutzten Speichergrenzen aus /proc
. Nur wenn dies fehlschlägt, wird auf die Verwendung von zurückgegriffen shmctl()
. Und es gibt ein # define SHMMIN 1
as, das anscheinend nicht in enthalten ist /proc
.
/proc/sys/kernel/shmall
Einheiten sind Seiten, IPCs werdenmax total shared memory
in KB umgerechnet./proc/sys/kernel/shmmax
Einheiten sind Bytes, IPCs werdenmax seg size
in KB umgerechnet.
Der Quellcode ist das util-linux-Paket, ein Spiegel davon befindet sich unter https://github.com/karelzak/util-linux/blob/stable/v2.33/sys-utils/ipcs.c
Beachten Sie, dass do_shm() eine Seitengrößeneinheitenkonvertierung durchführt:
uint64_t tmp, pgsz = getpagesize();
tmp = (uint64_t) lim.shmall * pgsz;
(Da der maximale gemeinsam genutzte Gesamtspeicher / shmall = Seitengröße ist, kann man daraus schließen, dass Ihr Computer 4 KB große Seiten hat. Das ist zu erwarten und kommt äußerst häufig vor.)