您的位置 首页 数字

你了解CONFIG_HZ 和 USER_HZ的差异?

你了解CONFIG_HZ 和 USER_HZ的区别?-内核时钟的频率是由CONFIG_HZ决定的,以前默认是100HZ,现在内核默认是250HZ。而1个jiffy是1个时钟滴答,时间间隔是有CONFIG_HZ决定的,频率是250HZ,也就是周期为4ms。

 内核时钟的频率是由CONFIG_HZ决议的,曾经默许是100HZ,现在内核默许是250HZ。而1个jiffy是1个时钟滴答,时刻距离是有CONFIG_HZ决议的,频率是250HZ,也便是周期为4ms。每4ms,添加一个时钟滴答,也即jiffies++。
   原理比较简单,怎么检查自己的Linux的CONFIG_HZ的值呢?  

root@manu:~/code/c/self/ticks# grep ^CONFIG_HZ /boot/config-3.2.0-29-generic-pae 

CONFIG_HZ_250=y

CONFIG_HZ=250

有意思的是,systemtap tutorial有个比较好玩的试验,也能够确认CONFIG_HZ的巨细。  

global count_jiffies, count_ms

probe TImer.jiffies(100) { count_jiffies ++ }

probe TImer.ms(100) { count_ms ++ }

probe TImer.ms(543210)

{

hz=(1000*count_jiffies) / count_ms

printf (“jiffies:ms ratio %d:%d => CONFIG_HZ=%d\n”,

count_jiffies, count_ms, hz)

exit ()

}

输出如下:

jiffies:ms ratio 1358:5420 => CONFIG_HZ=250

试验等候的时刻有点久,需求等候543210ms,9分钟左右,时刻越久,差错越小,假如等候的时刻段一些,会呈现差错。感兴趣的筒子自行试验。
   除此外,还有一个值是USER_HZ,不了解这个的,可能会了解TImes体系调用,这个体系调用是计算进程时刻耗费的,

#include 

clock_t times(struct tms *buf);

times体系调用的时刻单位是由USER_HZ决议的,所以,times体系调用计算的时刻是以10ms为单位的。说100HZ空口无凭,怎么获取USER_HZ。  

#include

#include

#include

#include

#include

int main()

{

int user_ticks_per_second ;

user_ticks_per_second = (int)sysconf(_SC_CLK_TCK);

if(user_ticks_per_second == -1)

{

fprintf(stderr,”failed to get ticks per second by sysconf\n”);

return -1;

}

printf(“The Number of USER ticks per second is %d\n”,user_ticks_per_second);

return 0;

}

输出如下:  

The Number of USER ticks per second is 100

假如你嫌用C代码调用SYSCONF太麻烦了,能够经过shell指令getconf取得USER_HZ的值:    

root@manu:~/code/c/self/ticks# getconf CLK_TCK

100

times体系调用来计算进程信息我不主张使用了,精度太低了。提出这个USER_HZ,仅仅期望不要困惑,为什么CONFIG_HZ是250,而sysconf(_SC_CLK_TCK)却是100.

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/90247.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部