C 大部分getrusage';s字段是否为0?

C 大部分getrusage';s字段是否为0?,c,resources,kernel,getrusage,C,Resources,Kernel,Getrusage,我在linux中编写了两个系统调用,并在系统调用中使用getrusage测量了它们的资源使用情况。然而,我得到的大多数结果都是0,我不确定这是否有意义。以下是输出: [ 4103.028728] DELTA RESULTS: [ 4103.028746] u.tv_sec: 0 [ 4103.028748] s.tv_sec: 0 [ 4103.028749] u.tv_usec: 0 [ 4103.028751] s.tv_usec: 971765 [ 4103.028753] maxrss:

我在linux中编写了两个系统调用,并在系统调用中使用getrusage测量了它们的资源使用情况。然而,我得到的大多数结果都是0,我不确定这是否有意义。以下是输出:

[ 4103.028728] DELTA RESULTS:
[ 4103.028746] u.tv_sec: 0
[ 4103.028748] s.tv_sec: 0
[ 4103.028749] u.tv_usec: 0
[ 4103.028751] s.tv_usec: 971765
[ 4103.028753] maxrss: 0
[ 4103.028755] ixrss: 0
[ 4103.028756] idrss: 0
[ 4103.028758] isrss: 0
[ 4103.028760] minflt: 0
[ 4103.028761] majflt: 0
[ 4103.028763] nswap: 0
[ 4103.028765] inblock: 0
[ 4103.028766] oublock: 0
[ 4103.028768] msgsnd: 0
[ 4103.028769] msgrcv: 0
[ 4103.028771] nsignals: 0
[ 4103.028773] nvcsw: 199
[ 4103.028774] nivcsw: 5

[ 4103.028961] CONTROL RESULTS:
[ 4103.028966] u.tv_sec: 0
[ 4103.028968] s.tv_sec: 0
[ 4103.028970] u.tv_usec: 1383
[ 4103.028972] s.tv_usec: 971998
[ 4103.028974] maxrss: 2492
[ 4103.028975] ixrss: 0
[ 4103.028977] idrss: 0
[ 4103.028978] isrss: 0
[ 4103.028980] minflt: 75
[ 4103.028982] majflt: 0
[ 4103.028984] nswap: 0
[ 4103.028986] inblock: 24
[ 4103.028987] oublock: 0
[ 4103.028989] msgsnd: 0
[ 4103.028991] msgrcv: 0
[ 4103.028992] nsignals: 0
[ 4103.028994] nvcsw: 200
[ 4103.028996] nivcsw: 5


我只是想知道这个输出是否可以通过,或者它是否是一些错误的迹象,所以我没有放任何源代码。谢谢大家!

这看起来不错;我不希望系统调用对绝大多数这些度量进行任何更改,这些度量是度量进程中的资源,而不是内核资源。只有在执行系统调用(如
mmap
)将新资源分配给进程,或执行
read
将属于进程的内存存储到以前的写时复制)时,才应该看到更改


话虽如此,我认为这样调用
getrusage
毫无意义。它通常用于获取进程生命周期内的聚合使用率,而不是度量增量。有些更深奥的东西可能很难用其他方式测量增量,但只有时间(实时或cpu)可以通过
clock\u gettime

测量,我不认为我使用的是你所说的增量。系统调用试图运行类似于delta队列()的操作。很抱歉造成误解,谢谢您的回复!我理解你的问题是,这些是一些系统调用之前/之后的差异。这是错误的吗?输出显示了在运行两个不同的系统调用之前和每次系统调用完成之后的差异。Control和Delta是两个不同的系统调用,输出显示了运行时各自使用的资源。您的Control系统调用是什么?Control系统调用是Delta系统调用的修改版本,它不抵消每个进程单独等待的休眠进程。只是想澄清一下,我的问题是delta系统调用没有记录很多信息,而控件记录了很多信息。