免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: noted2011

[进程管理] 唤醒进程(wake_up_process)到进程真正执行延迟较大 [复制链接]

论坛徽章:
0
发表于 2014-02-16 13:14 |显示全部楼层
junnyg 发表于 2014-02-14 17:54
wake_up_process中会调用check_preempt_curr_rt检查是否能抢占当前任务,如果可以抢占,任务在其他核的,会 ...


之前描述地还不是很详细,再补充一下。
整个流程:首先是进程A执行,把当前进程赋值给进程A的task_struct,把当前进程设置为TASK_INTERRUPTIBLE状态,接着让出CPU,等到每1毫秒的中断到来时,唤醒进程A。1ms中断在core0上,进程A在core1上。

core0上有3个外部中断,都是硬中断,打了实时补丁,其他的中断都中断线程化了。core0上的3个外部中断比其他中断(比如定时器中断)优先级都高,这三个外部中断都是1ms来一次,并且时间上是错开的,分别相隔有500多微秒和170多微秒,不是相互干扰,也做了统计的,没有丢中断的现象。目前测试的时候,core0上只开启了一个外部中断,1ms来一次。

core1上只有定时器中断,linux系统自带的,但也都中断线程化了。core1上的进程A的优先级最高,是99。
该CPU有8个core,网卡中断,串口中断等等都绑定到core7上。

进程A不能独占一个core,真实的业务还有一个同样高优先级的实时进程B,还有一些低优先级的实时进程以及普通进程,更确切地说,进程A和B都是线程,为了简单的描述这个问题,简化了。测试的时候,core1上只有进程A,其他的实时进程只有linux系统自带的。

我们是在core0 1ms中断 ISR里去唤醒进程A,而进程A是在core1上,是显示调用 schedule(),主动放弃cpu。也就是说,是在core0上的中断服务程序里,去唤醒core1上的进程A。正如你所说,好像不应该达到800微秒那么大,但是,这个延迟不是每次都那么大,出现的概率是万分之四左右,跑了12个小时的结果。而且是core0上唤醒core1上的进程。我怀疑linux2.6.34.12这个版本的linux实时调度性能就这样,偶尔的延迟就这么大,毕竟是软实时,不是硬实时。

SunOS 5.0延迟也有0.5毫妙,500微妙,具体描述及链接:

Dispatch Latency

The most significant element in scheduling behavior for real-time applications is the provision of a real-time scheduling class. The standard time-sharing scheduling class is not suitable for real-time applications because this scheduling class treats every process equally and has a limited notion of priority. Real-time applications require a scheduling class in which process priorities are taken as absolute and are changed only by explicit application operations.

The term dispatch latency describes the amount of time it takes for a system to respond to a request for a process to begin operation. With a scheduler written specifically to honor application priorities, real-time applications can be developed with a bounded dispatch latency.

able 8-1 Real-time System Dispatch Latency with SunOS 5.0 through 5.8
Workstation         Bounded Number of Processes                                                Arbitrary Number of Processes
SPARCstation 2         <0.5 milliseconds in a system with fewer than 16 active processes         1.0 milliseconds
SPARCstation 5         <0.3 millisecond                                                         0.3 millisecond
Ultra 1-167         <0.15 millisecond                                                        <0.15 millisecond

Tests for dispatch latency and experience with such critical environments as manufacturing and data acquisition have proven that SunOS 5.8 is

http://docs.oracle.com/cd/E19455 ... rt-21297/index.html


使用LWT模型,在用户态做调度?
这个不太了解,查了一下,只有大概的介绍,没有具体使用。可否告诉一下关于如何使用LWT模型?
还有,我们的这个业务都是基于1ms中断的,在1ms中断没有到来之前,要等待,并要让出cpu去干其他的事情。1ms中断到来了,内核态要马上通知用户态开始干活。


论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2014-02-16 18:06 |显示全部楼层
理解所谓的用户态做调度,不可能有抢占,只能顺序执行(比如轮询),实际上就绕过了内核那一套?

论坛徽章:
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
发表于 2014-02-17 08:37 |显示全部楼层
noted2011 发表于 2014-02-16 13:14
之前描述地还不是很详细,再补充一下。
整个流程:首先是进程A执行,把当前进程赋值给进程A的task_str ...

“core1上只有定时器中断”是指时钟中断么?也进行线程化了?
能否在关键的点打上时间戳,比如core0上中断来的时间、wakeup调用的时间,core1上收到IPI的时间,core1上A得到调度的时间,这样应该能确认瓶颈。
另外,确认环境中启用了hpet?时钟源用的啥?看是否可能有不准的情况。

论坛徽章:
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
发表于 2014-02-17 09:37 |显示全部楼层
noted2011 发表于 2014-02-16 13:14
之前描述地还不是很详细,再补充一下。
整个流程:首先是进程A执行,把当前进程赋值给进程A的task_str ...

补充下,需要确认下这里的延时是中断延时还是调度延时,需要打点确认。
对中断延时影响最大的就是关中断了,如果是中断延时,需要进一步确认可能关中断的地方。
调度延时由关抢占和关中断影响,需要确认关抢占和关中断的地方。

论坛徽章:
0
发表于 2014-02-17 10:00 |显示全部楼层
还是得要一个实时性能分析的工具,找到关键点。

论坛徽章:
0
发表于 2014-02-17 13:15 |显示全部楼层
回复 21# noted2011
LWT模式是指在用户态实现轻量级的线程调度,其单位是比posix线程粒度更小的自定义线程,线程的上下文切换发生在用户态,ENEA的RT Linux实现了这一功能


   

论坛徽章:
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
发表于 2014-02-17 13:54 |显示全部楼层
junnyg 发表于 2014-02-17 13:15
回复 21# noted2011
LWT模式是指在用户态实现轻量级的线程调度,其单位是比posix线程粒度更小的自定义线程 ...

如此好处体现在哪儿?如何能提升实时性?呵呵

论坛徽章:
0
发表于 2014-02-17 14:03 |显示全部楼层
回复 27# humjb_1983
节省的是调度开销,相对于linux的线程切换,LWT的上下文恢复与保存更加轻量级


   

论坛徽章:
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
发表于 2014-02-17 14:36 |显示全部楼层
junnyg 发表于 2014-02-17 14:03
回复 27# humjb_1983
节省的是调度开销,相对于linux的线程切换,LWT的上下文恢复与保存更加轻量级

哦,再问问用户态调度是个什么概念?

论坛徽章:
0
发表于 2014-02-17 15:16 |显示全部楼层
回复 29# humjb_1983
ENEA的LWRT提供了运行于用户空间的轻量级线程调度系统,LWT由其进行调度
http://www.hqew.com/tech/news/1049875.html

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP