¿A dónde va la memoria restante de vm.overcommit_ratio?

10

Si desactivo el exceso de memoria configurando vm.overcommit_memorya 2, por defecto el sistema permitirá asignar la memoria hasta la dimensión de intercambio + 50% de la memoria física, como se explica aquí .

Puedo cambiar la relación modificando el vm.overcommit_ratioparámetro. Digamos que lo configuré al 80%, por lo que se puede usar el 80% de la memoria física.

Mi pregunta es:

  • ¿Qué hará el sistema con el 20% restante?
  • ¿Por qué se requiere este parámetro en primer lugar?
  • ¿Por qué no siempre debería configurarlo al 100%?
Dan Tumaykin
fuente

Respuestas:

6

¿Qué hará el sistema con el 20% restante?

El kernel utilizará la memoria física restante para sus propios fines (estructuras internas, tablas, buffers, cachés, lo que sea). La configuración de sobrecompromiso de memoria maneja las reservas de memoria virtual de la aplicación del usuario, el núcleo no usa memoria virtual sino física.

¿Por qué se requiere este parámetro en primer lugar?

El overcommit_ratioparámetro es una opción de implementación diseñada para evitar que las aplicaciones reserven más memoria virtual de la que razonablemente estará disponible para ellos en el futuro, es decir, cuando realmente accedan a la memoria (o al menos lo intenten).

La configuración overcommit_ratioal 50% ha sido considerada un valor predeterminado razonable por los desarrolladores del kernel de Linux. Asume que el núcleo nunca necesitará usar más del 50% de la RAM física. Su kilometraje puede variar, la razón por la cual es sintonizable.

¿Por qué no siempre debería configurarlo al 100%?

Establecerlo al 100% (o cualquier valor "demasiado alto") no deshabilita de manera confiable el exceso de compromiso porque no puede suponer que el kernel usará 0% (o demasiado poco) de RAM.

No evitará que las aplicaciones se bloqueen, ya que el núcleo podría adelantarse a toda la memoria física que requiere.

jlliagre
fuente
Si el kernel puede tomar toda la memoria que necesita de todos modos, ¿cuál es el punto de exponer este parámetro (o incluso crearlo)?
Dan Tumaykin
¿Existe algún documento oficial donde esos parámetros se explican en detalle? Además de kernel.org/doc/Documentation/vm/overcommit-accounting , falta alguna referencia a la memoria del kernel allí.
Dan Tumaykin
1
Todavía no he encontrado documentación que explique con suficientes detalles lo que se tiene en cuenta con precisión al referirse al "compromiso de espacio total de direcciones". Sin embargo, el hecho de que el documento que proporciona un enlace a los estados "en la mayoría de las situaciones significa que no se eliminará un proceso ..." es suficiente para confirmar que parte de la memoria se puede utilizar en otro lugar, y el consumidor obvio para esta memoria es el núcleo.
jlliagre
2

Establecer la proporción al 100% no reservará espacio para páginas respaldadas por archivos o asignaciones en el núcleo, como código del núcleo, búferes de red, etc.

Las estructuras en el núcleo se asignarán independientemente, lo que provocará un exceso de compromiso. Generalmente están limitados individualmente (por ejemplo, hay una configuración para los buffers de red). No creo que haya un límite general del 50%, aunque un límite general es algo en lo que se ha trabajado con el propósito de alojar contenedores.

Las páginas respaldadas por archivos son donde normalmente ejecuta el código de espacio de usuario, por lo que también necesita espacio para eso.

sourcejedi
fuente