В чем разница между ipcs -lm и cat /sys/proc/kernel/xxxx

В чем разница между ipcs -lm и cat /sys/proc/kernel/xxxx

Я пытался

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

Из прочитанной мной документации я понял, что они описывают одни и те же значения, но они разные. Можете ли вы объяснить мне, в чем разница между ними?

Ваше здоровье

решение1

В Linux ipcs считывает ограничения разделяемой памяти из /proc. Только если это не удается, он возвращается к использованию shmctl(). И, по-видимому, есть # define SHMMIN 1as, которого нет в /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 КБ. Как и ожидалось, это встречается чрезвычайно часто.)

Связанный контент