Я попытался
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
и
cat /proc/sys/kernel/shmmni
4096
cat /proc/sys/kernel/shmmax
68719476736
cat /proc/sys/kernel/shmall
8589934592
Из документации, которую я прочитал, я понял, что они описывают одни и те же значения, но они разные. Не могли бы вы объяснить мне, в чем разница между ними?
Ура
В Linux ipcs считывает ограничения общей памяти из /proc
. Только если это не поможет, он вернется к использованию shmctl()
. И есть # define SHMMIN 1
как очевидно это не в /proc
.
/proc/sys/kernel/shmall
единицы - страницы, ipcs конвертирует max total shared memory
в КБ. /proc/sys/kernel/shmmax
единицы - байты, ipcs преобразует max seg size
в КБ.Исходный код - это пакет util-linux, одно зеркало которого находится по адресу https://github.com/karelzak/util-linux/blob/stable/v2.33/sys-utils/ipcs.c
Обратите внимание, что do_shm () выполняет преобразование единиц размера страницы:
uint64_t tmp, pgsz = getpagesize();
tmp = (uint64_t) lim.shmall * pgsz;
(Поскольку максимальный общий объем разделяемой памяти / shmall = размер страницы, можно сказать, что на вашем компьютере есть страницы размером 4 КБ. Ожидается, что это очень часто.)