2013-03-25 4 views
5

페이지 폴트를 일으키는 메모리 액세스 (포인터)를 얻는 방법을 아는 사람이 있습니까? 나는 주로 주요 페이지 오류에 관심이 많다.주요 페이지 오류를 일으키는 로그 메모리 액세스

달성하고자하는 것에 대한 배경 지식. 나는 큰 메모리 풋 프린트 (데이터베이스)를 가진 응용 프로그램을 가지고 있으며 큰 데이터 구조 (테이블, mmap()을 사용하여 할당 된 인덱스)에 대한 액세스와 페이징을 상관시키고 싶습니다. 프로세스의 매핑은/proc // maps에서 쉽게 검색 할 수 있습니다. 이제 페이지 폴트를 일으키는 메모리 액세스가있는 경우 각 데이터 구조에 액세스 할 때 페이지 폴트가 몇 개 발생했는지 추적 할 수 있습니다.

퍼프 또는 systemtap이 작업을 수행 할 수 있다고 생각합니다. 어떤 아이디어?

답변

6

는 프로브 점에서 가능한 것이 무엇인지 알아보기 :

% stap -L vm.pagefault 
vm.pagefault name:string write_access:long address:long $mm:struct mm_struct* \ 
    $vma:struct vm_area_struct* $address:long unsigned int $flags:unsigned int 

로그인, 기호 이름도

# stap -e 'probe vm.pagefault { if (execname()=="foo") { printf("%p (%s)\n", address, usymdata(address)) } }' -d /bin/foo --ldd 

페이지에 주소를 매핑하는 시도 : http://sourceware.org/systemtap/examples/#memory/pfaults.stp

6

당신의 추측이 맞다. perf 도구를 사용하여 응용 프로그램에서 발생한 페이지 오류 수를 추적 할 수 있습니다.

도구 사용 방법은 this tutorial을 읽어 보시기 바랍니다. 단지 설치하려면

사용 : 당신은 을 페이지 폴트 이벤트를 찾고

. 가

예를 들어

는,이 명령은 "LS에 반환 한 도구를 -r을 실행 UNAME : 당신은 당신의 커널 번호를 얻을 수 있습니다

sudo apt-get install linux-tools-common linux-base 
sudo apt-get install linux-tools-YOUR-KERNEL number 

: 당신은에 의해 (우분투 또는 다른 적절한 배포)를 설치할 수 있습니다 "명령 :

perf record -e page-faults:u -F 250 ls 

한 다음 결과를 볼 수 있습니다 (이진"

와 LS를 "디버그 정보가 없기 때문에 꽤 출력을 기대하지 않습니다)