Где Linux устанавливает значения по умолчанию для SHMMAX?

10

Мне просто интересно, где эти значения устанавливаются и что они по умолчанию? Мой в настоящее время 18446744073692774399. Я не установил его нигде, что я могу видеть.

$ cat /proc/sys/kernel/shmmax 
18446744073692774399

$ sysctl kernel.shmmax
kernel.shmmax = 18446744073692774399
Эван Кэрролл
источник

Ответы:

9

__initФункция ipc_ns_initустанавливает начальное значение shmmaxпутем вызова shm_init_ns, который устанавливает его к значению SHMMAXмакро.

Определение SHMMAXнаходится в <uapi/linux/shm.h>:

#define SHMMAX (ULONG_MAX - (1UL << 24)) /* max shared seg size (bytes) */

На 64-битных машинах это определение соответствует найденному значению 18446744073692774399.


источник
1

На лету вы можете просто перейти в / proc / sys / kernel / shmmax!

# echo 20446744073692774399 > /proc/sys/kernel/shmmax

Но большинство людей редактируют /etc/sysctl.conf с помощью строки, похожей на:

kernel.shmmax=your_new_value_here

Смотрите справочную страницу по sysctl (8).

Мертвая хватка
источник
Это не вопрос. Где установлены значения по умолчанию? То есть, если вы не пишете в shmmax самостоятельно, что это по умолчанию?
Эван Кэрролл
2
В некоторых дистрибутивах Linux (RHEL 5 & 6, я считаю, один) он установлен в /etc/sysctl.conf. Но я думаю, что в коде ядра по умолчанию установлено теоретическое ограничение (предположим, что это 2 ^ 64 - 1?).
Смертельная хватка