How much memory are applications really using Feb 17, 2008

http://lwn.net/Articles/230975/

이번 2.6.25에 추가된 기능중의 하나이다.

임베디드 시스템에서 어플리케이션이 사용하는 정확한 물리 메모리의 양을 측정하는 것은 중요하다. 왜냐하면 메모리의 양은 돈과 직결되는 문제이기도 하고, 개인적으로는 그것보다 RTOS시절의 app들이 그대로(?) 포팅되어져서 VMA와 PAGE에 대한 개념이 없기 때문이기도 하다.

Anyway,
현재 리눅스 커널이 제공하는 rss는 별로 유용하지 못하다. 왜냐하면 shared page에 대한 account 정보가 올바르지 못하기 때문이다. 또한 /proc/pid/smaps를 이용해서 보다 많은 정보를 알 수 있기는 하지만 아직은 부족하다.

Matt Mackal은 이 문제를 해결하기 위해 pagemap과 kpagemap을 구현하였다.
이는 각 프로세스가 사용중인 실제 물리 메모리에 대한 정보와 함께 PSS와 USS를 구현하여 보다 정확한 정보를 제공한다.

PSS(proportional set size)는 공유되는 페이지를 공유 프로세스의 수로 나누어서 정확하게 할당된 메모리를 파악할 수 있게 해준다. 반면 USS(unique set size)는 공유되지 않는 페이지들의 합이다. 또한 clear_refs를 각 프로세스마다 만들어 페이지 테이블에 reference bit를 초기화 할 수 있게 해준다. 그렇게 함으로써 프로세스가 실행중에 어떤 페이지들을 access하는지 알수 있게 해준다. 하지만 이 기능에 대해서는 의문이다. 굳이 필요한 기능일까?

referenced bit은 kswapd와 같은 회수 처리에 의해 다시 reset될 수도 있기 때문에 특정 시점에 가서는 참조된 페이지라 할지라도 reference bit은 다시 reset되어 있을 수 있다.

현재 PSS는
Fengguang Wu에 의해 smaps에 의해서도 볼 수 있다.
http://lkml.org/lkml/2007/8/13/1224


0 개의 덧글: