免费注册 查看新帖 |

Chinaunix

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

[内核模块] wake_up_process无法换醒进程,用什么工具来跟踪LTTng vs Ftrace? [复制链接]

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-02-11 23:31 |只看该作者 |倒序浏览
本帖最后由 wLiu2007 于 2015-02-11 23:33 编辑


系统有一个1ms的外部硬件中断送过来,在1ms中断处理函数(上半部)里面去换醒用户态实时进程;即
hw_1ms_isr()
{
        其它处理代码;
        wake_up_process(AAA);
}

进程AAA的写法:
AAA()
{
        while(1)
        {
                wait_1ms_wakeup(); //这个函数就是系统调用,设置task状态为TASK_INTERRUPTIBLE,执行schedule
                处理引用逻辑;
        }
}


目前有个问题,当系统负载不高的时候,工作很正常,每个1ms用户态的进程AAA都能够被换醒,被执行;
可当系统负载变高以后,hw_1ms_isr调用了wake up process函数,但是用户进程AAA存在周期性的不能被换醒;周期是1s时间,每1s时间会有连续的20~50个无法换醒;
这个问题比较奇怪,进程AAA是一个实时任务,调度测试为SCHEDULE_FIFO,优先级是所有任务中最高的,按说hw_1ms_isr上半部处理完了,然后再处理softirq之后,进程应该能够马上被换醒,为什么会无法换醒?而且周期还是1s时间

想请教下各位:
1.中断里面调用了wake up,但是进程无法换醒,这段时间cpu在做什么事情,用什么trace工具可以分析,LTTng 还是 Ftrace,没有用过这2个工具,两个工具有什么区别?
2,内核里面有什么周期是1s的事情吗,而且处理啊时间需要几十个ms的?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2015-02-12 08:29 |只看该作者
负载高时具体是些什么负载~
虽然你的进程优先级高,但会被中断,如果还有其它类似网络的负载(依赖软中断处理),那就不能保证及时调度了。
linux本身就是非实时的,难以保证实时性。

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2015-02-12 10:28 |只看该作者
本帖最后由 wLiu2007 于 2015-02-12 10:29 编辑

补充下:
板子是Powerpc双核的,1.2GHz,负载是网卡收包也就100Mbps网卡收包,然后用户态进程对包做处理,
系统打了实时补丁,网卡收包的软中断都线程化了,且优先级比这个要换醒的进程还低

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
4 [报告]
发表于 2015-02-12 19:51 |只看该作者
回复 3# wLiu2007


    好久没来了。中断开销也不少呀,还由换醒开销。 1ms来说对LInux是不能满足的,你别去想了。

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
5 [报告]
发表于 2015-02-13 04:05 |只看该作者
看来Powerpc双核的,1.2GHz的性能不是很强哈.

论坛徽章:
2
天蝎座
日期:2014-07-23 21:17:122015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2015-02-13 10:23 |只看该作者
1ms之内处理硬中断,再由硬中断**用户进程,这中间涉及到进程切换的开销就很大了。
未知楼主的系统负载高是什么导致的?用mpstart -P ALL 1看下哪个方面呢,你的进程优先级那么高,影响到它的很可能是 humjb_1983 说的软中断了。

觉得这并不是实时,应该考虑换方案。
在hw中断下半部收到消息就入队列,用户的进程监听队列,缓冲+并行。你认为进程很关键,优先级就还是FIFO的,让系统多照顾照顾,但是必须隔一段时间就主动睡眠一下让出cpu。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP