BVT是一种CPU时间调度算法
基本原理
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能提前运行的虚拟时间长度。
VT算法是一种抢占式的working-conserving模式算法。该算法通过warp值来调整EVT使VCPU获得处理器的时间提前,即VCPU从预定的有效虚拟时间中借用了一定的虚拟时间以获得更高的调度优 先级。
BVT的优缺点
BVT调度算法的优点在于可以将物理时间片公平、均匀地分配给各个Guest操作系统,每个Guest操作系统两次被调度的时间间隔不会超过一个真实的时间片;能够满足I/O密集型和实时应用的低时延要求,能较好地调度某些实时性要求比较高的操作系统;在单CPU和多CPU环境下的调度开销都比较小。
BVT调度算法的缺点有以下几点:首先,BVT不支持non-working-conserving。也就是说,每当当前domain被加载运行时,它将获得整个CPU。用户不能把某个将某个domain对CPU的使用限制在某个比例以下。其次,每个Guest OS只能借用分给它的时间片部分,而不会剥夺其他Guest OS的时间片。即当确定了各个domain的时间片分配比例后,这个比例在下次分配之前不会改变。
Linux内核中的cgroup中的cpu组件部分就可通过cpu.bvt_warp_ns设置warp时间。