각 정책에서 수행되는 overcommit 동작 방식은 아래와 같다.
- OVERCOMMIT_GUESS (0)
Heuristic으로 계산된 크기만큼 overcommit을 허용하는 정책으로 Linux의 기본정책이다. 여기서 Heuristic이라는 말이 참 애매한데.. kernel에서 수행되는 로직을 살펴 보면 새로운 VM할당이 요청되면 새로 추가 요청된 사이즈와 "file page + SLAB reclaimable + (free pages - reserve pages)"에 의해서 계산된 실제 가용한 메모리 공간을 비교하여 요청된 사이즈가 더 작을 경우 vm할당을 성공시키고 있다.
예를 들어 간단히 설명하자면, 시스템에 1G의 가용한 메모리가 있는 상태에서 malloc(1G이상)은 실패하지만 malloc(1G이하)는 계속해서 성공시켜 준다.
- OVERCOMMIT_ALWAYS (1)
시스템의 메모리 상태와 상관없이 무조건 overcommit을 성공시켜준다. malloc()은 항상 성공
- OVERCOMMIT_NEVER (2)
시스템이 가지고 있는 물리메모리 총량에 hugepage 사용분을 제거하고 "/proc/sys/vm/overcommit_ratio"값을 반영한 다음 swap partition크기를 더해서 계산된 Commit limit 값을 기준으로 VM할당을 제한하는정책이다.
만약 16G 시스템에서 overcommit_ratio가 50이고 hugepage를 사용하지 않고 swap partition이 없을 경우 Commit limit은 8G가 된다. 이런 경우 이 시스템은 8G이상의 메모리를 할당할수 없다. 남은 8G의 메모리는 낭비된다.