Fordítási időben választható OOM killer

Címkék

Mint ismeretes, szeptember elején eltávolításra került a 2.4-es kernelből a régi OOM killer, és helyére az Andrea Arcangeli által alkotott új megoldás került.

2.4.23-pre VM visszafejlődés? Marcelo Tosatti - a 2.4-es Linux kernel jelenlegi karbantartója - ezzel a címmel küldött levelet az LKML-re, amelyben az alábbiakat írta:

Olyan levelet kapott, amelyben a felhasználó azt írta, hogy egy ``gzip -dc file | less" (280MB-os file) parancsot futtatott és a ``less'' parancsot kilőtte (kill) az OOM killer. A felhasználónak nem volt swap-je. Marcelo arra kérte, hogy állítson be némi swap területet. A felhasználó megfogadta a tanácsot, és megoldódott a problémája. De közben felmerült egy másik probléma is:

A 2.4.22-es kernel a ``less'' parancsot egyszerűen ``kill''-elte, viszont a 2.4.23-pre kernel az alábbit művelte:>> And yes, the app was killed:

> >

> > __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)

> > VM: killing process named

> > __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)

> > VM: killing process gpm

> > __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)

> > VM: killing process sendmail

> > __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)

> > VM: killing process less

Vagyis ahelyett, hogy a kernel a csak a ``less'' parancsot ölte volna meg, elkezdte kilődözni a többi programot is. Ráadásul úgy, hogy nem a legtöbb memóriát felhasználó processzt lőtte ki először (ahogy az logikus lett volna, és ahogy a régi OOM killer tette), hanem olyan kisméretű programokat vett előbbre, mint a ``gpm'', ``sendmail'', stb.

Marcelo ekkor azt kérdezte, hogy most mi helyzet. Vissza kell térni a régi OOM killerhez?

Erre Tvrtko A. UrAiulin egy patchet küldött, amely lehetővé teszi, hogy az OOM killer-t fordítási időben lehessen kiválasztani. Ezzel lehetővé válik az, hogy igény szerint használható legyen vagy a régi OOM killer vagy az -AA féle újabb implementáció.

A thread itt kezdődik.

Hozzászólások

Biztos csak mert lusta vagyok, de nem sikerult megertenem hogy miert tettek ki az OOM killert. Valaki tud egy rovid osszefoglalora egy linket?

Koszi,

Laci

Ezzel nem értek egyet, a OOM nem *csak* a memóriafoglalás alapján határozza el hogy mit öljön meg.

Sok egyéb számítás eredménye:

ez azt jelenti hogy a foglalt memória mérete minél nagyobb annál kisebb(!) a valószinűsége hogy megöli, ugyanez igaz futási időre minél több ideje fut annál kisebb....

Ha a folyamatot root futtatja, az szintén csökkenti az esélyt (szemben a mezei userek processeivel)

Még sok egyéb tényező szerepel, de ennyit tudok fejből.

>a OOM nem *csak* a memóriafoglalás alapján

ki allitotta ennek az ellenkezojet?

Ebben az esetben a ``less''-t kellett volna elobb kinyirnia, mint mondjuk a gpm-et. Hogy miert?

1.) mert nem az init (pid 1)

2.) mert nem letfontossagu processz (mint mondjuk a k-val kezdodo processzer pl. kswapd, kblockd, ksoftirqd, stb.)

3.) mert ez volt a felsoroltak kozul a legnagyobb memoria fogyaszto

>3.) mert ez volt a felsoroltak kozul a legnagyobb memoria fogyaszto

Egyedül ezzel nem értek egyet.

Ugyanis a következő elmélet szerint müködik az OOM:

minél kevésbé zavarja a munkát.

Azaz (ez a hozzáállás):

Ha egy program több memóriát fogyaszt akkor kevésbé öljük meg!!!!!!!!!!!!

Ha egy program több processzor időt használt eddig mint a többi szintén békén hagyjuk.

Miért is??

A program valószinűleg azért használ sok memóriát, mert szüksége van rá. Gondolhatunk a Postgresql adatbázis kezelőre. Van pl 1 Mb szabad memória és sz@r lenne ha az OOM a Postgrest ölné meg ahelyett a perl script helyett amit most indítottam test céljából.

Nade normál esetben (egészséges OOM-mel) mégis a less hal meg!

Igen ez így is van mivel sokkal kevesebb ideje futott és

így sokkal kevesebb a veszteség (kevesebb munka veszik el adott esetben)

De ellenkező esetben ha régóta fut már a less és most indul útjára az adatbáziskezelő akkor a postgres lesz nagyobb veszélyben.

PS: Kár hogy nincs Alan már rendberakta volna az embereket a LKML-en. ;-)))

>Ha egy program több memóriát fogyaszt akkor kevésbé öljük meg!!!!!!!!!!!!

ez bullshit

Reszlet Riel doksijabol:

"Az OOM killer működésének céljai:

* ne öljük meg a fontos rendszer szervizeket,....

* minimalizáljuk az elveszett munkát

* szabadítsunk fel annyi memóriát amennyi csak lehetséges

* legyen előrelátható, hogy ne okozzon meglepetéseket

* legyen egyszerű és kicsi"

Nálam az Operával míveli ezt a 2.4.20 . Ha egyszerre több oldalt akarok megnyitni, mellette meg megy egyx fordítás, akkor a kernel halál nyugiban kilövi az Operámat:) Most váltottam Mozillára, ezzel nem csinálja. Kernelt meg csak ha lessz 2.6.0-stable, akkor forgatok.