我正在通过以下链接:

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

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

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

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

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

最佳答案

问:


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


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


  它们比非粗略版本要快,但准确性较差。


因此,如果您需要快速而又不关心准确性,请使用粗略的选项(100HZ时精度最高可达10ms,而1000HZ时精度最高可达1ms)。如果精度是重中之重,则使用非粗略API。



问:


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


A:
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);
}


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

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

10-11 22:09