c++ 메모리 - 권장 오픈 소스 프로파일 러




코드 사용량 (6)

오픈 소스가 아니지만 AMD CodeAnalyst 는 무료입니다. 그 이름에도 불구하고 인텔 CPU에서도 작동합니다. Windows (Visual Studio 통합 포함)와 Linux 모두에 사용할 수있는 버전이 있습니다.

나는 $$$을 지불해야하는 상업용 프로파일 러 중 하나를 사용하기보다는 오픈 소스 프로파일 러를 찾으려고 노력하고 있습니다. 소스 포지 (SourceForge)에서 검색을 수행했을 때 나는 매우 유망하다고 생각되는이 4 가지 C ++ 프로파일 러를 발견했습니다.

  1. Shiny : C ++ 프로파일 러
  2. 저지방 프로파일 러
  3. 루크 스택 워커
  4. FreeProfiler

나는 어떤 프로파일 러 중 하나가 내 프로그램의 성능에 대해 배우는 측면에서 가장 좋은 것인지 잘 모르겠습니다. 몇 가지 제안을 듣는 것이 좋을 것입니다.


이를 수행하는 데는 한 가지 이상의 방법이 있습니다.

프로파일 러를 사용하지 않는 방법을 잊지 마십시오.

대부분의 프로파일 러는 1) 타이밍의 높은 통계적 정확성 (많은 샘플)과 2) 문제 식별 (기능 및 콜 그래프)의 낮은 정밀도가 필요하다고 가정합니다.

우선 순위는 바뀔 수 있습니다. 즉, 비용 정밀도가 샘플 수의 함수 인 동안 문제는 정확한 기계 주소에 위치 할 수 있습니다.

대부분의 실제 문제는 고정밀도가 필수적이지 않은 최소한 10 %의 비용이 듭니다.

예 : 무언가가 프로그램을 2 배 길게 만들면 50 %의 비용이 들어가는 코드가 있음을 의미합니다. 속도가 느려지는 동안 호출 스택의 샘플을 10 개 가져 가면 코드의 정확한 줄이 대략 5 개에 있습니다. 프로그램이 커질수록 문제는 중간 스택에있는 함수 호출 일 가능성이 높습니다.

그것은 반이 intuiitive, 나도 알아.

참고 : xPerf는 거의 거기에 있지만 꽤 (내가 말할 수있는 한). 호출 스택 샘플을 가져 와서 저장합니다. 여기 내가 필요한 것 같아.

  • 원하는 경우에만 샘플을 가져와야합니다. 그대로, 관련없는 것들을 걸러 내야합니다.

  • 스택보기에는 전체 기능뿐만 아니라 전화가 걸리는 특정 회선이나 주소가 표시되어야합니다. (어쩌면이 작업을 수행 할 수 있으며 블로그에서 알 수 없습니다.)

  • 클릭하면 단일 콜 명령 또는 리프 명령어 중심으로 버터 플라이 뷰를 가져오고, CPU 분수가 아니라 해당 명령어가 포함 된 스택 샘플의 비율을 보여줍니다. 그것은 그 명령의 비용을 시간의 일부로서 직접적으로 측정 한 것입니다. (예를 들어,이 작업을 수행 할 수는 있지만 말할 수는 없습니다.) 예를 들어, 명령이 파일 열기 또는 스레드를 유휴 상태로하는 다른 호출 인 경우에도 여전히 월 클럭 시간이 소요되므로, 그.

참고 : 필자는 Luke Stackwalker를 살펴 봤는데 동일한 발언이 적용됩니다. 나는 그것이 올바른 방향에 있다고 생각하지만 UI 작업이 필요합니다.

추가 : LukeStackwalker를보다 신중하게 검토 한 결과, 함수를 측정하는 것이 구문을 찾는 것보다 더 중요하다는 가정에 희생됩니다. 따라서 호출 스택의 각 샘플에서 함수 수준의 타이밍 정보를 업데이트하지만 줄 번호 정보로 수행하는 모든 함수는 각 함수의 최소 및 최대 줄 번호를 추적합니다. 멀리 떨어져. 그래서 기본적으로 줄 정보 인 가장 중요한 정보를 버립니다. 중요한 이유는 함수를 최적화하기로 결정한 경우 함수가 필요한 라인이 무엇인지 알 필요가 있습니다. 그리고 그 라인은 스택 샘플에 있습니다 (파기되기 전에).

라인 번호 정보가 유지되면 스토리지가 빨리 소모 될 수 있다고 반대 할 수도 있습니다. 두 가지 대답. 1) 샘플에 나타나는 라인이 너무 많아 반복적으로 나타납니다. 2) 너무 많은 표본이 필요하지 않습니다. 높은 통계적 정확도의 측정이 필요하다는 가정은 항상 있었지만 정당화 된 것은 아닙니다.

xPerf와 같은 다른 스택 샘플러도 비슷한 문제가 있다고 생각합니다.


