在QNX虚拟化环境中,理解基于优先级的调度如何影响的系统行为非常重要。
虚拟化管理器线程优先级和客户机线程优先级
与任何高级软件系统一样,要使用QNX Hypervisor在系统中正确配置调度优先级,需要全面了解您的系统需求和系统功能。
首先,你应该记住以下几点:
-
虚拟机管理器宿主机不知道其VM中运行的是什么,也不知道客户机如何安排自己的内部软件。当您在客户机操作系统中设置优先级时,这些优先级只有该客户机才知道。
-
虚拟CPU (vCPU)由qvm vCPU调度线程调度;这些线程存在于虚拟机管理器宿主机域中。
-
客户机程序中的线程优先级与虚拟机管理器宿主机中的线程优先级没有关系。qvm进程vCPU调度线程的相对优先级决定哪个vCPU可以访问pCPU。
下面的图说明了客户机内部的优先级只与客户内部相关,并且不影响两个竞争客户机中的哪一个访问pCPU。阴影区域显示了两个相互竞争的vCPU线程中的哪个线程可以访问pCPU。
图1:访问pCPU的重要优先级是qvm进程的vCPU线程的优先级。
如果两个vCPU竞争一个物理CPU(pCPU),优先级更高的vCPU线程可以立即访问pCPU。在客户机内部运行的线程的优先级对该访问没有影响。在上面的例子中:
-
Guest 1中的线程具有比Guest 0中的线程更高的优先级。
-
为Guest 0提供vCPU的虚拟机管理器线程有更高的优先级(200),相对于为Guest 1(100)提供vCPU的虚拟机管理器线程的优先级。
-
因此,内部Guest 0线程可以获取pCPU并运行。
-
内部Guest 1线程被阻塞,直到Guest 0中的线程自愿阻塞为止。
简而言之,其决定作用的优先级是qvm进程的vCPU调度线程的优先级。
客户机退出
导致客户机退出的原因如下:
-
客户机挂起。
-
访问vdev;这种退出不一定会导致客户机放弃对CPU的控制,因为客户机的vCPU线程不一定会阻塞。
-
宿主机上的中断(包括处理器间中断)。
-
某个虚拟定时器,如模拟Intel 8254芯片的vdev。
-
某个指令,如CPUID指令。
原文链接:
http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.hypervisor.user/topic/virt/sched.html