В чем разница между 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

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

Ура

2
задан 25 July 2019 в 14:11
1 ответ

В Linux ipcs считывает ограничения общей памяти из / proc . Только в случае неудачи он возвращается к использованию shmctl () . И есть # define SHMMIN 1 , поскольку, очевидно, его нет в / proc .

  • / proc / sys / kernel / shmall единицы - это страницы, ipcs конвертирует максимальный общий объем разделяемой памяти в КБ.
  • / proc / sys / kernel / shmmax единицы - байты, ipcs преобразует максимальный размер сегмента в КБ.

Исходный код - это пакет 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 КБ. Ожидается, что это очень часто.)

1
ответ дан 3 December 2019 в 12:29

Теги

Похожие вопросы