2009-11-20 2 views
2

어떻게 든 this question과 관련이 있습니다. 어떤 도구를 사용하여 callgrind로 만든 프로파일 링 데이터를 평가 하시겠습니까?callgrind의 통화 프로필을 평가하는 도구는 무엇입니까?

그래픽 인터페이스가 없어도 간결하고 명확하며 해석하기 쉬운 방식으로 결과를 준비해야합니다. 내가 아는 예. kcachegrind이지만이 프로그램에는 표시된 테이블의 데이터 내보내기 또는 디스플레이에서 단순히 행을 복사하는 것과 같은 일부 기능이 없습니다.

답변

1

몇 달 전에 도스로 실행하는 프로파일 러를 작성했습니다.

당신이 KCacheGrind를 사용한다면 여기에 내가 할 일이 있습니다. 그것을 쓰는 것은 그리 어렵지 않을 수도 있고 아니면 직접 손으로 할 수도 있습니다.

KCacheGrind에는 임의 시간에 수동으로 덤프를 트리거 할 수있는 도구 모음 버튼 "강제 덤프"가 있습니다. 프로그램을 기다리는 동안 무작위 또는 의사 임의의 시간에 스택 추적을 캡처하는 것이 기술의 핵심입니다.

많은 샘플이 필요하지 않습니다. 일반적으로 20 개가 충분합니다. 50 % 이상의 병목 현상으로 인해 많은 비용이 소요되는 경우 5 개의 샘플로 충분할 수 있습니다.

샘플 처리는 매우 간단합니다. 각 스택 추적은 일련의 코드 행 (실제 주소)으로 구성됩니다. 마지막 행을 제외한 모든 행은 함수/메소드 호출입니다.

  • 샘플에 나타나는 모든 코드 줄 목록을 수집하고 중복을 제거하십시오.

  • 각 코드 행에 대해 표시되는 샘플의 비율을 계산하십시오. 예를 들어 20 개의 샘플을 가져 와서 그 중 3 개에 코드 줄이 나타나면 재귀 때문에 일부 샘플에 두 번 이상 표시 되더라도 카운트는 3/20 또는 15 %입니다. 이는 각 진술의 비용을 직접 측정 한 것입니다.

  • 가장 값 비싼 100 줄 정도의 코드 줄을 표시하십시오. 귀하의 병목 현상이 해당 목록에 있습니다.

은 내가 일반적으로이 정보를 어떻게하면 수동으로 자신이 나타날 때까지 스택 샘플을 채취 (또는 이미 가지고 사람을보고)하고 질문 한 후 높은 비용으로 라인을 선택하고있다 "왜 이는 로컬 감각뿐만 아니라 글로벌 감각으로 코드 라인을 수행합니다. " 이를 표현하는 또 다른 방법은 "샘플을 취할 때 시간 조각에서 성취하려고하는 프로그램이 세계적인 의미에서 무엇인가"입니다. 제가이 질문을하는 이유는 그 라인이 비용을 지출하는 것이 정말로 필요한지를 알려주기 때문입니다.

나는 프로파일을 개발 않는 모든 위대한 직장 사람들의 중요하고 싶지 않아,하지만 슬프게도 확고하게 입지를 굳힌 신화가 많이 포함하여, 주제에있다 :와,

  • 그 정확한 측정 많은 샘플이 중요합니다. 오히려 강조가 에 있어야 병목 현상이입니다. 정확한 측정은 그 전제 조건은 아닙니다. 10 %에서 90 % 사이의 비용이 소요되는 일반적인 병목 현상의 경우 측정이 매우 거칠 수 있습니다.

  • 이 코드 줄 이상의 기능을합니다. 값 비싼 함수를 찾으면 병목 현상이있는 행을 검색해야합니다. 그 정보는 스택 트레이스에서 바로 찾을 수 있습니다. 사냥 할 필요가 없습니다.

  • 벽 시계 시간과 CPU를 구별해야합니다. 당신이 그것을 기다리고 있다면, 그것은 벽시계 시간 (손목 시계 시간?)입니다. 불필요한 I/O로 구성된 병목 현상이있는 경우 CPU 시간이 아니기 때문에이를 무시하고 싶습니까?

  • 은 배타적 시간과 포괄 시간의 구분이 유용하다는 것을 나타냅니다. 시간 함수가 아니라면 피 호출자가 아닌 시간을 보냈는지 알기 쉽습니다. 코드 줄을 살펴보면 중요한 것은 포괄적 인 시간뿐입니다. 또 다른 방법은 모든 명령어가 마이크로 코드 만 호출하는 경우에도 호출 명령어입니다.

  • 재귀가 중요합니다. 그것은 라인이있는 샘플의 분율에 영향을 미치지 않으며 책임이 있기 때문에 무의미합니다.

  • 줄 또는 함수의 호출 수가 중요합니다. 속도가 빠르거나 너무 많이 호출되거나 속도가 느리고 한 번 호출되는 경우 비용은 사용되는 시간의 백분율이며 스택 샘플이 추정합니다.

  • 샘플링 성능이 중요합니다. 병목 현상을 일으키지 않는다고 가정하고 계속 진행하기 전에 스택 샘플을 가져 와서 몇 분간 보면서 상관 없습니다.

Here's 더 완전한 설명.

1

일부 CLI 도구는 callgrind 데이터로 작업이 있습니다 callgrind.out

cg_annotate 
에서 몇 가지 정보를 표시 할 수 있습니다

callgrind_annotate 

및 cachegrind 도구

관련 문제