imitatio creatio co we łbie piszczy

14Sep/07Off

Sekretów zabójcy część druga

bluszcz napisał ciekawy opis kodu linuksowego OOM killera.

Zaciekawiony tematem pokopałem trochę i okazuje się co następuje:

W jednej ze starszych wersji jądra można było go w ogóle wyłączyć.

W 2.6.x z tego co widzę nie ma takiej możliwości.

Za to można wyłączać oom killer per proces!!!

Są sobie albowiem (przynajmniej w 2.6.21 które akurat mam pod ręką) pseudopliki:

/proc/<pid>/oom_score -- tu można podejrzeć aktualny badness score dla procesu,
oraz
/proc/<pid>/oom_adj - tu można sterować wysokością badness score :)

Dozwolone wartości to liczby całkowite z zakresu [-17,+15]. Wysoka wartość to większe prawdopodobieństwo zabicia.


/*
* Adjust the score by oomkilladj.
*/
if (p->oomkilladj) {
if (p->oomkilladj > 0)
points <<= p->oomkilladj;
else
points >>= -(p->oomkilladj);
}

Wartość -17 jest magiczna o tyle że blokuje w ogóle możliwość zabicia procesu przez oom killer.

if (p->oomkilladj == OOM_DISABLE)
continue;

Zatem nasz zabójca ma słaby punkt.

Stosować z umiarem!