[转]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级别,一般用的很少。主要是看应用场景了。

posted @ 2017-07-10 11:13  jasonactions  阅读(1225)  评论(0)    收藏  举报