你了解CONFIG_HZ和USER_HZ的区别?

内核     时钟   的频率是由CONFIG_HZ决定的,以前默认是100HZ,现在内核默认是250HZ。而1个jiffy是1个时钟滴答,时间间隔是有CONFIG_HZ决定的,频率是250HZ,也就是周期为4ms。每4ms,增加一个时钟滴答,也即jiffies++。
原理比较简单,如何查看自己的     Linux   的CONFIG_HZ的值呢?

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

CONFIG_HZ_250=y

CONFIG_HZ=250

有意思的是,sys     te   mtap tutorial有个比较好玩的实验,也可以确定CONFIG_HZ的大小。

global count_jiffies, count_ms

probe  TI mer.jiffies(100) { count_jiffies ++ }

probe  TI mer.ms(100) { count_ms ++ }

probe  TI mer.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,不了解这个的,可能会了解  TI mes系统调用,这个系统调用是统计进程时间消耗的,

#include

clock_t times(struct tms *buf);

times系统调用的时间单位是由USER_HZ决定的,所以,times系统调用统计的时间是以10ms为单位的。说100HZ空口无凭,如何获取USER_HZ。

#include

#include

#include

#include

#include

int m     ai   n()

{

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.



你了解CONFIG_HZ和USER_HZ的区别?_设计制作_可编程逻辑
42
165
0
64

相关资讯

  1. 1、《寂静之地》:制造噪音是人类的天性2795
  2. 2、《因为爱情》蒋毅海陆首度合作演绎虐心情人3462
  3. 3、前TVB力捧花旦生日收粉丝送恐怖蛋糕寓意能走出丧犬之痛584
  4. 4、单日票房从领衔7亿到被反超3亿,《唐探3》经历最刺激春节档3721
  5. 5、这部喜剧色彩的二战片,拍出了最悲伤的现实2940
  6. 6、罗素兄弟餐厅开业不仅来了半个复联,连冯小刚和这位大佬都去捧场474
  7. 7、五一档厮杀激烈,张艺谋也没能抢到预售第一,谁能笑到最后?1590
  8. 8、卢靖姗退出,《战狼3》嘉宾敲定,吴京回归或成最大惊喜3908
  9. 9、易烊千玺3次哭戏大不同!新片世间有她眼泪太绝,网友:演技好牛4594
  10. 10、职场小白逆袭女总监,娃娃脸谭松韵一改往日风格,成熟感溢出屏幕1878
全部评论(0)
我也有话说
0
收藏
点赞
顶部