Chinaunix首页 | 论坛 | 博客
  • 博客访问: 422931
  • 博文数量: 49
  • 博客积分: 1346
  • 博客等级: 中尉
  • 技术积分: 936
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-21 01:49
文章分类

全部博文(49)

文章存档

2013年(7)

2012年(12)

2011年(30)

我的朋友

分类: LINUX

2012-02-18 15:42:04

/proc/sys/kernel/sched_rt_runtimes_us,默认:950000

/proc/sys/kernel/sched_rt_period_us,默认:1000000

 

在使用该功能时,当实时任务的带宽用尽时(sched_rt_runtime_us),内核会将对应的实时运行队列rt_rq给插起来(throttle)即禁止系统调度实时任务;之后不管是否有非实时任务存在,实时任务都禁止运行。

 

实时任务的带宽用尽后发现没有其它非实时任务可运行便调度到idle任务运行,idle任务运行的过程中rt_rq一直保持着被插状态,内核会维护一个解插hrtimer来负责超时后(sched_rt_period_us)解除rt_rq的被插状态。

 

如果刚好在rt_rq保持被插状态的过程中,将sched_rt_runtime_us通过/proc接口动态修改为-1表示禁用掉带宽控制功能,内核会配合此操作销毁掉解插hrtimer定时器,这样问题就会出来,导致没有人来解插rt_rq,以致于实时任务一直得不到运行。

 

从这个角度来讲,实时任务带宽控制功能在设计上有点缺陷,应用起来有些不便,在嵌入式实时系统中建议禁用掉此功能,标准Linux这样设置默认值是为了应用于服务器领域。如果需要禁用,必须在kernel/sched.c中:修改“int sysctl_sched_rt_runtime = 950000;”为“int sysctl_sched_rt_runtime = -1;”

阅读(3503) | 评论(0) | 转发(0) |
0

上一篇:cpufreq变频子系统

下一篇:XLP832中断系统

给主人留下些什么吧!~~