【问题标题】:How are clock_gettime and getrusage related?clock_gettime 和 getrusage 有什么关系?
【发布时间】:2018-12-31 09:32:05
【问题描述】:

我想了解如何在 Linux 中计算 CPU 时间。特别是,我想在这个问题上关注clock_gettimegetrusage。我想知道这两个是什么关系。

  • 一个人打电话给另一个人吗?
  • 它们是否都依赖于相同的底层机制?
  • 如果是这样,它们最大的共同点是什么,我的意思是,linux kernel 的什么函数是它们都调用以获取时间?
  • 如果它们不依赖于相同的底层机制,那又是为什么呢?

【问题讨论】:

  • clock_gettime() 通过vdso mechanism 调用,而getrusage() 调用相应的系统调用。
  • 我不知道,但我喜欢这个问题
  • 您提供的内核链接包含两个调用的源代码。
  • @stark 是的。但是对于不太了解内核的人来说,很难清楚地看到发生了什么。
  • @MiroslavMares 以及相应的系统调用有什么作用?

标签: c time linux-kernel clock rdtsc


【解决方案1】:

Unix 和 Linux 中有很多时钟。有些是挂钟(CLOCK_REALTIME),有些是修改后的挂钟(CLOCK_MONO,CLOCK_BOOT),有些是CPU时钟(CLOCK_PROCESS_CPUTIME_ID,CLOCK_THREAD_CPUTIME_ID)。

clock_gettime 基本上可以从任何分配了 clkid 的时钟中提取。 (在内核中,基本上有代码为每个 clkid 定义了一个适当的 get 方法供 clock_gettime 使用。)

我怀疑,但尚未证实,具有 CPU 时间相关 clkid 之一的 clock_gettimegetrusage 从相同的 CPU 计数器中提取。

依次回答您的问题:

一个人打电话给另一个人吗?

我不相信。

它们是否都依赖于相同的底层机制?

我相信是这样,但我还没有证实这一点。

如果是这样,它们最大的共同点是什么,我的意思是,它们都调用 linux 内核中的什么函数来获取时间?

我不确定。 (抱歉。我在所有这些方面的工作都集中在墙上时间,而不是 CPU 时间。)

如果他们不依赖相同的底层机制,那为什么?

因为Linux内核中与时间相关的代码非常复杂,并且试图服务于很多不同的主人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2013-07-02
    • 2017-02-06
    • 2022-01-03
    • 2020-03-05
    相关资源
    最近更新 更多