¿Cómo se calcula la puntuación kernel oom?

12

Busqué en Google y no pude encontrar nada que explicara cómo proc/<pid>/oom_scorese calcula el puntaje . ¿Por qué usar esta puntuación en lugar de solo usar la memoria total utilizada?

James Kingsbery
fuente

Respuestas:

18

Consulte el artículo de Goldwyn Rodrigues de 2009 para la implementación en ese momento, el artículo de Jonathan Corbet de 2010 para lo que creo que es el comportamiento actual y el artículo de Jonathan Corbet de 2013 para obtener ideas sobre cambios futuros.

Del artículo de 2010:

En el conjunto de parches de David, las viejas heurísticas de maldad () han desaparecido casi por completo. En cambio, el cálculo se convierte en una simple pregunta de qué porcentaje de la memoria disponible está siendo utilizada por el proceso. Si el sistema en su conjunto tiene poca memoria, entonces "memoria disponible" es la suma de toda la RAM y el espacio de intercambio disponible para el sistema. Si, en cambio, la situación de OOM se debe al agotamiento de la memoria permitida para un grupo cpuset / control dado, entonces "memoria disponible" es la cantidad total asignada a ese grupo de control. Se realiza un cálculo similar si se han excedido los límites impuestos por una política de memoria. En cada caso, el uso de memoria del proceso se considera la suma de su conjunto residente (el número de páginas RAM que está usando) y su uso de intercambio.

Como resultado, este cálculo produce un número de porcentaje por diez; un proceso que utiliza cada byte de memoria disponible tendrá una puntuación de 1000, mientras que un proceso que no utiliza memoria obtendrá una puntuación de cero. Hay muy pocos ajustes heurísticos a este puntaje, pero el código aún resta una pequeña cantidad (30) del puntaje de los procesos propiedad de la raíz en la noción de que son un poco más valiosos que los procesos propiedad del usuario.

Otro ajuste que se aplica es agregar el valor almacenado en la variable oom_score_adj de cada proceso, que se puede ajustar a través de / proc. Esta perilla permite el ajuste del atractivo de cada proceso para el asesino de OOM en el espacio del usuario; establecerlo en -1000 deshabilitará las muertes de OOM por completo, mientras que establecerlo en +1000 es el equivalente de pintar un objetivo grande en el proceso asociado.

Sciurus
fuente
¿Es posible que todos los procesos tengan una puntuación de 0 oom? Actualmente arrancar de un CD en vivo resulta en esto.
CMCDragonkai