4

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

我试图找到一个getrusage()随着执行而增加的保证,但我系统上的手册页(x86-64 上的 Linux)和这个与系统无关的描述都没有明确说明。

该行为是在物理计算机上观察到的,该计算机具有多个内核,并且 NTP 正在运行。

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

4

1 回答 1

3

在许多系统上(我想你的意思是ru_utimeand ru_stime)计算不准确,它只是每个时钟周期采样一次,通常慢至 100Hz,有时甚至更慢。

主要原因是许多机器的时钟读取起来非常昂贵,而您不想进行这种记账(每次系统调用都必须读取两次时钟)。在执行许多系统调用的程序中,您可能很容易花费更多时间阅读时钟而不是做任何其他事情。

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

于 2014-11-07T13:37:28.807 回答