wangxingchao2010
wangxingchao201
全部博文(102)
2011年(8)
2010年(94)
embedded
btrace
车辆e组
youqianl
zhongzha
chinuxer
mich_mq
raolei00
hejianet
gangjian
分类: LINUX
2010-01-24 22:06:39
这个可以根据cfs的思想来看:cfs调度是根据rb-tree,树的结点排列是依照每个调度实体的vruntime 在一段时间内,会把所有的进程都调度一遍,这样,树里每个进程获取的运行时间,当然与它的优先级息息相关。 关键是运行完后更新vruntime,优先级低的依然会居于树的靠右侧。这样会保证高优先级或交互进程有较多的运行时间和响应时间。 具体到你的问题,应该是树的最右结点与最左结点的差别,这个没有调试环境,我也没具体测过。 希望有比较直观的数据,就容易分析了,您说呢? --------------------夜,明月,窗前,烟
文章选项:
这种调度器的没什么好的调试环境吧, 可能也就是看看CONFIG_SCHED_DEBUG的那些信息, 然后写些测试用例什么的.
恩。 再回到您第一次说的那个问题 新改的patch所避免的情况,咱们能讨论下么? --------------------夜,明月,窗前,烟
> 为什么要限定范围呢? 只有idle进程,增长快慢就没有关系啊~ 就怕有normal进程 现在没有, 以后会有的;) 如果只有IDLE的vruntime在涨, cfs_rq->min_vruntime不涨的话, 那就有问题了.
可能误会了 如果cfs-rq里只有idle tasks,那么vruntime一定会-----至少涨得“速率”很快 ---我不敢说“剧增”了 :-) 那就照正常的cfs-rq vruntime更新规则就是了 为什么要限制 max(se->runtime)-min(se->runtime)呢? --------------------夜,明月,窗前,烟
不是要去限制, 我只是觉得现在已经是这样的了(不是很确定;) 如果有这个限制, 而且这个值不大的话, 就没有大跃进了.
恩,我会再仔细看下代码,希望能到找相关的数据,验证下idle task的变化趋势。 能讨论下我上面说的那三种假设情况么? 因为我觉得那部分有问题 --------------------夜,明月,窗前,烟
哪三种?
" 假设现在3种情况: 1) 只有一个task A.那么A的vruntime就是队列的vruntime 2) A 和 一些idle进程 ,A调度后更新vruntime,会走: vruntime = min_vruntime(vruntime, se->vruntime); 这个判断 3)A 出列,此时curr=null,队列只剩下idle,此时走: vruntime = se->vruntime; 显然,这时候vruntime会一下子变得很大,但没有关系。-->patch的关键就是为了避免A存在也走这个流程。 " 就是调用update_min_runtime()时cfs_rq->min_vruntime的变化。 --------------------夜,明月,窗前,烟
1) 只有一个task A.那么A的vruntime就是队列的vruntime 是的. 2) A 和 一些idle进程 ,A调度后更新vruntime,会走: vruntime = min_vruntime(vruntime, se->vruntime);这个判断 是的. 3)A 出列,此时curr=null,队列只剩下idle,此时走: vruntime = se->vruntime; 显然,这时候vruntime会一下子变得很大,但没有关系。-->patch的关键就是为了避免A存在也走这个流程。 " 看起来不是. A出列, update_min_vruntime时curr还不是NULL. schedule() -> deactivate_task() 中 update_min_vruntime() -> put_prev_task() 中 cfs_rq->curr = NULL -> pick_next_task() 中 cfs_rq->curr = se 我就没找到一条路径, 当执行update_min_vruntime是, curr==null
上一篇:关于CFS调度在china linux forum的一篇讨论帖子(1)
下一篇:关于CFS调度在china linux forum的一篇讨论帖子(4)
登录 注册