概述
Overview
为节省系统功耗,只在有些任务需要实际执行时,才激活周期时钟,否则会临时禁用周期时钟,对该技术的支持可以在编译时选择,启用此选项的系统也称无时钟系统。
判断原则:当系统调度选择IDLE进程来运行时,动态时钟系统会禁用周期时钟,直到下一个定时器即将到期为止
数据结构
struct 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内核架构笔记-动态时钟所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复