질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

cached를 줄이고 buffers 늘리는 방법

작성자 정보

  • 임근식 작성
  • 작성일

컨텐츠 정보

본문


메모리가 왜 이리 모자라지? - free(free+buffers+cached) 에 대하여
==================================================================

아래는 강제적으로  buffers/cached의 증가되는 범위를 축소하기 위해 invalidate_inode_pages()함수로 캐쉬된것을 다시 해제하는 함수를
이용하는 방법입니다. 아래는 filemap.c 소스에만 적용시켰으나 범위를 더 확장하고 싶다면 buffers/cached 되는 소스 부분에
invalidate_inode_pages() 함수를 추가하면 되겠습니다.


./mm/filemap.c에서 do_generic_mapping_read 함수 맨 뒤부분에 위의 붉은색 한 라인만 추가하시면 성능이 좀 느려지기는 하지만,
page cache 생성량이 대폭 줄어듭니다.저희가 테스트한 바로는 45MB까지 생기던 page cache가 16MB 정도까지만 생깁니다.
이런 상황에서 SIGILL이 발생한다면 아마도 core dump가 가능할 것으로 보입니다.
 

----------------./kernel-2.6.18/mm/filemap.c ---------------------------------
do_generic_mapping_read()의 제일 마지막 줄
 862 out:
 863     *_ra = ra;
 864
 865     *ppos = ((loff_t) index << PAGE_CACHE_SHIFT) + offset;
 866     if (cached_page)
 867         page_cache_release(cached_page);
 868     if (filp)
 869         file_accessed(filp);
 870
 871     invalidate_inode_pages(mapping); //<----------- This Line
 872 }
-------------------------------------------------------------------------------

혹시 아래와 같은 상황이라면 Core Dump을 생성하는 디버깅이 어려울 수도 있을 것 같습니다.

1. Illegal Instruction Exception은 MIPS Floating Point 처리 library에서 발생한다.
2. 위 에러는 가용 메모리가 부족한 상황에서만 발생한다.
3. exeDSP가 지속적으로 메모리를 할당하고, 해제하지 않음으로 인한 memory leak이 존재한다.
4. 위 수정으로 인해 page cache로부터 약 30여MB 정도 추가메모리를 확보했지만, exeDSP가
   메모리를 더 지속적으로 사용해서 90MB까지 사용한 뒤, 여전히 메모리가 부족한 상황이 발생하고,
   MIPS Floating Point library가 에러를 발생하고, 또 다시 OOM Killer가 동작한다. 물론 이 경우는
   618회가 아닌 약 1000여회 이상의 aging test 후에 발생할 수도 있음.
 
위의 3과 같이 판단하는 이유는 아래 /proc/meminfo의 내용에 근거합니다. MemTotal은 118244KB이고,
Mapped가 68836KB입니다. exeDSP에 할당된 양이 68236KB이므로, 시스템에서 동작하는 background shell 등을
감안하면, exeDSP가 시스템의 모든 응용프로그램 영역에 할당된 물리페이지의 대부분을 사용하고 있다고
볼 수 있습니다. 그런데, Cached가 42300KB이므로, MemFree 및 Slab 등을 제외한 나머지 대부분의 메모리가
page cache에 들어있음을 알 수 있습니다. 문제는 page cache의 크기가 크더라도 이 페이지들이
회수가 가능하면 그만인데, 이는 상황에 따라 page cache 내 대부분의 페이지가 회수가능할 수도 있고,
한 개도 회수하기 어려운 상황일 수도 있습니다. 후자라고 가정할 경우, 위의 시나리오가 대체로 들어맞는다고
할 수 있습니다.  일단은 테스트해 보시기 바랍니다.

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,133 명
  • 현재 강좌수 :  36,170 개
  • 현재 접속자 :  416 명