论文部分内容阅读
随着并行计算技术的发展,越来越多的程序是基于并行模型开发的,而且它们会被托管运行在SMP虚拟机平台上,这就要求宿主机平台能够提供高效的虚拟机管理功能。其中,开源虚拟机监视器KVM,由于自身优秀的性能以及得到开源社区和业界各大研究机构的良好开发与技术支持,获得了广泛的市场应用。KVM作为一个内核模块被加载到Linux内核中,并将Linux改造成了虚拟机监视器,利用内核的任务调度器来调度虚拟机的vCPU线程。但是Linux通用的调度器无法区分普通线程和虚拟机的vCPU线程,因此容易产生vCPU LHP(Lock Holder Preemption,锁持有抢占)和vCPU Stacking问题,并导致虚拟机性能下降。 通常解决由vCPU LHP和vCPU Stacking的引起的虚拟机性能下降的问题是通过由用户或内核识别vCPU线程,并设置vCPU线程的亲和性来实现的。但是这种方式由于没有充分考虑原有的内核调度器优化特性,因而无法有效提高虚拟机执行性能。同时,许多具有类似需求的应用程序将无法受益于由内核识别方式的调度策略,因此具有很大的局限性。 本文在总结前人的工作基础上,深入研究Linux内核调度机制,针对内核调度器优化对虚拟机性能的影响,提出基于互斥组的虚拟机vCPU调度优化策略。该策略提出在不影响原有的系统负载均衡机制正常工作的情况下,将归属于同一个虚拟机的vCPU线程互斥地调度到不同的物理CPU上执行,可以降低LHP发生的概率,并且可以避免vCPU Stacking问题。论文的研究结论表明,由于互斥组基于cgroupfs实现,因而该策略也能在特殊应用场景中适用于普通任务的调度。论文通过实验证明基于互斥组的vCPU调度优化能够保证系统的负载均衡,并提升虚拟机运行性能。