加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux中的getrusage(RUSAGE_THREAD,…)和clock_gettime(CLOCK_TH

发布时间:2020-12-13 23:19:40 所属栏目:Linux 来源:网络整理
导读:这个问题几乎说明了一切.根据getrusage()的手册页,它返回: struct timeval ru_utime; /* user CPU time used */ struct timeval ru_stime; /* system CPU time used */ 根据clock_gettime()的手册页,它返回: CLOCK_THREAD_CPUTIME_ID (since Linux 2.6.12)
这个问题几乎说明了一切.根据getrusage()的手册页,它返回:

struct timeval ru_utime; /* user CPU time used */
           struct timeval ru_stime; /* system CPU time used */

根据clock_gettime()的手册页,它返回:

CLOCK_THREAD_CPUTIME_ID (since Linux 2.6.12)
          Thread-specific CPU-time clock.

那么,(特定于线程)“用户/系统CPU使用时间”与特定于线程的CPU时钟有何不同?

显然,我在问,因为我看到了我移植到Linux(从自定义RTOS)的应用程序中两者之间的差异.该应用程序具有使用tick()和tock()函数实现的内部分析功能.正如我一直在研究这个问题,我已经贬低了我的应用程序的一部分:

tick()
// code commented out
tock()

tick()函数记录它运行的时间,tock()函数记录它运行的时间,计算两者之间的增量,并报告该增量.当我使用getrusage()实现tick()和tock()时,我得到的大部分都是0,偶尔会有1000us或10000us的值(根据我是否为1kHz或100Hz操作配置了我的内核).当我实现tick()& tock()使用clock_gettime(),我得到的值集中在大约13us(偶尔会有奇怪的偏移到75us或100us,但我稍后会处理).

我尝试在内核中启用高分辨率计时器以及VIRT_CPU_ACCOUNTING和/或VIRT_CPU_ACCOUNTING_GEN的各种组合.我看到的唯一影响是getrusage()报告的非零值从1000us变为以1000us为中心的更高精度值范围.

我终于切换到使用clock_gettime()并且有更多可信的结果,但我想知道为什么两个系统调用存在,以及为什么它们的行为如此不同.所以我想我应该问一些专家.

解决方法

What is the difference between getrusage(RUSAGE_THREAD,…) and
clock_gettime(CLOCK_THREAD_CPUTIME_ID,…) in Linux?

clock_gettime(CLOCK_THREAD_CPUTIME_ID,…)最终调用task_sched_runtime(p),它从p-> se.sum_exec_runtime获取计算的运行时间,其中struct task_struct * p是当前的.

getrusage(RUSAGE_THREAD,…)调用task_cputime_adjusted(current,& utime,& stime),其中存在两个定义[a],[b];使用它们取决于Linux内核配置项CONFIG_VIRT_CPU_ACCOUNTING_NATIVE:

Select this option to enable more accurate task and CPU time
accounting.

现在我们需要知道你的内核中是否选择了这个选项.无论如何,这两种情况看起来都与clock_gettime()使用的方法不同.

也就是说,我无法重现您的发现(我从两个系统调用中得到几乎相同的数字).示例程序可以进一步提供帮助.

So I figured I should ask some experts.

我想你会在Linux内核邮件列表上找到真正的专家.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读