목록에있는 사람들로부터 Luke Stackwalker가 가장 잘 작동하는 것으로 나타났습니다. GUI가 마음에 들었습니다. 실행하기 쉽습니다.

비슷한 다른 기능인 Very Sleepy - 유사한 기능, 샘플링이 더 안정적이며, GUI가 사용하기에 다소 어려움 (그래픽이 아님).

그들과 더 많은 시간을 보낸 후에 나는 아주 중요한 단점을 발견했습니다. 두 가지 방법 모두 1ms 분해능으로 샘플링을 시도하지만 실제로 샘플링 방법 (첨부 된 프로세스의 StackWalk64)이 너무 느리기 때문에 실제로는 달성하지 못합니다. 내 응용 프로그램의 경우 콜 스택 (callstack)을 얻으려면 5-20ms가 걸립니다. 이렇게하면 결과가 정확하지 않을뿐만 아니라 짧은 콜 스택이 더 빨리 걸리므로 결과가 왜곡됩니다. 따라서 더 많은 히트를 얻는 경향이 있습니다.



우리는 LtProf를 사용하여 만족했습니다. 오픈 소스가 아니고 $$$이 아닌 $$ 만 :-)


팁과 트릭

적게

왜 (큰) 파일을 보기 위해 편집자 를 사용하고 있습니까?

* nix 또는 Cygwin 에서 less 사용하십시오. ( "less는 더 많거나 적습니다"라는 유명한 말이 있습니다 - 이전 UNIX 명령 "more"가 "less"로 바뀌었기 때문에 다시 스크롤 할 수있는 기능이 추가 되었기 때문입니다.) 탐색 및 탐색 속도는 매우 낮습니다 Vim이지만 스왑 파일이없고 RAM이 거의 사용되지 않습니다.

GNU의 Win32 포트가 적습니다. 위의 대답의 "적은"섹션을 참조하십시오.

Perl은 빠른 스크립트에 좋으며, (범위 플립 플롭) 연산자는 멋진 선택 메커니즘을 통해 여러분이 걸어 다닐 필요가있는 무거운 것을 제한합니다.

예 :

$ perl -n -e 'print if ( 1000000 .. 2000000)' humongo.txt | less

이렇게하면 1 백만 줄에서 2 백만 줄까지 모든 내용이 추출되어 적은 비용으로 수동으로 출력을 분류 할 수 있습니다.

다른 예시:

$ perl -n -e 'print if ( /regex one/ .. /regex two/)' humongo.txt | less

이것은 "정규식 1"이 무언가를 찾으면 인쇄를 시작하고 "정규 표현식 2"가 흥미있는 블록의 끝을 찾을 때 멈 춥니 다. 여러 블록을 찾을 수 있습니다. 출력을 선별 ...

로그 파서

이것은 당신이 사용할 수있는 또 하나의 유용한 도구입니다. Wikipedia 기사 를 인용 하십시오 :

logparser 는 Microsoft 직원 인 Gabriele Giuseppini가 IIS 로깅 테스트를 자동화하기 위해 처음 작성한 유연한 명령 줄 유틸리티입니다. Windows 운영 체제에서 사용하기위한 것으로, IIS 6.0 Resource Kit 도구에 포함되어 있습니다. logparser의 기본 동작은 명령 행에서 SQL 표현식을 가져 와서 SQL 표현식과 일치하는 행을 출력하여 "데이터 처리 파이프 라인"과 같이 작동합니다.

Microsoft는 Logparser를 로그 파일, XML 파일 및 CSV 파일과 같은 텍스트 기반 데이터뿐만 아니라 Windows 운영 체제의 주요 데이터 원본 (이벤트 로그, 레지스트리 등)에 대한 보편적 인 쿼리 액세스를 제공하는 강력하고 다양한 도구라고 설명합니다. 파일 시스템 및 Active Directory가 있습니다. 입력 쿼리의 결과는 텍스트 기반 출력으로 사용자 정의 할 수도 있고 SQL, SYSLOG 또는 차트와 같은보다 특수한 대상에 유지할 수도 있습니다.

사용 예 :

C:\>logparser.exe -i:textline -o:tsv "select Index, Text from 'c:\path\to\file.log' where line > 1000 and line < 2000"
C:\>logparser.exe -i:textline -o:tsv "select Index, Text from 'c:\path\to\file.log' where line like '%pattern%'"

크기의 상대성

100MB는 너무 크지 않습니다. 3GB가 크게 증가하고 있습니다. 필자는 인쇄 및 우편 시설에서 일하면서 일류 우편의 약 2 %를 창출했습니다. 내가 기술 책임자였던 시스템 중 하나가 메일 조각 중 약 15 %를 차지했습니다. 여기저기서 디버깅 할 큰 파일이있었습니다.

그리고 더...

여기에 도구와 정보를 추가하십시오. 이 답변은 이유가있는 커뮤니티 위키입니다! 우리 모두는 많은 양의 데이터를 다룰 때 더 많은 조언을 필요로합니다 ...





c++ windows profiler