摘要:

多核硬件技术的发展为操作系统的设计带来了新的挑战.作为影响操作系统性能的关键因素,任务调度算法的设计与优化成为多核系统的重要研究课题之一,并引起国内外学者的广泛关注.Linux环境下,主流的任务调度算法有两种:Linux内核采用的任务调度算法CFS和Android移动操作系统采用的任务调度算法BFS.由于算法设计的原因,CFS算法存在任务响应速度不足,调度的公平性比较低,负载均衡开销比较大等问题,而BFS算法可扩展性不足,随着系统核数目或者任务数目增多调度效率下降明显,不适合复杂的多核环境.针对上述问题,本文围绕多核系统任务调度算法的设计,实现,优化等方面做了如下几项工作:首先,基于CFS和BFS算法,本文提出一种新的任务调度算法GFS,GFS从CPU自动分组配置和唤醒任务调度两方面提高了多核系统的调度性能.首先,算法根据多核系统硬件特性自动配置亲缘关系近的一组CPU共享一个任务运行队列,平衡组内CPU调度任务时对任务运行队列的访问竞争,任务在组内CPU间迁移运行及组间任务运行队列负载均衡的代价,减小调度延迟.其次,算法优先调度唤醒任务,由于频繁睡眠和唤醒的任务对响应速度要求通常比较高,GFS增加一种新的任务类型SCHED_WAKEUP_NORMAL,表示可调度的唤醒任务,相比普通任务,GFS优先调度该类任务,提升该类任务的响应速度.其次,本文依据任务的缓存访问特性对GFS进行优化.首先分析缓存的工作原理,利用性能监测单元PMU收集任务的缓存访问事件,如L2 cache访问数,L2 cache未命中数,访存指令数等,对任务的缓存访问竞争能力进行建模和分类.其次,调度器对不同缓存访问竞争能力的任务区分调度,优化任务选择策略使共享缓存的处理器内部CPU之间尽力避免同时运行缓存访问竞争能力强的任务,优化负载均衡策略使不共享缓存的处理器之间任务负载均衡的同时任务缓存访问竞争能力也均衡.通过优化减少运行任务对缓存资源的竞争,提高缓存的命中率从而提高任务的运行性能.最后,本文利用调度器基准测试集对任务调度算法进行性能对比测试.测试结果表明,相对CFS算法,GFS在低负载时吞吐率有25%的提升,高负载时下降不超过4%,在响应延时上有40%的提升,在周转时间上有17%的提升.综合而言,GFS可以显著提高系统的性能.

展开