¿Dónde establece Linux los valores predeterminados para SHMMAX?

10

Me pregunto dónde se establecen estos valores y a qué valores predeterminados. El mío es actualmente 18446744073692774399. No lo configuré en ningún lugar que pueda ver.

$ cat /proc/sys/kernel/shmmax 
18446744073692774399

$ sysctl kernel.shmmax
kernel.shmmax = 18446744073692774399
Evan Carroll
fuente

Respuestas:

9

La __initfunción ipc_ns_initestablece el valor inicial de shmmaxmediante una llamada shm_init_ns, que lo establece en el valor de la SHMMAXmacro.

La definición de SHMMAXestá en <uapi/linux/shm.h>:

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

En máquinas de 64 bits, esa definición es igual al valor que encontró 18446744073692774399,.


fuente
1

¡Sobre la marcha puedes hacer eco en / proc / sys / kernel / shmmax!

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

Pero la mayoría de la gente edita /etc/sysctl.conf con una línea similar a:

kernel.shmmax=your_new_value_here

Consulte la página del comando man sysctl (8).

Abrazo de la muerte
fuente
Esa no es la pregunta. ¿Dónde se establecen los valores predeterminados? Es decir, si no escribe a shmmax usted mismo, ¿a qué está predeterminado?
Evan Carroll
2
En algunas distribuciones de Linux (RHEL 5 y 6, creo que es una) está configurado en /etc/sysctl.conf. Pero creo que el valor predeterminado se establece en el código del kernel al límite teórico (supongo que es 2 ^ 64 - 1?).
Deathgrip