linux源码分析之节拍率 -- param.h
内核在 <asm/param.h> 中定义了 HZ 的值。我们接下来就来比较一下具体源码:
1、arm 体系结构(文件路径:/arm/include/asm/param.h)
#ifndef __ASM_PARAM_H #define __ASM_PARAM_H #ifdef __KERNEL__ # define HZ CONFIG_HZ /* Internal kernel timer frequency */ # define USER_HZ 100 /* User interfaces are in "ticks" */ # define CLOCKS_PER_SEC (USER_HZ) /* like times() */ #else # define HZ 100 #endif #define EXEC_PAGESIZE 4096 #ifndef NOGROUP #define NOGROUP (-1) #endif /* max length of hostname */ #define MAXHOSTNAMELEN 64 #endif
可以看到,在 arm 体系结构中,系统定时器频率默认值为100,即时间中断的频率就是100 HZ。
2、x86体系结构(文件路径: /x86/include/asm/param.h)
#include <asm-generic/param.h> 文件路径:/include/asm-generic/param.h #ifndef __ASM_GENERIC_PARAM_H #define __ASM_GENERIC_PARAM_H #ifndef HZ #define HZ 100 #endif #ifndef EXEC_PAGESIZE #define EXEC_PAGESIZE 4096 #endif #ifndef NOGROUP #define NOGROUP (-1) #endif #define MAXHOSTNAMELEN 64 /* max length of hostname */ #endif /* __ASM_GENERIC_PARAM_H */
可以看到,在x86体系结构中,系统定时器频率默认值为100,即时间中断的频率就是100 HZ。
3、alpha (文件路径:/alpha/include/asm/param.h)
#ifndef _ASM_ALPHA_PARAM_H #define _ASM_ALPHA_PARAM_H #ifdef __KERNEL__ #define HZ CONFIG_HZ #define USER_HZ HZ #else #define HZ 1024 #endif #define EXEC_PAGESIZE 8192 #ifndef NOGROUP #define NOGROUP (-1) #endif #define MAXHOSTNAMELEN 64 /* max length of hostname */ #ifdef __KERNEL__ # define CLOCKS_PER_SEC HZ /* frequency at which times() counts */ #endif #endif /* _ASM_ALPHA_PARAM_H */
可以看到, alpha 机型的节拍率为1024.
总结:
对比以上三种不同体系结构,发现体系结构不同,HZ的值会有所改变。节拍率越高,不但能够提高时间驱动的准确性,而且提高了时间驱动事件的解析度;但是这也意味着中断处理程序占用的处理器时间越多,系统的负担越重。
另外,HZ 的值不是固定不变的,大多数体系结构的节拍率是可调的。当编译内核时设置了 CONFIG_HZ 选项,系统不是每隔固定的时间间隔触发时钟中断,而是根据这个选项动态调度时钟中断。对于无节拍的系统,在空闲期间不会被不必要的时间中断打断,这样做有利于减少系统开销,即节省能耗,达到省电的效果。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。