2010-01-10 3 views
1

정적 및 동적 계장 도구가 많이 있습니다. Soot는 Java 바이트 코드 용 정적 계측 도구입니다. Pin과 Valgrind는 바이너리를위한 동적 도구 도구입니다.정적 및 동적 계측의 장점/단점

정적 및 동적 계측 도구에 대한 장단점은 무엇입니까? 필자는 동적 도구가 더 강력하지만 정적 도구 도구는 런타임 성능 측면에서 더 우수하다고 생각합니다. 능력과 수행면에서 그들을 비교하십시오.

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

답변

2

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

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

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

동적 계측기 (aa gprof)는 수십 년 동안 사실상의 표준 이었지만 마지막 단어가되지 못했습니다. 우선, 그것이주는 통계의 대부분이 원래의 필요성에 대한 요점을 놓치고 있다는 것을 깨닫는 것이 중요합니다.

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

몇 가지 프로파일 러가이를 수행 할 수 있습니다. 특히 Oprofile 및 RotateRight/Zoom in이 가능합니다.

+0

이 답변은 주로 * profilers *에 대한 내용으로, 프로그램 시간에 대한 자세한 정보를 제공합니다. 프로파일 링은 프로그램을 계측하기위한 하나의 유스 케이스 *입니다. – Karmastan

+0

@Karmastan : 감사합니다. 일반적으로 성능 및 메모리 문제를 찾는 것이 주요 관심사입니다. 대답은 성과가 문제가된다고 단언했다. 나는 정확성과 관련된 다른 종류의 질문에 답할 수있는 곳을 볼 수 있습니다. –

1

정적 계측의 장점은 분석이 입력에 의존하지 않는다는 사실입니다. 분석은 원래 코드에서 발생하며 코드의 모든 경로를 포함합니다. 전체 범위. 이러한 유형의 계측은 일반적으로 런타임에 다른 프로세스를 필요로하지 않고 실행 준비가 된 바이너리를 다시 작성합니다. 즉, 코드가 삽입 된 코드에서 오는 오버 헤드로 빠르게 실행됩니다. 정적 계측의 단점은 런타임 정보가 부족하여 발생하는 상세한 분석이 아니므로 그로 인해 목표 달성에 어려움을 겪을 수 있습니다.

동적 인 계측에는 코드 실행 중 모든 세부 정보와 정보가 포함됩니다. 대부분의 경우, 동적 계측을 수행하는 도구는 작성하기 쉽습니다. 반면에, 실행 경로가 주어진 입력에 의존한다는 사실 때문에 전체 코드 커버리지를 달성 할 수 없습니다. 또한 외부 프로세스가 첨부되어 원래의 도구를 필요로한다는 사실 때문에 작업 속도가 느려집니다.

AFAIC, LLVM pass는 static instrumentation을 위해 사용됩니다. 왜냐하면 생성 된 코드는 컴파일 시점에 있고 이미 최종 바이너리로 작성되어 있고 정적 계측 기술의 장단점을 모두 포함하고 있기 때문입니다.

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