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

概述

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表示时钟周期已经停用,即当前没有什么基于周期时钟的工作要做

实现

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内核架构笔记-动态时钟所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部