免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6269 | 回复: 7
打印 上一主题 下一主题

jiffies问题 [复制链接]

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-10 19:57 |只看该作者 |倒序浏览
jiffies的作用是用来记录自系统启动以来产生的节拍总数,那么使用INITIAL_JIFFIES作为初始值,运行5分钟才能溢出,也就是说自系统启动以来产生的节拍数应该是jiffies+5分钟内产生的节拍数 ? 求指点!

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
2 [报告]
发表于 2011-12-11 22:54 |只看该作者
本帖最后由 linuxfellow 于 2011-12-12 00:19 编辑

回复 1# embeddedlwp
刚刚转向linux,好多linux的代码都不是很熟,我的回答只是基本的,并不针对linux源代码。
什么是系统节拍? system tick
系统节拍是内核/系统能有效运用的最小时间单位。如果一个CPU主频264M, 那么系统硬件能区分的最小时间片断就是1/(264M),这个最小的时间段叫timebase; 这个时间太小,基本上只能让timebase计数器+1, 其他任何事情都干不了。

内核/系统有一些事情是要定期去做:
定期刷新看门狗
给periodic task发送唤醒事件
检查soft alram 等

设计系统/内核必须决定这些rountine事情的频率;做得太勤,太多CPU的运算能力花在这些事情上,影响系统的performance. 做得太慢,就会影响系统对事件反应能力,影响实时功能。这个频率就是系统节拍,system tick. 系统选定一个timer作为 system timer。在264MHzCPU的实时系统里,我选1ms作为system tcik频率。system timer每1ms中断一次,在system  timer的中断处理程序里,我处理前面列出的那些rountine事情,并把jiffies++; 这就是说,我的jiffies是每1ms增加一次。

回到你的问题:
初始化 jiffies =INITIAL_JIFFIES
最大非溢出计数:如果jiffies变量类型是32位无符号int
   max_count = 0xffffffff
or
max_count = 0xffffffff ffffffff (64-bit)
如果没有溢出,系统启动后运行的节拍数:
jiffies - ITIAL_JIFFIES
系统启动来5分钟的节拍数就是(到jiffies溢出的前一拍):
max_count - INITIAL_JIFFIES

因为系统节拍从INITIAL_JIFFIES开始计数,运行的节拍数应该是你读到的节拍数扣除起始值。

多说了一点,给了一些系统节拍的背景,希望能有帮助

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
3 [报告]
发表于 2011-12-12 09:35 |只看该作者
回复 2# linuxfellow


    LKD2 P128 说“全局变量jiffies用来记录自系统启动以来产生的节拍的总数。启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值”。

    那么这里的全局变量jiffies用来记录自系统启动以来产生的节拍的总数 应该就不准确了。
    如果在5min之内应该为:
    jiffies - INITIAL_JIFFIES
    如果大于5min为:
    maxcount - INITIAL_JIFFIES + jiffies

    内核将该变量初始化为0 这句自然也不对喽

    ULK3上有这么一句“一般而言,短的节拍产生高分辨率的定时器,短的节拍需要CPU在内核态花费更多的时间,也就是在用户态花费较少的时间。因而,用户程序运行的稍慢一些”。

    不知这句怎么理解啊, 进程不是都靠优先级,时间片吗?是不是说每次都处理时钟中断,也就是上边您列出的那些步骤,这些是在内核态的。剩下的时间由进程们分。所以内核态用的时间多了?

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
4 [报告]
发表于 2011-12-12 10:20 |只看该作者
本帖最后由 linuxfellow 于 2011-12-12 10:47 编辑

回复 3# embeddedlwp


    如果INITIAL_JIFFIES=0, 那么书上说的就都准确了。写书的人直接就认为初值为0。内核启动时,按理jiffies应该赋0

系统节拍的问题,就和我说的一样; 选择tick频率很重要。内核在每个system timer周期要做的日常事务是固定的。我举的那些例子是我原来设计系统时做的;linux可能做的事情大同小异。总之内核在每个system timer周期会用固定时间做一些它必须做的日常事务。如果假定内核做完这些日常事务要用100us。在这个假定下,如果system timer周期是1ms, 那么每1ms中有100us,10%的CPU计算能力就让内核用于做这些日常事务了。如果如果system timer周期是10ms,  那么只有1%的CPU计算能力让内核用于做这些日常事务了;这样分给其他中断,进程(用户或内核进程)就多了。这就是system tick频率对系统性能的影响。

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
5 [报告]
发表于 2011-12-12 10:31 |只看该作者
回复 4# linuxfellow


    LKD2是基于 linux 2.6.10写的,刚才看了一下Linux 2.6.10里:
  1. #define INITIAL_JIFFIES ((unsigned long)(unsigned int) (-300*HZ))
复制代码
跟ULK3(Linux 2.6.11)的定义是一样的,所以是不是LKD2的作者讲错了啊?

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
6 [报告]
发表于 2011-12-12 10:58 |只看该作者
回复 4# linuxfellow


    谢谢!


5楼的问题呢?

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
7
发表于 2011-12-12 11:36
回复  linuxfellow


    谢谢!


5楼的问题呢?
embeddedlwp 发表于 2011-12-12 10:58

这里jiffies初始化为-300,如果tick周期为1s, 5分钟tick counter就溢出。这样做的目的只有一个解释:有意让溢出早点发生。如果溢出时有问题的话,就可以及早发现

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
8 [报告]
发表于 2011-12-13 11:44 |只看该作者
回复 6# embeddedlwp
   
初始值给一个小负数,如-300 ,解释只有一个:有意让溢出早点发生;这样要是溢出时有问题开始几分钟就发现了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP