阅读背景:

CFS调度器的精彩--任何事情都是一种权衡

来源:互联网 

还记得曾经写过一篇叫做《至今不敢写一篇cfs的文章》,那时我只是默默地欣赏cfs的和谐,可是一些转瞬即逝的感悟不写出来会是很大的遗憾,其实也谈不上什么感悟,只是理解罢了,有时你瞬间领悟的东西最好写下来,否则时间长了你会觉得很难理解。cfs调度器在2.6.23内核中被引入,起初的实现是多么的天真与纯朴,设计出来一个fair_key来代表队列的虚拟时钟,不管怎样总是实现了一个cfs的版本,到了2.6.25以后,cfs变得简单起来,没有了队列虚拟时钟的结构体,其概念直接融入了红黑树中的最左下角的调度实体的vruntime字段,其实就是让每个调度实体(没有组调度的情形下就是进程,以后就说进程了)的vruntime互相追赶,然后在某个地方会和归一,也就是达到同样的值。那么不同的优先级怎么体现呢?这就是cfs中最最精彩的地方,cfs不再说什么优先级,而统一改称权值,不同的权值的进程在相同真实时钟流逝中其虚拟时钟走的不同,也就是其vruntime的增量不同,具体来说,cfs用到了一个经验值,就是2.5%,就是说进程优先级数值每增加1,其权值降低原来的2.5%,这就有了一个一致的参照,更容易一些乘除运算,也使得cfs中的动态时间片和优先级之间成了简单的线性关系,计算每一个进程的虚拟时钟改前进多少的时候,用到了一个简单的公式,就是:还记得曾经写过一篇叫做《至今不敢写一篇cfs的文章》,那时我只是默默地欣赏cfs的和谐,可是一




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: