실행 파일에서 gprof를 실행하고 있지만 실행 파일은 자식 프로세스가 완료 될 때까지 많은 시간을 소비합니다. 대기 시간이 gprof 타이밍에 인수로 반영 되었습니까?gprof가 사용 된 시간을 고려하지 않았습니까?
2
A
답변
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을 사용할 수 있습니다.
관련 문제
- 1. NSCalendar 구성 요소가 시간을 고려하지 않음
- 2. gprof가 엉망이되었습니다
- 3. 왜 gprof가 프로그램의 실행 시간을 상당히 과소 평가합니까?
- 4. 커밋 시간을 변경하려면 어떻게합니까 (아직 푸시되지 않았습니까?).
- 5. String.Format은 로케일을 고려하지 않습니까?
- 6. 대역폭을 고려하지 않은 추세
- 7. LDAP 필터를 고려하지 않습니다.
- 8. gprof가 프로필을 작성할 수 있도록 C 프로그램을 수정하는 방법은 무엇입니까?
- 9. 라인에서 시간을 추출 나오지 사용
- 10. NSConcreteNotification을 받았지만 정의되지 않았습니까?
- 11. UIView 애니메이션이 지연을 고려하지 않습니까?
- 12. 크롬이 디스플레이 속성을 고려하지 않음
- 13. 시간을 기준으로 배경 변경 (자바 스크립트 사용)
- 14. ITaskbarList3이 신고되지 않았습니까?
- 15. localytics가 신고하지 않았습니까?
- 16. _THROW는 GCC에서 정의되지 않았습니까?
- 17. Datatable에 Row가 추가되지 않았습니까?
- 18. swt.graphics.ImageLoader.save()가 플러시되지 않았습니까?
- 19. git에서 아무것도 삭제되지 않았습니까?
- 20. 편집기는 고유 한 편집기로 MultilineStringEditor을 고려하지
- 21. FSharp.Core가 최적화되지 않았습니까?
- 22. 메모리가 올바르게 해제되지 않았습니까?
- 23. dijit.form.Select 다시 채워지지 않았습니까?
- 24. Flex DateTimeAxis : 사용 시간을 제어 하시겠습니까?
- 25. PQescapeLiteral이 정의되지 않았습니까?
- 26. reloadData에서 tableView를 지우지 않았습니까?
- 27. HTML.DropDownList가 미리 선택된 값을 고려하지 않습니다.
- 28. string_algo의 to_upper 기능이 로케일을 고려하지 않습니다.
- 29. mooWMD가 정의되지 않았습니까?
- 30. 아파치 소켓이 닫히지 않았습니까?