문제

정적 및 동적 계측 도구가 많이 있습니다. 그을음은 Java 바이트 코드를위한 정적 계측 도구입니다. PIN 및 VALGRIND는 바이너리를위한 역동적 인 계측 도구입니다.

정적 및 동적 계측 도구의 장단점은 무엇입니까? 정적 계측 도구는 런타임 성능 측면에서 더 나은 반면, 동적 도구는 더 강력하다고 생각합니다. 능력과 성능면에서 비교하십시오.

또한 LLVM 패스를 작성하는 계측 도구를 사용한 차이점은 무엇입니까?

도움이 되었습니까?

해결책

나는 많은 시간이 걸리고 그 시간을 절약하기 위해 최적화 할 수있는 코드를 발견해야한다고 가정합니다. 그것은 타이밍 루틴과는 다른 목표입니다.

모든 것이 입력 데이터 믹스에 의존하기 때문에 정적 분석기에 회의적입니다.

동적 계측은 자기 시간과 총 시간, 절대, 평균 및 백분율과 같은 기능의 속성을 측정하려고합니다. 호출 카운트 및 호출 그래프에서 각 루틴의 역할도 있습니다.

동적 계측 (A LA GPROF)는 수십 년 동안 사실적인 표준 이었지만 마지막 단어와는 거리가 멀다. 우선, 대부분의 통계가 원래의 필요성 측면에서 요점을 놓치고 있음을 인식하는 것이 중요합니다.

요즘 (IMHO) 프로그램 카운터뿐만 아니라 통화 스택을 샘플링하는 샘플링 프로파일 러가 필요합니다. CPU 시간뿐만 아니라 벽 클록 시간에 샘플링해야합니다. 샘플은 고주파로 그릴 필요가 없습니다. 앱이 사용자 입력을 기다릴 때 샘플링을 억제해야합니다. 함수 수준뿐만 아니라 라인 또는 명령어 수준에서 정보를 제공해야합니다. 코드 라인에 대해 제공 해야하는 가장 중요한 통계는 해당 라인이 최적화되면 저장할 수있는 시간의 가장 직접적인 측정이기 때문에 코드를 포함하는 샘플의 백분율입니다.

몇 가지 프로파일 러가이를 수행 할 수 있습니다. 특히 Oprofile 및 Rotateright/줌.

다른 팁

정적 계측의 장점은 분석이 입력에 의존하지 않는다는 사실입니다. 분석은 원래 코드에서 이루어지며 코드의 모든 경로를 포함합니다. 전체 커버리지. 이 유형의 계측은 일반적으로 런타임에 다른 프로세스가 필요하지 않고 실행 준비가 된 이진을 다시 작성합니다. 이는 또한 코드가 빠르게 실행되며 주입 된 코드에서 오버 헤드가 발생합니다. 정적 계측의 단점은 런타임 정보 부족으로 인해 발생하는 상세한 분석이며, 그로 인해 때로는 목표를 달성하기가 매우 어렵습니다.

다른 한편으로, 동적 계측에는 코드 런타임 중 모든 세부 사항과 정보가 포함됩니다. 대부분의 경우 동적 계측을 수행하는 도구는 작성하기 쉽습니다. 반면에 실행 경로가 주어진 입력에 의존한다는 사실 때문에 전체 코드 커버리지를 달성 할 수 없습니다. 또한 외부 프로세스가 부착되어야하고 원래의 원래 프로세스가 필요하다는 사실은 일을 느리게 만듭니다.

AFAIC, LLVM 패스는 정적 계측에 사용됩니다. 생성 된 코드는 컴파일 타임에 있고 이미 최종 바이너리로 작성되었으며 정적 계측 기술의 모든 장단점이 포함되어 있기 때문입니다.

결론적으로, 그것은 당신이 필요로하는 것의 문제입니다. 작업에 적합한 도구를 선택해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top