2017-02-23 2 views
2

나는 리눅스의 time 유틸리티를 사용하여 내 이동 프로그램의 실행 시간을 측정 할 때, 나는 다음과 같은 출력을 얻을 : 나는 똑같은 프로그램 실행의 출력을 볼 때이동 프로파일 (pprof) 타이밍 차이

real 1m9.177s 
user 7m1.788s 
sys  0m39.016s 

Entering interactive mode (type "help" for commands) 
(pprof) top 
143.32s of 176s total (81.43%) 

은 pprof이 176s부터 파악 점점 : 이동의 pprof의 CPU 프로파일 러에, 나는 다음과 같은 출력을 얻을? 시계 시간도 CPU 시간도 아닙니다. 나는이 프로그램을 GOMAXPROCS와 8로 설정하고 있는데, 이것과 관련이 있다고 느낀다. pprof가 실행 시간을 정확히 측정하는 방법과 linux의 time과 다른 이유는 무엇입니까?

답변

3

유틸리티와 pprof 도구는 다른 방식으로 작동하며 다른 방식으로 사용해야합니다. 그들을 화해 시키려고하지 마십시오. time 프로그램의 정확한 시간을 측정합니다. pprof은 함수와 메소드의 상대 시간을 측정합니다. pprof은 방해가되는 통계 샘플입니다. CPU 프로파일 링이 활성화되면 Go 프로그램은 초당 약 100 회 중지하고 현재 실행중인 goroutine의 스택에 프로그램 카운터로 구성된 샘플을 기록합니다. 샘플링에는 비용이 있으며 결과는 실제 인구의 추정치입니다.

time을 사용하면 프로그램의 전체 실제 CPU 시간 즉 절대 시간을 측정 할 수 있습니다. 상대 시간 비율을 사용하여 대부분의 시간이 함수 및 메소드에 소요 된 시간을 예측하려면 pprof을 사용하십시오. pprof은 병목 현상을 식별합니다. 실제 CPU 시간에 대해서는 testing 패키지 벤치 마크를 사용하십시오. 예를 들어

, Profiling Go Programs를 참조하십시오

을 특정 병목 현상을 식별하기 위해 이동의 프로파일 링 도구를 사용하고 수정함으로써, 우리는 이동 루프 찾는를 빨리 크기의 순서를 실행하고 6 배 적은 메모리를 사용할 수 있습니다 .

0

이것은 약간의 버그처럼 보입니다. 아마도 알려진 버그 일 수 있습니다. 176s를 출력하기 위해 pprof가 수행하는 작업은 알려진 샘플링 기간에 샘플 수를 곱하는 것입니다. 그리고 합리적으로 정확해야합니다. 프로세스 (시스템 + 사용자)가 소비 한 총 CPU 시간.

프로그램에서 하위 프로세스를 통해 작업을 생성 할 수 있습니까? 그것은 차이를 설명하는 한 가지 방법 일 수 있습니다.

관련 문제