Was ist der Unterschied zwischen ipcs -lm und cat /sys/proc/kernel/xxxx

Was ist der Unterschied zwischen ipcs -lm und cat /sys/proc/kernel/xxxx

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 1as, das anscheinend nicht in enthalten ist /proc.

  • /proc/sys/kernel/shmallEinheiten sind Seiten, IPCs werden max total shared memoryin KB umgerechnet.
  • /proc/sys/kernel/shmmaxEinheiten sind Bytes, IPCs werden max seg sizein 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.)

verwandte Informationen