免费注册 查看新帖 |

Chinaunix

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

关于CFS调度在china linux forum的一篇讨论帖子(3) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-24 22:06 |只看该作者 |倒序浏览

wxc200
(member)
09-03-31 13:58

Re: CFS 调度 [
re: ffjnfj
]


编辑




回复


这个可以根据cfs的思想来看:cfs调度是根据rb-tree,树的结点排列是依照每个调度实体的vruntime
在一段时间内,会把所有的进程都调度一遍,这样,树里每个进程获取的运行时间,当然与它的优先级息息相关。
关键是运行完后更新vruntime,优先级低的依然会居于树的靠右侧。这样会保证高优先级或交互进程有较多的运行时间和响应时间。
具体到你的问题,应该是树的最右结点与最左结点的差别,这个没有调试环境,我也没具体测过。
希望有比较直观的数据,就容易分析了,您说呢?
--------------------
夜,明月,窗前,烟
文章选项:

   

   

   

ffjnfj
(stranger)
09-03-31 14:07

Re: CFS 调度 [
re: wxc200
]


回复


这种调度器的没什么好的调试环境吧, 可能也就是看看CONFIG_SCHED_DEBUG的那些信息, 然后写些测试用例什么的.
文章选项:

   

   

   

wxc200
(member)
09-03-31 14:10

Re: CFS 调度 [
re: ffjnfj
]


编辑




回复


恩。 再回到您第一次说的那个问题
新改的patch所避免的情况,咱们能讨论下么?
--------------------
夜,明月,窗前,烟
文章选项:

   

   

   

ffjnfj
(stranger)
09-03-31 14:11

Re: CFS 调度 [
re: wxc200
]


回复


> 为什么要限定范围呢? 只有idle进程,增长快慢就没有关系啊~ 就怕有normal进程
现在没有, 以后会有的;) 如果只有IDLE的vruntime在涨, cfs_rq->min_vruntime不涨的话, 那就有问题了.
文章选项:

   

   

   

wxc200
(member)
09-03-31 14:16

Re: CFS 调度 [
re: ffjnfj
]


编辑




回复


可能误会了
如果cfs-rq里只有idle tasks,那么vruntime一定会-----至少涨得“速率”很快 ---我不敢说“剧增”了 :-)
那就照正常的cfs-rq vruntime更新规则就是了
为什么要限制 max(se->runtime)-min(se->runtime)呢?
--------------------
夜,明月,窗前,烟
文章选项:

   

   

   

ffjnfj
(stranger)
09-03-31 15:28

Re: CFS 调度 [
re: wxc200
]


回复


不是要去限制, 我只是觉得现在已经是这样的了(不是很确定;) 如果有这个限制, 而且这个值不大的话, 就没有大跃进了.
文章选项:

   

   

   

wxc200
(member)
09-03-31 15:35

Re: CFS 调度 [
re: ffjnfj
]


编辑




回复


恩,我会再仔细看下代码,希望能到找相关的数据,验证下idle task的变化趋势。
能讨论下我上面说的那三种假设情况么? 因为我觉得那部分有问题
--------------------
夜,明月,窗前,烟
文章选项:

   

   

   

ffjnfj
(stranger)
09-03-31 15:41

Re: CFS 调度 [
re: wxc200
]


回复


哪三种?
文章选项:

   

   

   

wxc200
(member)
09-03-31 15:46

Re: CFS 调度 [
re: ffjnfj
]


编辑




回复


"
假设现在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的变化。
--------------------
夜,明月,窗前,烟
文章选项:

   

   

   

ffjnfj
(newbie)
09-03-31 16:03

Re: CFS 调度 [
re: wxc200
]


回复


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
文章选项:

   

   

   

               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/110888/showart_2159282.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP