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

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

我试图find一个保证getrusage()随着执行而增加,但是我的系统上的man page(x86-64上的Linux)和这个与系统无关的描述都没有这么明确地说出来。

在一台物理计算机上观察到这种行为,有几个核心,NTP正在运行。

我应该报告一个针对我使用的操作系统的错误吗? 当我期望getrusage()随着时间的推移而增加时,我是否问得太多?

在许多系统中,rusage(我认为你的意思是ru_utimeru_stime )没有被精确地计算出来,它只是在每个时钟周期采样一次,通常慢到100Hz,有时甚至更慢。

主要的原因是许多机器的时钟读起来非常昂贵,而且你不想做这个记录(每次系统调用你必须读两次)。 你可能很容易花费更多的时间来读取时钟,而不是做任何其他的程序来做很多系统调用。

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