
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 1
as que aparentemente não está no arquivo /proc
.
/proc/sys/kernel/shmall
unidades são páginas, ipcs convertemax total shared memory
em KB./proc/sys/kernel/shmmax
unidades são bytes, ipcs convertemax seg size
em 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.)