
Lo intenté
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
y
cat /proc/sys/kernel/shmmni
4096
cat /proc/sys/kernel/shmmax
68719476736
cat /proc/sys/kernel/shmall
8589934592
Por la documentación que leí, entendí que describen los mismos valores pero son diferentes. ¿Puedes explicarme cuál es la diferencia entre ellos?
Salud
Respuesta1
En Linux, ipcs lee los límites de memoria compartida de /proc
. Sólo si eso falla se vuelve a utilizar shmctl()
. Y hay un # define SHMMIN 1
as que aparentemente no está incluido /proc
.
/proc/sys/kernel/shmall
las unidades son páginas, ipcs se conviertemax total shared memory
a KB./proc/sys/kernel/shmmax
las unidades son bytes, ipcs se conviertemax seg size
a KB.
El código fuente es el paquete util-linux, uno de los cuales se encuentra en https://github.com/karelzak/util-linux/blob/stable/v2.33/sys-utils/ipcs.c
Observe que do_shm() realiza una conversión de unidades de tamaño de página:
uint64_t tmp, pgsz = getpagesize();
tmp = (uint64_t) lim.shmall * pgsz;
(Debido a que la memoria total compartida máxima/shmall = tamaño de página, podemos saber que su máquina tiene páginas de 4 KB. Como era de esperar, eso es extremadamente común).