- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux进程组调度机制分析.pdf
2014年7月21 日 Linux进程组调度机制分析 | OenHan
OenHan
omg , oops
首页
About
Archives
请输入关键字...
首页 Scheduler Linux进程组调度机制分析
Linux进程组调度机制分析
2014年4月28日 OenHan 编辑 发表评论 阅读评论
又碰到一个神奇的进程调度问题 ,在系统重启过程中 ,发现系统挂住了 ,过了30s后才重新复位 ,真正系统
复位的原因是硬件看门狗重启的系统 ,而非原来正常的reboot流程。硬件狗记录的复位时间 ,将不喂狗的时
间向前推30s分析串口记录日志 ,当时的日志就打印了一句话 :“sched RT throttling activated”。
从linux-3.0.101-0.7.17版本内核代码中可以看出 ,sched_rt_runtime_exceeded打印了这句话。在内核进程
组调度过程中 ,实时进程调度受rt_rq-rt_throttled 的限制 ,下面便具体说一下涉及到的linux中进程组调度
机制。
进程组调度机制
组调度是cgroup里面的概念 ,指将N个进程视为一个整体 ,参与系统中的调度过程 ,具体体现在示例中 :A
任务有8个进程或线程 ,B任务有2个进程或线程 ,仍然有其他的进程或线程存在 ,就需要控制A任务的CPU
占用率不高于40% ,B任务的CPU占用率不高于40% ,其他任务占用率不少于20% ,那么就有对cgroup阀值
的设置 ,cgroup A设置为200,cgroup B设置为200,其他任务默认为100,如此便实现了CPU控制的功能。
在内核中 ,进程组由task_group进行管理 ,其中涉及的内容很多都是cgroup控制机制 ,另外开辟单元在
写 ,此处指重点描述组调度的部分 ,具体见如下注释。
1 struct task_group { 帮
2 struct cgroup_subsys_state css; 助
3
4 //下面是普通进程调度使用
5 #ifdef CONFIG_FAIR_GROUP_SCHED
6 /* schedulable entities of this group on each cpu */
7 //普通进程调度单元 ,之所以用调度单元 ,因为被调度的可能是一个进程 ,也可能是一组进程
8 struct sched_entity **se;
9 /* runqueue owned by this group on each cpu */
10 //公平调度队列
11 struct cfs_rq **cfs_rq;
12 //下面就是如上示例的控制阀值
13 unsigned long shares;
14 atomic_t load_weight;
15 #endif
16
17 #ifdef CONFIG_RT_GROUP_SCHED
18 //实时进程调度单元
19 struct sched_rt_entity **rt_se;
20 //实时进程调度队列
21 struct rt_rq **rt_rq;
22 //实时进程占用CPU时间的带宽 (或者说比例 )
23 struct rt_bandwidth rt_bandwidth;
24 #endif
htt p:///t ask-group-sched 1/8
2014年7月21 日 Linux进程组调度机制分析 | OenHan
25
26 struct rcu_head rcu;
27 struct list_head list;
28 //task_grou
文档评论(0)