본문 바로가기

Skills/mY Technutz

OOM Killer 동작 과정에 대한 간단한 설명

병가받고 한달 뽀지게 쉬는중인데 중간중간 대전같은데 끌려가서 일하고 있느라,

나름 또 바빠버려서 정말 관심있는 커널 MM 에 대한 공부가 중단되었었다..

정리하는 셈 치고, 또한 최근 P 모사에서 OOM killer 가 동작되버려 kdump 조차 안된 상황(?)을 보니,

급 급해져서 살짜쿵 내용좀 정리해 본다...

사실 올 초반부터 OOM killer 의 성능을 향상시키기 위한 수 많은 토의가 있었다..

시작은 fork-bomb 를 검색하는 것에서 시작하였으나, 용자 'David' 의 주도로 인해,

반지원정대 못지않은 큰 여정이 되어버렸다...

AndrewDavid 의 패치를 검토하고, 또 싸우기도 많이 하면서 결국 2010-6-11 자로

패치를 적용시킨다... 이 패치에 대한 스토리와 내용은 너무 길고 길어서 여기서 단순간에 쓰기엔 어려우니

다음으로 미루도록 하고, 다시 말하지만, 내가 나름대로 연구해본 OOM killer 의 동작 과정에 대해 보기로 한다.

코드를 설명해야 하는 것을 최대한 배재하려고 하나, 나역시 프로그래머라고는 할 수 없는

시스템엔지니어일 뿐이기에, 좀 꼬일수도 있을것 같다... 대충 보자.. 쿨럭


위와 같은 함수와 동작 원리를 알고 이제 깊이 파다보면, background reclaim, direct reclaim 등이 있고,

reclaim 중에서는 또 write back 등 I/O 관련되는 것들이 주루룩 나오고,

그 전에 일단 커널 메모리 매핑이나 vm 매핑........ 엄청 쏟아진다... 머리 깨지며,

한달 동안 이것만 붙잡고 밥안먹으면서 살아도 모르겠다 ㅠㅠ

아참 참고로, 6월 적용된 패치로 인해 앞으로의 커널에서의 움킬러의 동작 방식.

즉, 메모리 reclaim 등에 대한 일부 부분들은 바뀌게 되었으니 참조로만 알아두길 바란다.

PS. 사실 내가 공부하면서 이해하고 있는 부분을 재정리 한 글이기때문에 부족함이 많을 수도 있다..

가르침 주실 분들은 언제든지 가르침 주시길 희망함 :)

스프링노트에 다시 좀 정리해서 플로우별로 정리했다...

http://mirr.springnote.com/pages/6484805