分类: LINUX
2012-05-01 21:00:35
以下是阅读LKD对内核定时器(时钟)频率的阐述之后作的简要总结:
1. 内核定时器频率在
2. 以x86体系为例,默认的内核定时器频率为100HZ,不过,根据需要,可以定义更高的频率,而更高的频率对于系统性能具有以下的影响:
a. 假设将频率提高到1000HZ,那么每2个定时器中断之间的时间间隔为1s/1000=1ms, 相对于原来的10ms(100HZ情况),其可以达到更细的计时精度。
具体来说,当程序使用诸如poll()和select()的系统调用时,由于这两个调用采用了系统定时器中断作为超时计数,假设poll()的超时时限是20ms, 那么当调用poll时,如果正好处在2个定时器中断之间时,平均情况下,需要等待5ms时间下一个中断才会到达并开始计时,于是实际上poll总共等待了25ms的时间,影响了程序性能;若采用1000HZ的频率,当poll同样在两个中断之间开始申请计时时,由于中断粒度是1ms,所以平均情况下只需要等待0.5ms下一个中断便到来,实际上总共等待了10.5ms, 延误的时间比100HZ的情况缩小了10倍.
b. 基于a中同样的原理,若进程A正在执行,而调度程序需要在2ms之后让进程B抢占A获得CPU资源,那么在100HZ的情况下,调度程序最坏情况下需要等待10ms下一个定时器中断才会到来,此时才能进行抢占;在1000HZ的情况下,调度程序最多延误1ms即可抢占,这样大大提高了进程调度的效率
3. 高HZ的时钟频率,相当于每秒钟产生更多的定时器中断,那么系统将更频繁地调用中断处理程序,“这样不仅减少了处理器处理其他工作的时间,而且还会频繁地打乱处理器高速缓存并增加耗电”。然而也需要根据实际情况分析,如果提高时钟频率所产生的额外负载相对于当前系统的负载而言小之又小,那么提高时钟频率完全是明智的做法。
4. Linux内核还提供了一个叫“无节拍操作”的选项,也就是不指定固定的时钟频率,而是让系统动态地调节频率:若当前系统的时钟频率为100HZ(10ms), 若在50ms内系统都处于空闲状态,那么系统会自动将时钟频率降低到20HZ(50ms)以减少电量的消耗,这在移动设备上面是有积极意义的。