Qual é a diferença entre ipcs -lm e cat /sys/proc/kernel/xxxx

Qual é a diferença entre ipcs -lm e cat /sys/proc/kernel/xxxx

tentei

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

e

cat /proc/sys/kernel/shmmni
4096
cat /proc/sys/kernel/shmmax
68719476736
cat /proc/sys/kernel/shmall
8589934592

Pela documentação que li, entendi que eles estão descrevendo os mesmos valores, mas são diferentes. Você pode me explicar qual é a diferença entre eles?

Saúde

Responder1

No Linux, o ipcs lê os limites de memória compartilhada do /proc. Somente se isso falhar, ele voltará a usar shmctl(). E há um # define SHMMIN 1as que aparentemente não está no arquivo /proc.

  • /proc/sys/kernel/shmallunidades são páginas, ipcs converte max total shared memoryem KB.
  • /proc/sys/kernel/shmmaxunidades são bytes, ipcs converte max seg sizeem KB.

O código fonte é o pacote util-linux, um espelho do qual está em https://github.com/karelzak/util-linux/blob/stable/v2.33/sys-utils/ipcs.c
Observe que do_shm() faz uma conversão de unidade de tamanho de página:

uint64_t tmp, pgsz = getpagesize();

tmp = (uint64_t) lim.shmall * pgsz;

(Como o total máximo de memória compartilhada / shmall = tamanho da página, pode-se dizer que sua máquina tem páginas de 4 KB. Esperado, isso é extremamente comum.)

informação relacionada