2011-11-30 2 views
4

나는 이걸 가지고 내 이빨을 물고있어.gcc 컴파일 된 코드 및 ARM Cortex A8 타겟에서 호출 그래프 프로파일 링을 얻는 방법은 무엇입니까?

ARM 보드에서 프로파일 링을해야하고 콜 그래프를 볼 필요가있다. OProfile, Kernel perf 및 Google 성능 도구를 사용해 보았습니다. 모두 잘 작동하지만 콜 그래프 정보를 출력하지 않습니다.

이로 인해 코드가 올바르게 컴파일되지 않는다는 결론을 얻었습니다. 내 C++ 코드를 컴파일 할 때

나는 다음 플래그를 사용 :

을 아치 특정 :

-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3 

일반 : (최적화)

-fexceptions -fno-strict-aliasing -D_REENTRANT -Wall -Wextra 

디버깅 :

-O2 -g -fno-omit-frame-pointer 

I di d 많은 Google 검색 및 관련 주제를 찾았습니다.

  • libunwind?
  • 난쟁이
  • (asynchronous-) 긴장을 풀고 테이블 나는 완전히이 모두 연결하는 방법을 이해하지 못하는 그러나
  • -mapcs-frame

. 콜 그래프를 얻는 방법에 대한 힌트가 있습니까?

참고 : (Rian의 대답으로 인해) ARM에서 x86-64보다 일부 방법이 더 오래 걸리는 지 알아 보는 데 관심이 있습니다. 다른 플랫폼에서이 작업을 수행하는 것은 도움이되지 않습니다. (비록 두 코드 모두에서 코드를 컴파일하고 x86-64에서 콜 그래프를 작성할 수 있지만).

+0

당신은 당신이 하드 = -mfloat-ABI 컴파일 하시겠습니까? 내가 이해 한 바로는 mfloat-abi = softfp는 여전히 NEON을 사용하지만 기존 바이너리와 더 호환됩니다. mfloat-abi = hard https://wiki.linaro.org/Linaro-arm-hardfloat –

+0

하드 성능을 향상시켜야하며 우리는 전체 배포판을 열심히 구축해야합니다. –

+0

oprofile은 커널에 따라 다릅니다. 프로파일 링을 쉽게하기 위해 커널을 재구성 했습니까? – accuya

답변

2

ARM 코어 텍스 -A8에서 프로파일 링을하고 싶지만 콜 그래프에 관심이 있다면 x86 용으로 컴파일하고 valgrind의 callgrind 도구를 실행하고 kcachegrind로 결과를 조사해보십시오.

함수가 약간 다르게 컴파일 되더라도 호출 그래프는 두 아키텍처에서 동일해야하며 함수 간의 관계가 변경되어서는 안됩니다.

특별한 플래그는 필요하지 :

valgrind --tool=callgrind -v --dump-every-bb=10000000 ./some-app 
kcachegrind & 
+1

) 함수 당 누적 시간 (하위 호출 포함)에 특히 관심이 많아서 일부 사용 패턴이 플랫폼 별 성능에 어떤 영향을 줄 수 있는지 확인할 수 있습니다. "호출 체인당"관계가 다를 것이기 때문에 하나의 플랫폼에서 다른 플랫폼으로 전송하기가 어렵습니다.그러나 귀하의 대답은 타이밍에 관심이없는 콜 그래프를 얻고 자하는 사람에게 좋은 조언입니다. +1 –