[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