Como é calculada a pontuação do kernel oom?

12

Observou o Google e não encontrou nada que explicasse como a pontuação proc/<pid>/oom_scoreé calculada. Por que usar essa pontuação em vez de usar apenas a memória total usada?

James Kingsbery
fonte

Respostas:

18

Veja o artigo de Goldwyn Rodrigues de 2009 para a implementação naquele momento, o artigo de Jonathan Corbet de 2010 para o que acredito ser o comportamento atual e o artigo de Jonathan Corbet de 2013 para idéias sobre mudanças futuras.

Do artigo de 2010:

No conjunto de patches de David, as antigas heurísticas badness () desapareceram quase inteiramente. Em vez disso, o cálculo se transforma em uma pergunta simples de qual porcentagem da memória disponível está sendo usada pelo processo. Se o sistema como um todo estiver com pouca memória, "memória disponível" será a soma de toda a RAM e espaço de troca disponível para o sistema. Se, em vez disso, a situação do OOM for causada pelo esgotamento da memória permitida para um determinado grupo de cpuset / controle, "memória disponível" será a quantidade total alocada para esse grupo de controle. Um cálculo semelhante é feito se os limites impostos por uma política de memória forem excedidos. Em cada caso, o uso de memória do processo é considerado a soma de seu conjunto residente (o número de páginas de RAM que ele está usando) e seu uso de troca.

Este cálculo produz um número de porcentagem-dez-dez como resultado; um processo que está usando cada byte da memória disponível terá uma pontuação de 1000, enquanto um processo que não usa memória obterá uma pontuação zero. Existem muito poucos ajustes heurísticos nessa pontuação, mas o código ainda subtrai uma pequena quantia (30) da pontuação dos processos de propriedade da raiz, na noção de que eles são um pouco mais valiosos do que os processos de propriedade do usuário.

Um outro ajuste aplicado é adicionar o valor armazenado na variável oom_score_adj de cada processo, que pode ser ajustada via / proc. Esse botão permite o ajuste da atratividade de cada processo ao killer da OOM no espaço do usuário; defini-lo como -1000 desativará completamente as mortes por OOM, enquanto defini-lo como +1000 é o equivalente a pintar um grande alvo no processo associado.

sciurus
fonte
É possível que todos os processos tenham uma pontuação de 0 oom? Atualmente, a inicialização de um CD ao vivo resulta nisso.
CMDragonkai