getrusage与clock_gettime()

时间:2011-10-01 19:12:07

标签: getrusage

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

的getrusage(...)

  • 分别在ru_utime和ru_stime中将CPU时间拆分为系统和用户组件
  • 粗略微秒分辨率: struct timeval的字段为tv_usec,但此分辨率通常限制在约4ms / 250Hz (source)
  • 可在SVr4,4.3BSD,POSIX.1-2001上使用:这意味着它可在Linux和OS X上使用

See the man page


clock_gettime(CLOCK_PROCESS_CPUTIME_ID,...)

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

See the man page