Overview
为节省系统功耗,只在有些任务需要实际执行时,才激活周期时钟,否则会临时禁用周期时钟,对该技术的支持可以在编译时选择,启用此选项的系统也称无时钟系统。
判断原则:当系统调度选择IDLE进程来运行时,动态时钟系统会禁用周期时钟,直到下一个定时器即将到期为止
数据结构
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16struct tich_sched { struct hrtimer shed_timer; enum tick_nohz_mode nohz_mode; ktime_t idle_tick; int tick_stoppded; unsigned long idle_jiffies; unsigned long idle_calls; unsigned long idle_sleeps; ktime_t idle_entrytime; ktime_t idle_sleeptime; ktime_t sleep_length; unsinged long last_jiffies; unsiged long next_jiffies; ktime_t idle_expires }
- sched_timer : 用于实现时钟的定时器
- nohz_mode:
- NOHZ_MODE_INACTIVE : 周期时钟处于活动状态
- NOHZ_MODE_LOWRES : 动态时钟是基于低分辨率的定时器
- NOHZ_MODE_HIGHRES : 动态时钟是基于高分辨率的定时器
- idle_tick : 在周期时钟禁用前,上一个时钟信号的到期时间,
- tick_stopped : 1表示时钟周期已经停用,即当前没有什么基于周期时钟的工作要做
实现
问题
ts->tick_stopped = 1 : 进入IDLE,并且下一次定时器的时间超过1个Jiffy, 但是只有在ts->tick_stopped = 1 的时候才会停止周期时钟,如果当前ts->tick_stopped等于0,因为有周期时钟的存在,感觉很难有机会执行: ts->tick_stopped = 1
最后
以上就是香蕉心情最近收集整理的关于深入Linux内核架构笔记-动态时钟的全部内容,更多相关深入Linux内核架构笔记-动态时钟内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复