Linux 时钟管理
High resolution mode | ||
---|---|---|
periodic tick | tick_handle_periodic | hrtimer_interrupt |
dynamic tick | tick_nohz_handler | hrtimer_interrupt |
另外,在系统运行的过程中,可以通过查看 /proc/timer_list 来显示系统当前配置的所有时钟的详细情况,譬如当前系统活动的时钟源设备,时钟事件设备,tick device 等。也可以通过查看 /proc/timer_stats 来查看当前系统中所有正在使用的 timer 的统计信息。包括所有正在使用 timer 的进程,启动 / 停止 timer 的函数,timer 使用的频率等信息。内核需要配置 CONFIG_TIMER_STATS=y,而且在系统启动时这个功能是关闭的,需要通过如下命令激活"echo 1 >/proc/timer_stats"。/proc/timer_stats 的显示格式如下所示:
<count>, <pid> <command> <start_func> (<expire_func>)
总结
随着应用环境的改变,使用需求的多样化,Linux 的时钟子系统也在不断的衍变。为了更好的支持音视频等对时间精度高的应用,Linux 提出了 hrtimer 这一高精度的时钟子系统,为了节约能源,Linux 改变了长久以来一直使用的基于 HZ 的 tick 机制,采用了 tickless 系统。即使是在对硬件平台的支持上,也是在不断改进。举例来说,由于 TSC 精度高,是首选的时钟源设备。但是现代 CPU 会在系统空闲时降低频率以节约能源,从而导致 TSC 的频率也会跟随发生改变。这样会导致 TSC 无法作为稳定的时钟源设备使用。随着新的 CPU 的出现,即使 CPU 的频率发生变化,TSC 也可以一直维持在固定频率上,从而确保其稳定性。在 Intel 的 Westmere 之前的 CPU 中,TSC 和 Local APIC Timer 类似,都会在 C3+ 状态时进入睡眠,从而导致系统需要切换到其他较低精度的时钟源设备上,但是在 Intel Westmere 之后的 CPU 中,TSC 可以一直保持运行状态,即使 CPU 进入了 C3+ 的睡眠状态,从而避免了时钟源设备的切换。在 SMP 的环境下,尤其是 16-COREs,32-COREs 这样的多 CPU 系统中,每个 CPU 之间的 TSC 很难保持同步,很容易出现"Out-of-Sync"。如果在这种环境下使用 TSC,会造成 CPU 之间的计时误差,然而在 Intel 最新的 Nehalem-EX CPU 中,已经可以确保 TSC 在多个 CPU 之间保持同步,从而可以使用 TSC 作为首选的时钟源设备。由此可见,无论是现在还是将来,只要有需要,内核的时钟子系统就会一直向前发展。
- stm8s开发(五) TIMER的使用:定时!(09-18)
- STM8S Timer2_OC1_PWM1输出模式(12-03)
- TimerA流水灯问题分析(12-02)
- LPC2103之timer0 ang timer1(11-29)
- MSP430F5529 (六)定时器Timer_A-1(11-28)
- MSP430F5529 (六)定时器Timer_A-2(11-28)