timer frequency能否设为1MHZ??

duanbeibei 2007-08-29 10:46:47
内核配置选项中,时钟频率可选项为:100HZ,250HZ,1000HZ,但我想通过改源代码将其设为1MHZ,因为这样才能将时钟精确到微妙级,不知是否可行?
...全文
726 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tb01412 2007-08-31
  • 打赏
  • 举报
回复
你把频率调那么高,CPU忙得过来吗?????
想把时钟精确到微妙级,另想办法,比如启用另一个timer,然后为此timer写个驱动,从而达到你的"精确"要求,当然,这种精确并不是严格意义上的精确,因为进程调度还是按第一个timer的精度,不过这样能保证你在自己被调度的时间内得到想要的精度,但不能保证你的进程不被抢占(你可以在驱动中关闭中断的方式来改进,虽然有点野蛮,不过只要你占用CPU的时间是非常短的情况下,这一招还是可行的,否则就会极大可能丢失其它设备的中断),这样做还是有一个缺点:当你的程序从驱动中返回应用层时,依然有可能被抢占,从而不能达到你所想的精度,所以你需要在驱动中去做完你想要在指定时间内所必须要响应的事情了,这就需要技巧了,因为有些在应用层中要做的事情到了驱动中会变得很难办)
hefuhua 2007-08-30
  • 打赏
  • 举报
回复
5./usr/src/linux$ vim include/net/inet_timewait_sock.h
hefuhua 2007-08-30
  • 打赏
  • 举报
回复
1./usr/src/linux$ make menuconfig
假如你选择的是CONFIG_HZ_1000=y CONFIG_HZ=1000

2.make clean

3./usr/src/linux$ vim include/linux/autoconf.h
找到#define CONFIG_HZ_1000 1这行注销或这删除如:/*#define CONFIG_HZ_1000 1*/
找到#define CONFIG_HZ 1000 修改为 #define CONFIG_HZ 1000000

4./usr/src/linux$ vim include/linux/jiffies.h
#elif HZ >= 768 && HZ < 1536
# define SHIFT_HZ 10
#else


#elif HZ >= 768 && HZ < 1536
# define SHIFT_HZ 10
#elif HZ >=1536
# define SHIFT_HZ 10
#else

5.
#if HZ <= 16 || HZ > 4096
# error Unsupported: HZ <= 16 or HZ > 4096
...
改为
#if HZ <= 16
# error Unsupported: HZ <= 16 or HZ > 4096
...

6.编译通过运行下看看效果
duanbeibei 2007-08-30
  • 打赏
  • 举报
回复
我是想改成1000000,不是1
hzcpig 2007-08-30
  • 打赏
  • 举报
回复
mark

记得在看linux定时器机制的时候说,可以调整linux内核时钟频率,但是频率高了,性能未必好,通常在100-1000Hz
hefuhua 2007-08-30
  • 打赏
  • 举报
回复
注意:内核版本linux-2.6.21.5
建议:该版本的内核HZ最少为12那么这个值也是经过骇客们测试来的,
觉得如果你强行一定要设置成1相反在时间和性能不一定会提高

再加:第5部前面
4.1 /usr/src/linux$ vim include/net/inet_timewait_sock.h
注销下面
/*#if HZ <= 16 || HZ > 4096
# error Unsupported: HZ <= 16 or HZ > 4096*/
...
改为
#if HZ > 4096
# error Unsupported: HZ <= 16 or HZ > 4096
#elif HZ <=16
# define INET_TWDR_RECYCLE_TICK (4 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
...


hefuhua 2007-08-30
  • 打赏
  • 举报
回复
1./usr/src/linux$ make menuconfig
假如你选择的是CONFIG_HZ_1000=y CONFIG_HZ=1000

2./usr/src/linux$ vim include/linux/autoconf.h
找到#define CONFIG_HZ_1000 1这行注销或这删除如:/*#define CONFIG_HZ_1000 1*/
找到#define CONFIG_HZ 1000 修改为 #define CONFIG_HZ 1

3./usr/src/linux$ vim include/linux/jiffies.h
if HZ >= 12 && HZ < 24
# define SHIFT_HZ 4
..
这段修改为
#if HZ >= 1 && HZ < 12
# define SHIFT_HZ 3
#elif HZ >= 12 && HZ < 24
# define SHIFT_HZ 4
..
/*内核里最小设置为12所以你得加上上面1-11而定义SHIFT_HZ宏*/

4./usr/src/linux$ vim arch/i386/kernel/apic.c
注销LAPIC_CAL_LOOPS设置其直为1
/*#define LAPIC_CAL_LOOPS (HZ/10)*/
#define LAPIC_CAL_LOOPS 1

5.make
duanbeibei 2007-08-30
  • 打赏
  • 举报
回复
多谢老兵哥支持,我自己在研究研究
hzcpig 2007-08-30
  • 打赏
  • 举报
回复
精神可嘉~~~~
hefuhua 2007-08-30
  • 打赏
  • 举报
回复
HZ=1000000和HZ=1
编译成功,运行失败,并且把系统弄崩溃,整了半天,郁闷

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