是否连续两次调用getrusage可以产生越来越多的结果?

时间:2014-11-07 13:02:06

标签: c linux unix posix getrusage

在一个调用getrusage()两次以便通过减法获取任务时间的程序中,我曾经看过一个断言,说任务的时间应该是非负的,失败。当然,这不能轻易复制,尽管我可以编写一个可以更容易地再现它的专门程序。

我试图找到getrusage()在执行时增加的保证,但我的系统上的手册页(x86-64上的Linux)和this system-independant description都没有明确说明。

在具有多个核心和NTP运行的物理计算机上观察到该行为。

我应该报告我正在使用的操作系统的错误吗?我希望getrusage()随着时间的推移而增加,我会问得太多了吗?

1 个答案:

答案 0 :(得分:3)

在很多系统上,我认为你的意思是ru_utimeru_stime)并没有准确计算出来,它只是每个时钟刻度采样一次,通常慢到100Hz甚至有时甚至慢。

主要原因是许多机器的时钟读取成本非常高,并且您不想进行此会计(您必须为每次系统调用读取两次时钟)。在执行许多系统调用的程序中,您可能很容易花费更多时间阅读时钟。

但计数器永远不会倒退。我已经看到很多年前,在上下文切换中跟踪了该过程的总运行时间(这是相对便宜的,并且getrusge可以通过使用样本来计算时间,并从总运行时间中减去该时间)。在这种情况下使用的时钟是挂钟而不是单调时钟,当您更改机器上的时间时,进程的运行时间可能会恢复。但那当然是一个错误。