jiffies和NO_HZ
来源:互联网 发布:数据统计分析员招聘 编辑:程序博客网 时间:2024/05/16 08:13
Linux内核中很多事件都是时间驱动的, 通俗讲就是动作的发生都要以时间为条件, 例如延迟, 定时以及周期执行等.
jiffies
为了让内核能够感知时间, 硬件提供了时钟发生器, 它可以被编程以某个固定频率自行触发时间中断, 然后内核藉由中断服务程序来处理时间驱动的事件. 时钟发生器的频率就是HZ, 意味着时钟发生器每HZ分之一秒产生一个节拍, 而自系统启动以来产生的总节拍数就是全局变量jiffies.
jiffies变量的类型是unsigned long, 如果体系结构为32位, 时钟频率为1000, 这个变量大概50天后就会溢出. 所以使用jiffies的关键是不要直接进行比较而要使用内核提供的宏, 例如:
<linux/jiffies.h>#define time_after(a,b) ...#define time_before(a,b) ...#define time_in_range(a,b,c) ...
NO_HZ
回过来说HZ, 它的值应该被设定为多少呢? 频率低了的话, 精度不够, 影响整个系统的实时性; 频率高虽然能提高精度和实时性, 但又会造成系统负担过重, 大量的时间被用来处理时钟中断服务程序. 而且由于使用场景的不同, HZ并没有一个通用的理想值, 内核的默认值也曾多次改变.
为了兼顾实时性和能耗, 内核从2.6.17开始引入了tickless的特性, 也被称为NO_HZ. 发展到现在(3.10之后, 目前3.12), 内核为此功能提供了三个选项:
- CONFIG_HZ_PERIODIC, 每个节拍都不会被忽略.
- CONFIG_NO_HZ_IDLE, 默认设置, 节拍在空闲的CPU上会被忽略.
- CONFIG_NO_HZ_FULL, 节拍在空闲的或者只有一个可执行任务的CPU上会被忽略.
之所以默认启用是因为tickless有着立竿见影的好处, 省电和降低负载, 尤其是在移动, 虚拟化和高性能运算等环境下.
ref:
1, https://lwn.net/Articles/549580/
2, https://www.kernel.org/doc/Documentation/timers
0 0
- jiffies和NO_HZ
- linux定时器和Jiffies
- linux定时器和Jiffies
- jiffies
- jiffies
- jiffies
- jiffies
- jiffies
- jiffies
- jiffies
- jiffies
- jiffies
- 度量时间差和jiffies计数器
- jiffies 和 jiffies_64 的联系与区别
- linux中HZ,Tick和Jiffies简析
- 关于volatile和(*(unsigned long *)&jiffies)++
- 关于volatile和(*(unsigned long *)&jiffies)++
- 在 kernel中如何定时, 变量 HZ 和 jiffies
- 【Android Dev Guide - 04】 - Media - 学习使用MediaPlayer播放音乐
- 解决数据库保存中文的问题
- PHP模糊匹配
- Cocos2.2.3在线下载——sd卡容量判定
- import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包
- jiffies和NO_HZ
- ENVI学习资料和网站
- 安卓平台下访问StreamingAssets目录下文件
- Android如何修改包名??
- 目前游戏行业内部主要几款游戏引擎的技术对比
- LINUX 记录操作历史记录
- Android Paint
- Masonry介绍与使用实践:快速上手Autolayout
- 让自己充满活力的方法