Onde o Linux define os valores padrão para SHMMAX?

10

Eu só estou querendo saber onde esses valores estão sendo definidos e o que eles padrão? O meu atualmente é 18446744073692774399. Eu não o coloquei em nenhum lugar que eu possa ver.

$ cat /proc/sys/kernel/shmmax 
18446744073692774399

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

Respostas:

9

A __initfunção ipc_ns_initdefine o valor inicial de shmmaxchamando shm_init_ns, que o define como o valor da SHMMAXmacro.

A definição de SHMMAXestá em <uapi/linux/shm.h>:

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

Em máquinas de 64 bits, essa definição é igual ao valor encontrado 18446744073692774399,.


fonte
1

Em tempo real, você pode simplesmente ecoar em / proc / sys / kernel / shmmax!

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

Mas a maioria das pessoas edita o /etc/sysctl.conf com uma linha semelhante a:

kernel.shmmax=your_new_value_here

Consulte a página do manual sysctl (8).

Aperto de morte
fonte
Essa não é a questão. Onde os padrões são definidos? Ou seja, se você não escreve para o shmmax, o que é padrão?
Evan Carroll
2
Em algumas distribuições Linux (RHEL 5 e 6 eu acredito que seja uma), ela é definida em /etc/sysctl.conf. Mas acho que o padrão é definido no código do kernel para o limite teórico (supondo que seja 2 ^ 64 - 1?).
Deathgrip