2014-05-05 19 views
0

使用CLOCK_PROCESS_CPUTIME_ID我讀http://linux.die.net/man/3/clock_gettimehttp://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime/comment-page-1/#comment-681578在clock_gettime

它說用這個來

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &stop_time); 

衡量多久的功能來運行。

我在我的程序中試過。當我運行它時,它回覆說它花了15秒。但是當我比較使用秒錶來衡量它時,它是30秒。

您能否告訴我爲什麼clock_gettime返回實際使用時間的1/2?

謝謝。

+0

[理解時鐘\ _gettime的不同時鐘()]的可能重複(http://stackoverflow.com/questions/7506952/understanding-the-different-clocks- of-clock-gettime) –

回答

2

在多進程環境中,進程不斷從CPU遷移到「運行隊列」。

當性能測試應用程序時,通常很容易知道進程在CPU上運行的時間量,同時排除進程等待「運行隊列」上的CPU資源的時間。

在這個問題的情況下,如果CPU時間大約是實時時間的一半,那麼當您的進程也在運行時,其他進程可能會主動競爭CPU時間。看起來,您的過程在其運行期間獲得大約一半的CPU資源方面相當成功。

而不是使用CLOCK_PROCESS_CPUTIME_ID,你可能會考慮使用CLOCK_REALTIME?

有關詳細信息,請參見:Understanding the different clocks of clock_gettime()

+0

一個相關的問題是爲什麼當我使用CLOCK_PROCESS_CPUTIME_ID時,我會得到負數? – n179911

+0

負數是Linux內核以及GLIBC中的缺陷的結果;具體來說,當CPU時鐘的頻率發生變化時,或(更可能)將進程移至另一個CPU,該CPU可能未完全與當前CPU的CPU計時器同步。 –