[Hpc-forum] cpuset + oom

Kristof Bajnok bajnokk at niif.hu
2012. Okt. 9., K, 07:48:48 CEST


Kedves kollégák,

segítséget szeretnék kérni, mert elakadtam, és az SGI support egyelőre
nem tudott segíteni.

A legutóbbi UV lefagyás valószínűleg azért következett be, mert egy
felhasználói job túllépte a rendelkezésére álló memóriát. Ezt a hibát
többször is tudtuk reprodukálni.

Az UV-n a jobok ún. cpusetekben futnak, azaz a job kap néhány cpu-t és
memória node-ot. Így megelőzhető az, hogy a job a cpu-hoz képest
"távoli" memória node-on tárolja az adatait (az uv egy NUMA gép).

Az a probléma, hogy ha egy task túllépi a cpusetben használható
memóriát, akkor az uv lefagy (változatos módon elveszíti a kapcsolatot
az IO blade-ekkel, ami miatt "elmegy" a hálózat és/vagy a root
filerendszer, stb. Nem mindig pánikol az OS, van, hogy magára talál, de
semmiképpen sem egészséges állapot ez.). A logokban az látszik, hogy
elkezd futni az oom-killer.

Próbálkoztunk kikapcsolni az overcommit lehetőségét, ami ugyan SMP
rendszereken megelőzné az oom-killer elindulását (mivel már a
malloc()-nál hibát kapna a program), azonban szemlátomást nem ez a
helyzet a NUMA rendszereknél. Lehetséges, hogy ha az OS rendelkezésére
álló teljes 6TB RAM-ot túl-allokálnánk, akkor jelentene valamit, de a
cpusetben történő overcommit ellen nem véd, bár erre nem találtam
hivatkozást a dokumentációkban.
Valószínű amúgy, hogy ha védene, akkor sem működne jól a kikapcsolt
overcommit az UV-n, mivel az SGI MPI-os jobok általában túl-allokálják a
memóriát, ami azonban az esetek jelentős részében nem okoz problémát.
(Ezért nem használunk h_vmem korlátozást Debrecenben és Pécsett.)

A kérdés az, hogy most mit tegyünk. Nem szívesen indítom újra a pécsi
gépet, amíg egy triviális hibás job bármikor lefagyaszthatja, de
jelenleg nincs több ötletem, hogy miként lehetne megelőzni azt, hogy az
oom-killer romba döntse az egész miskulanciát. Ezért nagyon örülnék, ha
valakinek lenne ötlete, hogy mivel lehetne ezt elkerülni vagy
megakadályozni.

Előre is köszönöm,
Kristóf

Ui:
  vm.oom_kill_allocating_task = 1
  vm.oom_dump_tasks = 0
  vm.overcommit_memory = 2
  vm.overcommit_ratio = 100



További információk a(z) Hpc-forum levelezőlistáról