免费注册 查看新帖 |

Chinaunix

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

1ms中断延迟问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-20 14:53 |只看该作者 |倒序浏览
遇到个问题,详情如下:  

1)x86-64的多核SMP机器, 外接一个1ms中断发生器,也就是说,每1ms会发送一个中断给cpu


2)中断注册为19号中断 request_irq


3)每次进入19号中断处理函数,都打印一下当前cpu时间戳tsc的值




结果发现,每次tsc的间隔,很多都比较大,比1ms的cpu周期大很多,同时用硬件示波器看到,硬件1ms中断

是正常产生了的。 也就是说,系统并没有及时响应1ms中断


请问这是什么原因?

论坛徽章:
0
2 [报告]
发表于 2010-01-20 18:49 |只看该作者
3)每次进入19号中断处理函数,都打印一下当前cpu时间戳tsc的值

打印很耗时的,把打印操作放在软中断里做.

论坛徽章:
0
3 [报告]
发表于 2010-01-20 21:16 |只看该作者
可以中断服务程序中加个计数器撒,,,累加10个或者100个中断再打印一次时间戳;

论坛徽章:
0
4 [报告]
发表于 2010-01-20 21:57 |只看该作者
估计软中断也运行不了,3L方法不错

论坛徽章:
0
5 [报告]
发表于 2010-01-21 12:11 |只看该作者
为什么要在中断上下文里面去打印呢? 记在内存里,做个proc文件,然后让用户程序去读。

论坛徽章:
0
6 [报告]
发表于 2010-01-21 14:31 |只看该作者
没有用时间戳了,采用do_gettimeofday,在每次中断里获取时间保存到数组里,

中断发生1000次后,开始打印数组结果


发现还是延迟

论坛徽章:
0
7 [报告]
发表于 2010-01-21 15:25 |只看该作者
1ms不会差出到2ms吧?
有多少误差?

论坛徽章:
0
8 [报告]
发表于 2010-01-21 21:23 |只看该作者
如果要达到示波器那样的效果,获取时间值最好直接读硬件RTC寄存器,另外这个中断的优先级要最高。

论坛徽章:
0
9 [报告]
发表于 2010-01-24 10:21 |只看该作者
现在的测试,尝试了两套方案:

1) 每次进入1ms中断,就记录一下gettimeofday的值,当记录完毕10w次后,打印相邻两次中断的间隔。
    结果发现出问题的时候,两次1ms中断间隔基本都是10多微秒。
    也就是说,现在看起来,两次1ms中断,在很短的时间内,被连续触发了?

2) 每次进入1ms中断,累加一个全局变量,同时也记录时钟jiffies的变化。  
     当测试结束时,比较jiffies和1ms中断的次数。

    由于我的时钟中断设置的是250HZ,也就是说,4ms会来一次时钟中断。那么,同样时间长度下,1ms中断(1000HZ)来的次数,应该是时钟中断的次数的4倍

    也就是,count = 4 * jiffies

    然而发现,count的值远大于jiffies的4倍,这就和第一种测试方法吻合,似乎是在很短时间内,1ms中断源,连续往cpu发送的多次中断


然而用示波器,又显示1ms中断发生波形是正常的,没有突发的连续发送中断的情形

这是怎么一回事?  实在感到匪夷所思

论坛徽章:
0
10 [报告]
发表于 2010-01-24 10:21 |只看该作者
之前是靠读取TSC寄存器来做的,还是发现有较大的误差  RTC寄存器的话,最多只能到秒级别吧

[ 本帖最后由 wilbur512 于 2010-1-24 10:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP