1

我有一个在早期版本中需要一些时间的过程。现在,当前版本中的相同过程需要更多时间。但是与之前相比,代码没有变化。我看到的一个观察结果是,与早期版本相比,服务器上还有一些其他进程正在消耗高 CPU。所以我怀疑我的进程没有得到 cpu 时间,这就是为什么它需要更多时间。但我需要证明这个过程大部分时间都在等待(空闲)。所以为此我正在考虑使用getrusage(). 但是因为我不确定如何使用它来计算进程空闲时间。谁能告诉我一个简单的例子,说明如何getrusage专门用于计算进程的空闲时间。

提前致谢。

4

1 回答 1

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)它会为您提供有关进程执行时间的信息,因此,如果挂钟时间足够大,可以通过手表进行测量,您也可以使用此工具。

PS不要忘记链接-lrt

于 2014-06-04T08:57:53.520 回答