在clock_gettime中使用CLOCK_PROCESS_CPUTIME_ID

时间:2014-05-05 22:53:52

标签: c linux

我看了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_PROCESS_CPUTIME_ID, &stop_time);

衡量一个函数运行所需的时间。

我在我的程序中试过了。当我运行它时,它返回说它需要15秒。但是,当我使用秒表来衡量它时,它是30秒。

你能否告诉我为什么clock_gettime会返回实际时间的1/2?

谢谢。

1 个答案:

答案 0 :(得分:2)

在多进程环境中,进程不断从CPU迁移到“运行队列”。

在对应用程序进行性能测试时,通常很容易知道进程在CPU上运行的时间,同时排除进程在“运行队列”上等待CPU资源的时间。

对于这个问题,CPU时间大约是实时的一半,其他进程很可能在您的进程也在运行时主动竞争CPU时间。看起来您的流程在运行期间获得了大约一半的CPU资源是相当成功的。

您可以考虑使用CLOCK_REALTIME而不是使用CLOCK_PROCESS_CPUTIME_ID吗?

有关其他详细信息,请参阅:Understanding the different clocks of clock_gettime()