2017-03-28 5 views
1

Google simpleperf 샘플링 프로파일 러를 사용하여 Android NDK 14b clang 기반 응용 프로그램에 프로필을 시도하고 있습니다. 녹음 된 콜 스택 샘플은 실제로 풀리지 않습니다. 콜 스택의 상단 프레임 만 녹음 된 것으로 보이므로 프로파일 링 보고서는별로 유용하지 않습니다. 나는 대부분의 코드에서 -fno-omit-frame-pointer를 지정했으나 아무런 차이가없는 것으로 보인다.Simpleperf가 스택을 풀지 않음

무엇이 누락 되었습니까? 내가 사용해야하는 Android NDK 프로젝트에 대한 최신 프로파일 러가 있습니까?

답변

2

--call-graph fp 옵션을 사용하여 프레임 포인터 기반 풀기를 수행하는 경우 arm은 arm/thumb 코드가 결합되어 있기 때문에 aarch64 아키텍처를 사용하고 -fno- 어디에서나 생략 프레임 포인터.

-w 또는 -call-graph dwarf 옵션을 사용하여 드워프 기반 풀기를 수행하는 경우 -fno-omit-frame-pointer가 작동하지 않으므로 디버그 정보가 포함 된 공유 라이브러리를 사용하는 것이 좋습니다. APK.

Java 코드에서 풀기가 중지 될 수도 있습니다. Java 코드를 풀려면 원시 코드로 완전히 컴파일하고 드워프 기반 풀기를 사용해야합니다.

결국 ndk r14b에 포함 된 app_profiler.py를 사용할 수 있습니다. Java 코드를 완전히 컴파일하고 디버그 정보가있는 라이브러리를 장치로 다운로드합니다. 또한 사용자 환경에서 제대로 작동하지 않으면 확인하고 변경하기가 쉽습니다.

1

몇 가지 간단한 옵션이 있는데 예상되는 콜 그래프를 얻을 가능성이 높아 보이도록 지정해야합니다 (지정하지 않음). 예를 들어 '-a --cpu 1'을 지정하면 프로파일 링중인 이진 파일이 호출 그래프에도 표시되지 않습니다. 예를 들어 (perf_text.x 대부분의 CPU 하나에 1 초 동안 회전 경우) 내가 할 경우 :

simpleperf record -g -a -e cpu-cycles --cpu 1 ./perf_test.x -C 1 -w bw -t 1 
simpleperf report -g caller 

다음 perf_test.x (나를 위해) 전혀 나타나지 않습니다 출력한다. --cpu x 옵션을 사용하는 경우이를 삭제하십시오. 또한 높은 샘플링 속도는 오버 헤드를 증가시킵니다. 아래는 (현재) 기본 샘플링 속도 4000 샘플/초로 실행됩니다.

simpleperf record -g -a -e cpu-cycles -F 4000 ./perf_test.x -C 1 -w bw -t 1 
simpleperf report -g caller 

위의 표는 샘플의 40-70 %를 사용하는 최상위 프로세스로 simpleperf를 보여줍니다. 샘플링 속도 감소 :

simpleperf record -g -a -e cpu-cycles -F 1000 ./perf_test.x -C 1 -w bw -t 1 
simpleperf report -g caller 

총 샘플 및 1 simpleperf 항목의 상단 %까지 perf_test.x 가져 오는 총 샘플의 24 %에서. 희망이 있으면 도움이됩니다.

관련 문제