我在使用TI AM3358进行Linux定时器中断方面的测试,TI的SDK版本号为 linux-am335x-AM335XPSP_04.06.00.08,linux内核版本在linux3.2.0基础上打了实时补丁PREEMPT_RT(3.2.0_rt10)。
测试的过程中发现,定时器中断偶尔会不能及时触发,DmTimer的设定时间为100us,实际定时器中断有时260us才到来。
测试的方法:使用dmtimer注册定时器中断,设置定时器间隔时间为100us,查看定时器中断到来时间,在定时器中断处理函数中再次启动定时器,循环测试。
测试结果:正常情况下,定时器中断都可以正常到来,但测试次数大于100万次(2min左右)时,会出现1~2次中断延迟160us左右的大延迟点。
我用linux的ftrace工具对此现象进行了分析,在附件中,请专家们帮忙进一步分析定位,不胜感激!
unicornx:
+1
Jian Zhou:
回复 unicornx:
也就是延时的概率是百万分之一,二?是不是有优先级高的进程打断了?
na wang2:
回复 Jian Zhou:
比较确定没有高优先级的进程打断,
首先,我调用chrt命令,已经将定时器中断线程的优先级调成98,基本是最高优先级。
其次,ftrace跟踪策略里面设置了irq 、sched事件跟踪,有任何中断、调度发生都会在log中有体现。
unicornx:
回复 Jian Zhou:
@Jian:
从ftrace的log中可以看到,应该是定时器中断出现了不能定时到达的问题,31136行的__irq_svc出现的时间比预期出现的时间晚了151us(定时器设置的周期是100us,也就是说这次定时器到期时间相比上次到期时间中间间隔了251us,>> 100us)。__irq_svc是IRQ异常跳转的最早的入口,它来晚了和内核应该没有关系吧。
我现在怀疑是BSP或者硬件中定时器中断控制器什么的不稳定导致定时器事件不准了,如果先不考虑是硬件问题,那么会不会是BSP的问题?
@Jian,从问题描述上看测试环境的开发板的内核是基于的linux-am335x-AM335XPSP_04.06.00.08这个基线做的,请问该基线的TI的BSP部分是否有过DMTimer定时器不准的bugfix,我们是否需要升级相关的TI补丁?
user5345614:
楼主,我也在做和你同样的测试,能否共享下你的代码参考下调试。
yongqing wang:
linux的代码分kernel空间和user空间
yongqing wang:
kernel空间的程序才能及时响应,user空间的程序是不保证时效性的
user4088432:
想请教一下哪里能找的到关于定时器例程?