c - 为什么 Linux 内核中有 ktime_get 的粗略变体?

标签 c linux timer linux-kernel

我正在浏览以下链接:

https://www.kernel.org/doc/html/latest/core-api/timekeeping.html

我们有粗略 (ktime_get_coarse()) 和非粗略 (ktime_get()) 版本。

我们应该使用哪一个以及何时使用?

它说粗略版本比非粗略版本更快。

非粗略版本是否读取硬件计数器?

最佳答案

问:

Which one should we use and when?

您的链接似乎对此进行了很好的描述。
答:

These are quicker than the non-coarse versions, but less accurate.

因此,如果您需要快速且不关心准确性 - 请使用粗略(100HZ 时的误差最多为 10 毫秒,1000HZ 时的误差最多为 1 毫秒)。如果优先考虑准确性,则使用非粗略 API。

<小时/>

问:

Whether the non-coarse versions reads the hardware counter or not?

答:
ktime_get() (与 ktime_get_coarse() 不同)最终调用 timekeeping_get_delta()它读取时钟源 tk_clock_read() :

static inline u64 tk_clock_read(const struct tk_read_base *tkr)
{
    struct clocksource *clock = READ_ONCE(tkr->clock);

    return clock->read(clock);
}

在内部调用适当的回调以供硬件计时器读取。
您可以在源中通过时钟源 grep 搜索此类回调:grep -rnI 'read =' drivers/clocksource
例如。 here设置为tpu_clocksource_read() .

关于c - 为什么 Linux 内核中有 ktime_get 的粗略变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60166052/

相关文章:

android - KR070PC7S LCD 显示器的 Linux 或 Android 驱动程序

java - 如何更改本地 linux 服务器上的 java 版本

javascript - 在定时器中调用 lap 函数

c - 在多个 C 文件上运行自动化测试

c - 无法解析 header 中定义的 Eclipse C 常量

c - 关于 C 中的静态和共享库链接

java - 定时器到0时闪烁

c - C 中关系运算符的前缀与后缀。运算符结合性如何影响?

c++ - 吞吐量从 4k 下降到 9 条消息,调整了 adm 更改

visual-c++ - 如何在窗口中使用sys/time.h?