内核高分辨率定时器
文章目录
- 内核高分辨率定时器
- 1、高分辨率定时器介绍
- 2、高分辨率定时器API
- 2.1 初始化定时器
- 2.2 启动定时器
- 2.3 停止定时器
- 2.4 改变定时器超时时间
- 2.5 定时器状态检查
- 3、驱动实现
- 4、驱动验证
在前面的文章中,我们知道了如果在Linux内核中使用定时器。本文将详细介绍Linux内核中另外一种定时器:高分辨率定时器(High Resolution Timer (HRT/hrtimer))。
1、高分辨率定时器介绍
Linux内核中为什么有两种定时器,这两种定时器为什么不能合并在一起?因为在内核定时器中使用了Cascading Timer Wheel (CTW)。 级联定时器轮 (CTW) 代码根本不适合合并这两个定时器的方法。 因为高分辨率定时器维护的是timer的一个按时间排序的数据结构(timer按时间顺序插入,尽量减少激活时的处理)。 使用的数据结构是红黑树,非常适合以性能为中心的应用程序(并且恰好作为内核中的库提供)。
内核计时器绑定到 jiffies。 但是高分辨率定时器 (HRT) 受限于 64 位纳秒分辨率。
从内核版本 2.6.21 开始,高分辨率计时器 (HRT) 在 Linux 下可用。 为此,必须在启用配置参数 CONFIG_HIGH_RES_TIMERS
的情况下编译内核。有很多方法可以检查高分辨率定时器是否可用:
- 在 /boot 目录中,检查内核配置文件。 它应该有像 CONFIG_HIGH_RES_TIMERS=y 这样的一行。
- 检