[转]timer定时器、jiffies、HZ、Tick理解
[转]:http://blog.chinaunix.net/uid-29631743-id-5046593.html
1.前言
本文主要介绍几个跟定时器相关的重要概念:HZ Tick Jiffies
2. 几个主要概念
定时器是个相对时间,如果想获得真实系统时间,一般用RTC。
linux内核中,把timer interrupt绑定在IRQ 0上,然后衍生出每个cpu上一个local timer。
- HZ
用来定义每秒产生timer interrupts的次数,一般HZ为100、250居多。是否需要调整HZ,需要参考应用场景,可在编译内核时配置
- Tick
HZ的倒数,意即timer interrupt每发生一次中断的时间。如HZ为250时,tick为4毫秒(millisecond)。
- Jiffies
全局变量,被用来记录系统自开机以来,已经过的tick的总数。每发生一次timer interrupt,Jiffies变数会被加一,即一秒内增加的值就是HZ。
上面的几个变量都是可以互相转化的,如msecs_to_jiffies等等。
从上面的信息可以看出,linux的timer是个低精度的,理论上精度是ms级别的。
而timer的实现中,它是per cpu定时器矢量,并分tv1-5几个数组,分别组织超时时间的档位,以链表形式维护,它实际维护的是那个最先超时的timer的相对时间。当然新加入的定时器,是有机会修改这个值的,类似blk中req的deadline定时器(非cfq中的deadline)一样。本地timer超时,本地cpu会去处理。
对于这种低精度的定时器,内核还有高精度定时器支持,当然硬件也需要支持,精度在ns级别,一般用的很少。主要是看应用场景了。

浙公网安备 33010602011771号