主权项 |
1.一种虚拟CPU调度方法,用于多处理机虚拟化环境,包括监测步骤,信息收集步骤和调度步骤,其特征在于:一.监测步骤:实时监控各虚拟机的Linux操作系统中的自旋锁操作命令,针对每台虚拟机的每个VCPU都设置一个自旋锁计数器,在Linux操作系统每个自旋锁加锁语句处,判断是否成功加锁,是则将该自旋锁加锁语句所对应的VCPU的自旋锁计数器加1,否则不进行操作;在每个自旋锁解锁语句处,将该自旋锁解锁语句所对应的VCPU的自旋锁计数器减1;所述自旋锁计数器加减操作均为原子操作,所述原子操作,是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程切换(context switch);二.信息收集步骤:提取监测步骤所得到的每台虚拟机上各个VCPU上的自旋锁数目,并将其与每台虚拟机对应,构成每台虚拟机自旋锁计数信息;将所述每台虚拟机自旋锁计数信息写入虚拟机监视器共享内存页;三.调度步骤:运行于各个PCPU上,虚拟机监视器按照周期T,循环执行如下子步骤:(3.1)计算窗口启动时间S<sub>n</sub>:<img file="FDA0000040961490000011.GIF" wi="478" he="74" />式中,S<sub>n</sub>为本轮调度窗口启动时间,E<sub>n</sub>是本轮调度对各个VCPU所分配时间片的结束时刻,P<sub>i</sub>为第i轮调度抢占点,S<sub>i</sub>为第i轮调度窗口启动时间;(3.2)在S<sub>n</sub>时刻启动窗口,窗口长度w=0.5~1.5ms;(3.3)从虚拟机监视器共享内存页提取当前正在运行的VCPU上的自旋锁数目,并据其判断当前正在运行的VCPU是否持有锁,是则转子步骤(3.5);否则转子步骤(3.4);(3.4)调度该VCPU,转子步骤(3.6);(3.5)检查窗口是否已经到达结束点,是则转子步骤(3.4);否则转子步骤(3.3);(3.6)结束本轮调度,当周期T届满时,转子步骤(3.1)。 |