2012-10-02 4 views
2

Linux에서 JIT가 생성 한 코드를 하드웨어 성능 카운터를 사용하여 프로파일 링하려고합니다. 알다시피, 가장 일반적인 프로파일 러는 oprofileperf입니다.perf_events/oprofile을 사용하여 Linux에서 JIT의 출력을 프로파일 링 하시겠습니까?

어떻게하면 JIT와 oprofile/perf를 통합 할 수 있습니까?

내 JIT는 oprofile에서 이미 지원되는 JAVA가 아닙니다.

예를 들어 LLVM의 JIT를 고려해 볼 수 있습니다.

  1. 는 가장 인기있는 함수의 분해를 참조 JIT - 테드 코드
  2. 에서 가장 인기있는 기능 (이름)를 참조하십시오에 나는 모든 명령
+0

oprofile의 경우 [opagent] (http://oprofile.sourceforge.net/doc/devel/index.html) 일 수 있습니까? – osgx

+0

그리고 perf 파일에는/tmp/perf-tag를 통해 Jato JVM의 JIT를 지원하는 patch [@ perf report : JIT 생성 코드 프로파일 링에 대한 지원 추가] (http://lwn.net/Articles/474254/) $ PID.map' 심볼 (?) 파일을 찾습니다. 형식은 "Startaddr 크기 이름 \ n"입니다. 이 파일은'perf report'로 읽을 수 있어야합니다 – osgx

+1

그리고 여기는 perf 패치입니다 : https://lkml.org/lkml/2009/6/8/499 "perf report : JIT 생성 코드 프로파일 링에 대한 지원 추가" – osgx

답변

3

JITed 코드를 프로필에 할당 된 성능 카운터 통계, 원하는 perf를 사용하여 perf-map-agent 라이브러리를 다운로드하고 컴파일하고 설치 한 다음 (Java 코드의 경우) -agentpath:<path>/libperfmap.so을 명령 행에 추가하십시오.

자바 코드가 아닌 경우 /tmp/perf-$pid.map 심볼 맵 파일이 생성되는 한 perf 파일 은 perf 보고서를 생성 할 때 사용합니다.

Brendan Gregg는 관련 참조가있는 blog post입니다.

+0

seacoder, 고마워요. . '/ tmp/perf- $ pid.map'의 형식은 무엇입니까? perf가'record'에서'record' 또는'report' 부속 명령에 언제 접근합니까? JIT 생성 코드를 어떻게 분해 할 수 있습니까? – osgx

+2

지도 파일에는 각 줄에

+0

seacoder, perf 보고서로 정적 기계 코드의 디스 어셈블리에 액세스 할 수 있지만 JIT 생성 코드에는 액세스 할 수 없습니다. JIT에서 작성한 코드는 perf 보고서에 삭제되고이 기계 코드의 사본은 저장되지 않습니다. – osgx