Xen的CPU调度算法主要有3种,BVT(borrowed virtual time)调度算法、SEDF(simple earliest deadline first)调度算法、以及Credit调度算法。
一、BVT调度算法
1.BVT调度算法的基本原理
BVT算法由 KermethJ.Duda于1999年提出。BVT是一种公平性优先的调度算法。该算法将时间分为实际时间和虚拟时间:真实时间为硬件计时器记录的时间;虚拟时间为对真实时间经过某种规则计算后得到的时间值。该算法用虚拟时间来监控进程的执行时间,每次总是调度具有最早的有效虚拟时间的VCPU。这这种调度算法考虑到了运行实时和交互件的戍用程序的一些Guest操作系统,允许这些操作系统“借”一些时间片,就是说:在一定范围内将未来分配给它运行的时问片先“借”过来用一段时间。这种“借”过来的虚拟时间片只能是当前真实的时间片中的某个虚拟时间片,不能借下一个真实时间片中的虚拟时问片。在系统初始化时,每个VCPU将分配一个权值来代表该VCPU能获得的处理器份额。VCPU根据其权值来实现处理器的公平共享。系统用实际虚拟时间和有效虚拟时间来记录VCPU运行状态。其计算方式如下:
Ai =At + t/wi
Ei <— Ai - (warp?wi:0)
其中,t表示VCPU实际运行时长(由真实时间计算);wi表示该VCPU的权值大小;Ei表示有效虚拟时间;Ai表示实际虚拟时间;warp为时间偏移标记,表示VCPU能否提前运行;矶为VCPU能提前运行的虚拟时间长度。
BVT算法是一种抢占式的working-conserving模式算法。该算法通过warp值来调整EVT使VCPU获得处理器的时间提前,即VCPU从预定的有效虚拟时间中借用了一定的虚拟时间以获得更高的调度优先级。此外,该算法还用Li和Ui来限制VCPU