如何查找进程的空闲时间

时间:2014-06-04 08:16:31

标签: c++ getrusage

我有一个在早期版本中花了一些时间的过程。 现在,当前版本中的相同过程需要更多时间。但与之前相比,代码没有任何变化。我看到的一个观察是服务器上有一些其他进程与早期版本相比消耗高CPU。所以我怀疑我的进程没有得到CPU时间,这就是为什么它需要更多的时间。 但我需要证明这一过程大部分时间都在等待(空闲)。 所以为了做到这一点,我想使用getrusage()。但是我不知道如何使用它计算过程空闲时间。 有人可以告诉我一个简单的例子,说明如何专门用getrusage来计算过程的空闲时间。

提前致谢。

1 个答案:

答案 0 :(得分:1)

不是计算过程空闲时间,而是计算它的执行时间,并从挂钟时间开始减少。

在符合较新POSIX标准(阅读Linux)的操作系统中,您可以使用clock_gettime功能轻松完成此操作:

  

<强> CLOCK_REALTIME
     系统范围的实时时钟。

     

<强> CLOCK_PROCESS_CPUTIME_ID
      来自CPU的高分辨率每进程计时器。

     

<强> CLOCK_THREAD_CPUTIME_ID
      特定于线程的CPU时钟。

您可以使用CLOCK_REALTIME来获取挂钟时间,并获取程序开头和结束时返回的时间之间的差异,以了解程序运行的时间(包括空闲时间) 。使用CLOCK_PROCESS_CPUTIME_ID,您可以以类似的方式准确测量您的进程在CPU上运行的确切程度。使用CLOCK_THREAD_CPUTIME_ID,您甚至可以分别获得每个线程的执行时间。

注意:如果进程/线程从CPU迁移到另一个进程,则CLOCK_*_CPUTIME_ID可能会变得不一致。记在脑子里。如果确实发生了这种情况,您可以尝试将进程或其线程绑定到特定的CPU。

作为旁注,time(1)为您提供有关流程执行时间的信息,因此,如果挂钟时间足够大,可以由您的手表测量,您也可以使用此工具。

P.S。不要忘记与-lrt链接。