2

Android Traceview에서 추적 기반 프로파일 링 메소드와 샘플링 기반 프로파일 링 메소드의 차이점은 무엇입니까? 나는 추적 기반이 더 정확하다고 생각했지만, 특히 함수가있는 다른 호출이있는 경우 실제 CPU 시간을 왜곡 할 수있는 것처럼 보입니다.Android 추적 기반 및 샘플링 기반 메소드 프로파일 링의 차이점 및보고 된 CPU 시간에 미치는 영향

예를 들어, A-1 및 A-2와 같은 두 가지 구현이있는 함수 A를 평가하고 싶습니다.

  1. A-1에는 A-1-1과 같은 하나 이상의 함수 호출이 있습니다.
  2. A-2에는 A-1-1과 같은 더 많은 함수 호출이 있지만 A-1-1에는 A-1-1-1과 같은 함수 호출이 하나 있습니다.

이제는 트레이스 기반 프로파일 링이 하나의 추가 함수 A-1-1-1을 추적해야하고이 추가 CPU 사용량이 CPU 시간으로보고되기 때문에 A-2에 더 높은 값을보고한다고 생각합니다. A-2의 내가 맞습니까?

그래서 문제는 트레이스 기반 메소드가 부모 함수의 실제 CPU 시간을보고 할 때 하위 메소드를 추적 할 때 cpu 오버 헤드 시간을 고려합니까?

한편 샘플링 기반 방법의 문제점은 매우 가벼운 기능을 잡지 못할 수도 있다는 것입니다. 함수에 0.2 밀리 초의 CPU 시간이 걸리고 샘플링 간격이 1 밀리 초이면 어떻게 될까요? 나는 그것으로 약간의 실험을했고 가벼운 함수 호출을 잡을 수 없다. 차이점에 대한 아이디어 또는 문서 참조?

마지막 질문은 상대 비교를 위해 어느 것이 더 정확합니까?

답변

1

알고있는 한 샘플링 방법은 오버 헤드를 고려하지 않습니다.

추적은 모든 단일 함수 호출을 올바르게 계산합니다.

샘플링은 특정 빈도로 스택의 스냅 샷을 찍어 프로그램에서 실제로 시간이 소비 된 전체 그림을 제공합니다.

내 함수에 0.2 밀리 초의 CPU 시간이 걸리며 샘플링 간격이 1 밀리 초이면 어떻게됩니까?

  • 그 기능을 빠르게 실행하고 거의 그것을 잡을되지 않습니다 아마 샘플링하지 호출하면

    . 그러나 어쨌든 빠른 기능이라고는 거의 관심이 없습니다.

  • 함수가 샘플러에 의해 자주 잡히지 않고 (예 : 간격 당 50 회) 호출되어 캡처되지 않으면 해당 샘플이 실행되는 지점에서 절대로 실행되지 않는다는 의미입니다. 그것은 충분히 빠르다는 것을 의미합니다.

샘플러에서 보여주는 프로그램의 대부분을 리팩터링하여 샘플링하고 최적화하십시오. JVM에 대한 Microoptimization은 당신을 멀리하지 못할 것입니다.

+0

지금까지는 모든 함수 호출을 잡는 속도가 중요하지 않아서 Tracing을 진행했습니다.추적 기능이 작동하도록 같은 함수의 다양한 구현을 상대 비교하기 위해 필요합니다. – utengr

+0

그것은 당신을 위해, 좋은 작동합니다. 나는 어떤 언어로도 좋은 경험을하지 못했다. 나는 항상 대형 시스템의 관련성이 낮은 부분을 최적화하는 것을 끝내었다. –

+0

최적화 용도로 사용하지 않습니다. 단지보고를 위해, 함수 호출 내에서 다양한 알고리즘에 대한 상대적인 CPU 시간. 예를 들어, 알고리즘 A는 2 %의 CPU 사용률을 가지며 B는 5 %의 CPU 사용률을가집니다. – utengr

관련 문제