¿Cuál es la diferencia entre ipcs -lm y cat /sys/proc/kernel/xxxx?

¿Cuál es la diferencia entre ipcs -lm y cat /sys/proc/kernel/xxxx?

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 1as que aparentemente no está incluido /proc.

  • /proc/sys/kernel/shmalllas unidades son páginas, ipcs se convierte max total shared memorya KB.
  • /proc/sys/kernel/shmmaxlas unidades son bytes, ipcs se convierte max seg sizea 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).

información relacionada