高分辨率定时器

如果你有精确的计时要求,那么计时器分辨率很重要,这是实时应用的典型要求。 Linux 中的默认计时器是以可配置的频率运行的时钟,对于嵌入式系统,通常为 100 Hz,对于服务器和台式机,通常为 250 Hz。 两个计时器滴答之间的间隔是,称为jiffy,在前面给出的例子中,在嵌入式 SoC 上是 10 毫秒,在服务器上是 4 毫秒。

Linux 从 2.6.18 版的实时内核项目中获得了更精确的计时器,现在只要有高分辨率的计时器源代码和设备驱动程序,它们就可以在所有平台上使用--这几乎总是如此。 您需要使用CONFIG_HIGH_RES_TIMERS=y配置内核。

启用此功能后,所有内核和用户空间时钟都将精确到底层硬件的粒度。 很难找到实际的时钟粒度。 显而易见的答案是clock_getres(2)提供的值,但它总是要求 1 纳秒的分辨率。 稍后我将介绍的cyclictest工具有一个选项,可以分析时钟报告的时间以猜测分辨率:

cyclictest -R
Unable to change scheduling policy!
Probably missing capabilities, either run as root or increase RLIMIT_RTPRIO limits.

 

# cyclictest -R
# /dev/cpu_dma_latency set to 0us
WARN: reported clock resolution: 1 nsec
WARN: measured clock resolution approximately: 708 nsec

您还可以查看如下字符串的内核日志消息:

# dmesg | grep clock
OMAP clockevent source: timer2 at 24000000 Hz
sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956969942ns
OMAP clocksource: timer1 at 24000000 Hz
Switched to clocksource timer1

 

dmesg | grep clock
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x171024e7e0, max_idle_ns: 440795205315 ns
[    0.000001] sched_clock: 56 bits at 100MHz, resolution 10ns, wraps every 4398046511100ns
[    3.547681] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    3.618101] clocksource: Switched to clocksource arch_sys_counter
[   12.053175] rtc-efi rtc-efi: setting system clock to 2021-10-08 02:17:05 UTC (1633659425)

 

[root@centos7 ~]# dmesg | grep clock
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x171024e7e0, max_idle_ns: 440795205315 ns
[    0.000001] sched_clock: 56 bits at 100MHz, resolution 10ns, wraps every 4398046511100ns
[    4.502670] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    4.575639] clocksource: Switched to clocksource arch_sys_counter
[   13.261341] rtc-efi rtc-efi: setting system clock to 2022-01-06 04:02:14 UTC (1641441734)
[root@centos7 ~]# 

 

posted on 2022-03-11 10:21  tycoon3  阅读(550)  评论(0)    收藏  举报

导航