我是靠谱客的博主 香蕉心情,这篇文章主要介绍深入Linux内核架构笔记-动态时钟,现在分享给大家,希望可以做个参考。

Overview

为节省系统功耗,只在有些任务需要实际执行时,才激活周期时钟,否则会临时禁用周期时钟,对该技术的支持可以在编译时选择,启用此选项的系统也称无时钟系统。
判断原则:当系统调度选择IDLE进程来运行时,动态时钟系统会禁用周期时钟,直到下一个定时器即将到期为止

数据结构

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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表示时钟周期已经停用,即当前没有什么基于周期时钟的工作要做

实现

Y
N
cpu_idle
tick_nohz_stop_sched_tick
!need_resched
pm_idle
tick_nohz_restart_sched_tick
Y
irq_exit
!in_interrupt && idle_cpu && !need_resched
tick_nohz_stop_sched_tick

问题

ts->tick_stopped = 1 : 进入IDLE,并且下一次定时器的时间超过1个Jiffy, 但是只有在ts->tick_stopped = 1 的时候才会停止周期时钟,如果当前ts->tick_stopped等于0,因为有周期时钟的存在,感觉很难有机会执行: ts->tick_stopped = 1

最后

以上就是香蕉心情最近收集整理的关于深入Linux内核架构笔记-动态时钟的全部内容,更多相关深入Linux内核架构笔记-动态时钟内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部