리눅스에서 메모리 잠그기

개발 노트 2008. 9. 9. 09:13 posted by 무병장수권력자


Locking Memory in LINUX

작성자 : 김문규
최초 작성일 : 2008. 9. 9

리눅스의 paging에 대해서 아십니까? 이는 메모리를 효율적으로 사용하기 위한 기법이지만 프로그래머 입장에서는 골치아픈 존재가 될 수 있습니다. 만약에 메모리 DB를 만들기 위해 데이터를 메모리로 올렸다고 하지요. 그런데, 많이 인덱싱 되지 않는 레코드가 있을 경우에는 리눅스는 과감하게 해당 메모리 영역을 swap-out 해버릴 수 있습니다. 난감한 상황이 아닐 수 없습니다.

그래서 이 경우에는 강제로 swap out 되지 않도록 메모리를 잠그는 명령을 내려주어야만 합니다.

1. 일부 공간 잠그기

#include <sys/mman.h>
int mlock(const void* addr, size_t len);

2. 해당 프로세스의 주소 공간 전체 잠그기
#include <sys/mman.h>
int mlockall(int flags);     // flag : MCL_CURRENT, MCL_FUTURE

위의 명령은 앞서 말한 경우에 사용을 하지만, 섣부른 사용은 시스템 전체를 망칠 수 있음을 명심하기 바랍니다. 개인적인 생각으로는 해당 프로세스에 dedicated 된 machine이 아닌 경우에는 전체를 잠그는 행동은 아주 위험할 수 있으니 더욱 유의하길 바랍니다.