2009-12-28 3 views

답변

1

저는 gprof를 많이 사용하지 않았지만 제 지식에 따르면 wait도 볼 수있는 자식 프로세스도 프로파일 링되지 않았습니다.

#include <stdlib.h> 
#include <unistd.h> 
#include <limits.h> 

void slow_function() 
{ 
    unsigned int i; 
    for (i = 0; i < UINT_MAX; i++); 
} 

void quick_function(pid_t child) 
{ 
    int status; 
    waitpid(child, &status, 0); 
    return; 
} 

int main(int argc, const char *argv[]) 
{ 
    pid_t child; 

    child = fork(); 
    if (child == 0) // child process 
    { 
     slow_function(); 
     exit(0); 
    } 
    else 
     quick_function(child); 

    return 0; 
} 

이에 대한 gprof 출력 (내 컴퓨터에서)입니다 : 당신이 실제로 차일/스레드 프로파일하려면

% cumulative self    self  total 
time seconds seconds calls Ts/call Ts/call name 
    0.00  0.00  0.00  1  0.00  0.00 quick_function 

것은, 내가 좋을 것

간단한 예제를 참조하십시오 this을 시작점으로 사용하십시오.

1

포크 된 프로세스를 기록하는 옵션이있는 것 같습니다. this ibm article에 대해 약간의 이야기가 있습니다.

tprof 같은 글은 사용중인 gprof와 비슷하지만 다중 프로세스/다중 스레드 응용 프로그램에 대한보다 정확한 그림을 제공 할 수있는 다양한 방법을 사용합니다.

1

gprof은 프로세스의 실제 CPU 시간 만 계산합니다. 더 잘 작동하는 것은 호출 스택을 샘플링하여 벽시계 시간이 아닌 CPU 시간으로 샘플링하는 것입니다. 물론 사용자 입력을 기다리는 동안 샘플을 가져 가면 안됩니다 (또는 가져온 경우 샘플을 버려야합니다). RotateRight/Zoom과 같은 일부 프로필러는 pstack 또는 lsstack, but here's a simple way to do it을 사용할 수 있습니다.

관련 문제