【发布时间】:2018-06-09 12:20:41
【问题描述】:
我正在通过 Linux KVM 学习 Intel VMX。
而且我无法清楚地理解 KVM (Linux) 如何安排多个 VM 在同一主机上同时运行。
例如,主机中有 1 个物理 CPU,有 2 个 KVM 虚拟机,每个虚拟机配置 1 个 vCPU。
一旦启动,KVM/QEMU 会为每个 vCPU 配置一个 VMCS,因此 KVM 中有 2 个 VMCS。由于只有 1 个 pCPU,所以 KVM/Linux 必须将每个 vCPU 1 1 调度。
我的理解是当vCPUa运行时,vCPUa的KVM VMPTRLD VMCS,并运行VM的代码。然后,要调度 vCPUb,KVM 将 vCPUa 的 VMPTRST VMCS 到某处,并从某处 vCPUb 的 VMPTRLD VMCS。
通过阅读 KVM 的代码,我没有找到用于 vCPU 调度的 VMPTRLD/VMPTRST 发生在哪里,以及“某处”是什么。
【问题讨论】:
-
我猜 KVM 就像主机内核下的一个进程一样工作,由常规调度程序进行调度。它必须需要代码来在运行来宾 VM 和运行主机代码(包括主机上的非 VM 用户空间进程)之间切换。您是否已经查看了上下文切换函数以了解它们是否支持 KVM?
-
这是有道理的,这也是我的猜测。我必须深入研究调度程序代码以了解详细信息,将在此处更新我的发现。
标签: linux x86 virtualization kvm