2012-04-26 1 views
3

필자는 불필요한 함수 호출을 제거하는 데 도움이되므로 프로파일 링을위한 Flame Graph 아이디어를 정말 좋아합니다. 그러나 샘플러를 수집 할 때마다 프로파일 러가 완전한 스택 덤프를 수행해야한다는 점에서 캐치가 있습니다. DTrace 나 SystemTap을 사용하면 쉽게이 작업을 수행 할 수 있지만 우분투를 실행하는 ARM 장치에서이 작업을 수행 할 수 있어야합니다 (DTrace가 필요하지 않음). 커널을 다시 컴파일하지 않고도이 작업을 수행하고 싶습니다. SystemTap이 제거되었습니다. 플레임 그래프에서 사용하기 위해 모든 샘플의 프로파일 러에서 전체 스택 덤프를 얻는 방법은 무엇입니까?

는 Valgrind의/Callgrind 또는 OProfile은 (또는 우분투의 ARM 장치에서 실행할 수있는 다른 프로파일 링 도구)과 유사한 출력 뭔가 얻을 것이 가능 :
dtrace -n 'profile-1001 /pid == 12345 && arg1/ { @[ustack()] = count(); }

+1

가능성 : * [pstack을 (http://linuxcommand.org/man_pages/pstack1.html) * 또는 * [가난한 사람의 프로파일을

나는에 반환 한과 불꽃 그래프를 만들기위한 몇 가지 지침을 썼다 ] (http://poormansprofiler.org/) * gdb를 사용하여 스택 추적을 얻습니다. –

+0

pstack은 유망 해 보입니다. 나는 가난한 사람의 프로파일 러보다 좀 더 자동화 된 것을 원합니다. – Leo

+0

*/proc//stack *이 있는지 확인하십시오. 이렇게하면 커널 스택에 프로세스가 제공됩니다. 뭔가 다르지만 유용 할 수 있습니다. 'gdb' 솔루션은 * user space *만을 추적합니다. 즉, 커널이 프로세스를 대신하여 시간을 보내는 곳을 알 수 있습니다. 아마도 * dtrace * 태그를 제거하고 * linux *를 추가해야합니다. –

답변

6

메인 라인 리눅스 커널의 일부이며 일반적으로 linux-tools-common (또는 비슷한) 패키지를 통해 설치되는 Linux perf_events ("perf"명령이라고도 함)를 사용해보십시오. 저는 종종 그것을 리눅스에서 플레임 그래프를 만드는데 사용합니다. http://www.brendangregg.com/perf.html#FlameGraphs

+0

+ 그냥 아무도 낮은 담당자가 없어서 원인을 upvoted :) 나는 벽 - 시간 스택 샘플을 믿지 만, 당신은 내가 화염 그래프에 대해 흥분하지 않는다는 것을 알 것이다. 건배. –

1

pstack을 마이크 Dunlavey에 의해 제안 된 불행히도 ARM 패치를 적용하고 ARM 장치에서 실행 한 후 segfaults.

http://www.commandlinefu.com/commands/view/4039/print-stack-trace-of-a-core-file-without-needing-to-enter-gdb-interactively

그것은 다음과 같은 명령으로 gdb를 사용 : gdb --q --n --ex bt --batch --pid PID

약간 느린 작동하지만 나는 그것을 살펴보고 시간이 될 때까지, 나는 다음과 같은 임시 변통 해결책을 발견했다.