`Threads-max` bajo en una instalación de Debian

`Threads-max` bajo en una instalación de Debian

Tengo dos instalaciones diferentes de Debian 10, ambas con 4 núcleos/8 GB de RAM (nómbrelas A y B).

Pero el valor de /proc/sys/kernel/threads-maxes muy diferente:A=63388 y B=7055.

El valor de threads-max debe ser total virtual memory / stack size[1]. El valor del tamaño de la pila y la memoria virtual es el mismo en dos instalaciones ( ulimit -s=8192, ulimit -v=ilimitado), el intercambio está desactivado en ambos sistemas. Además, las otras configuraciones relacionadas con sysctl son similares en dos máquinas virtuales.

Entonces, ¿cuál es la causa de la threads-maxdiferencia entre dos sistemas?

PS1: El valor de cat /proc/zoneinfo | grep spanned | awk '{totalpages=totalpages+$2} END {print totalpages}'es: A=2359295 y B=6029273

PS2: indicadores de arranque del kernel y /etc/initramfs-tools/modulesson los mismos en A/B. A se aprovisiona mediante vmware y B se aprovisiona mediante proxmox.

PS3: encontré que dmesg | grep Memory:difiere en dos VM: (https://github.com/torvalds/linux/blob/v4.19/mm/page_alloc.c#L7060)

A| Memory: 8113684K/8388020K available (10252K kernel code, 1241K rwdata, 3320K rodata, 1592K init, 2272K bss, 274336K reserved, 0K cma-reserved)
B| Memory: 903068K/1048032K available (10252K kernel code, 1242K rwdata, 3328K rodata, 1600K init, 2260K bss, 144964K reserved, 0K cma-reserved)

y 8113684 / 903068 = 63388 / 7055!!

Respuesta1

Desde la fuente de 4.19.170, en el archivo Documentation/sysctl/kernel.txt:

hilos-max

Este valor controla el número máximo de subprocesos que se pueden crear usando fork().

Durante la inicialización, el kernel establece este valor de manera que incluso si se crea el número máximo de subprocesos, las estructuras de subprocesos ocupan solo una parte (1/8) de las páginas RAM disponibles.

El valor mínimo que se puede escribir en threads-max es 20. El valor máximo que se puede escribir en threads-max viene dado por la constante FUTEX_TID_MASK (0x3ffffff). Si se escribe un valor fuera de este rango en threads-max, se produce un error EINVAL.

El valor escrito se compara con las páginas de RAM disponibles. Si las estructuras de subprocesos ocupan demasiado (más de 1/8) de las páginas de RAM disponibles, el máximo de subprocesos se reduce en consecuencia.

Esto significa que puede configurar este parámetro directamente o usando

# sysctl kernel.threads-max=255353

Este valor es diferente en los dos sistemas porque tienen una versión de kernel diferente o el proceso de arranque es diferente o la configuración del sistema es diferente. Además, deberían tener valores diferentes porque, como se indicó, el valor depende de otros dos parámetros configurables y sus sistemas no son idénticos.

información relacionada