임베디드 시스템에서 페이지 회수 이슈 Feb 17, 2008

아직까지는 임베디드 리눅스의 제품들은 몇 안되는 프로세스가 실행된다. 이는 이전까지 RTOS를 사용하여 task 기반의 프로그램들이 비정상(?)적으로 포팅되었기 때문이다. 기존의 RTOS에서 address space를 공유하며 수행되던 task들을 리눅스에 포팅하기 위해 thread 모델을 사용하기 때문이다. 응용의 성격에 따라 틀리겠지만 PVR과 같은 어플리케이션이 아니라면 일반적으로 page cache의 페이지 보다는 anonymous page들이 시스템에 더 많이 존재하게 될 것이다.

하지만 현재까지의 Linux kernel의 페이지 회수 정책은 !SMP && !SWAP 장치에 대해서는 그리 효과적이지 못한 것 같다. 이를 해결하기 위해서는 페이지의 type별로 분리된 lru list를 만들어야 한다. 제일 우선순위가 높은 list는 물론 page cache에 있고 mapped되어 있지 않은 페이지들 일 것이다.

먼저 scan_control의 may_swap이 바뀔 필요가 있다. 또한 !SMP에서 수행될 때 pagevec은 과연 효과가 있을까?

임베디드와 같이 order 0이상의 페이지를 많이 요구하지 않는 시스템에서 주로 메모리 요구의 대상은 application일 것이고 이는 order 0의 페이지들에 대한 많은 요구가 있을 것이다. 특히나 많은 쓰레드들이 도는 환경이라면 더욱 그럴 확률이 높을 것이다.

그러므로 지금의 zone의 order 0의 페이지 캐시는 상황에 따라 dynamic 하게 더욱 많은 bulk page들을 만들도록 수정되면 성능에 향상이 있을 것이다.

마지막으로 시스템이 어떤 페이지들을 어느 순간에 얼마나 많이 사용하는지 프로파일링하고 하눈에 그래프로 볼 수 있는 프로파일링 도구가 필요하다.

0 개의 덧글: