-- linux爱好者,业余时间热衷于分析linux内核源码 -- 目前主要研究云计算和虚拟化相关的技术,主要包括libvirt/qemu,openstack,opennebula架构和源码分析。 -- 第五届云计算大会演讲嘉宾 微博:@Marshal-Liu
分类: LINUX
2012-02-27 10:33:59
从上图可以看出采用全局唯一单队列的BFS调度算法的响应时间明显优于采用多per-CPU队列的CFS调度算法,说明CFS更适于交互式系统,即桌面系统。(当然,并不是说BFS就优于CFS,毕竟不同的应用场景各有优势,但是CFS考虑的确实太多了,想支持各种情况- CFS 的目标是支持从桌面到高端服务器的所有应用场景,这种大而全的设计思路导致其必须做一些实现上的折中)。
二、CFS关键点总结
1. 虚拟运行时间(vruntime)变化公式
结论:在实际运行时间相同的情况下,调度实体权重越大,vruntime增加的越慢。
2. 进程的理想运行时间计算公式
3. CFS调度时机
在有了上面几个计算公式之后,就可以总结出CFS调度算法的几个调度时机:
(1) 调度实体的状态转换的时刻:进程终止、进程睡眠等,广义上还包括进程的创建(fork);
(2) 当前调度实体的时机运行时间大于理想运行时间(delta_exec > ideal_runtime),这一步在时钟中断 处理函数中完成;
(3) 调度实体主动放弃CPU,直接调度schedule函数,放弃CPU
(4) 调度实体从中断、异常及系统调用返回到用户态时,回去检查是否需要调度;
GFree_Wind2012-02-27 18:17:35
liujunwei12342012-02-27 15:08:17
GFree_Wind2012-02-27 12:07:56
个人还是比较欣赏per CPU的作法。虽然现在由于需要对CPU进行负载均衡,这个锁比全局锁代价好很多了——文中已经提过。
而采用单一队列之后,每一个需要调度的新进程都可以在全局范围内查找最合适的CPU,而无需CFS那样等待load balance代码来决定——我觉得对于新进程决定在哪个CPU上运行时,可以简单的处理,不需要引入复杂的代码。然后由定时的load balance去平衡CPU间的负载——只是一点浅见。
随着对load balance算法的提高,per CPU的性能还是应该优于使用全局锁的。
问个私人问题,你目前在哪个学校啊?