我正在通过以下链接:
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
重复搜索的源中搜索此类回调。例如。 here是
tpu_clocksource_read()
的设置。关于c - 为什么在Linux内核中有ktime_get的粗略变体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60166052/