5

我正在尝试获取 Ubuntu 上某个进程消耗的 CPU 时间。据我所知,有两个函数可以完成这项工作:getrusage() 和clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &tp)。在我的代码中,在 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &tp) 之后立即调用 getrusage() 总是会给出不同的结果。

谁能帮助我了解哪个功能可以提供更高的分辨率,以及这些功能有哪些优点/缺点?

谢谢。

4

1 回答 1

0

getrusage(...)

  • 将 CPU 时间分别拆分为 ru_utime 和 ru_stime 中的系统和用户组件。
  • 大约微秒级的分辨率: struct timeval 有字段 tv_usec,但这个分辨率通常限制在 4ms/250Hz 左右(来源)
  • 适用于 SVr4、4.3BSD、POSIX.1-2001:这意味着它适用于 Linux 和 OS X

请参阅手册页


clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)

  • 系统和用户时间的总和,无法将其分成系统/用户时间组件。
  • 纳秒分辨率: struct timespec 是 struct timeval 的克隆,但使用 tv_nsec 而不是 tv_usec。确切的分辨率取决于定时器在给定系统上的实现方式,并且可以使用clock_getres进行查询。
  • 需要您链接到 librt
  • 时钟可能不可用。在这种情况下,clock_gettime 将返回 -1 并将 errno 设置为 EINVAL,因此提供 getrusage 回退是个好主意。(资源)
  • 适用于 SUSv2 和 POSIX.1-2001:这意味着它适用于 Linux,但不适用于 OS X。

请参阅手册页

于 2013-02-12T00:26:55.270 回答