我正在通过 Linux KVM 学习 Intel VMX。
而且我无法清楚地理解 KVM(Linux)如何调度在同一主机上同时运行的多个虚拟机。
例如宿主机有1个物理CPU,有2个KVM虚拟机,每个虚拟机配置1个vCPU。
一旦启动,KVM/QEMU 会为每个 vCPU 配置一个 VMCS,因此 KVM 中有 2 个 VMCS。由于只有 1 个 pCPU,因此 KVM/Linux 必须对每个 vCPU 进行 1 1 1 的调度。
我的理解是当 vCPUa 运行时,vCPUa 的 KVM VMPTRLD VMCS,并运行 VM 的代码。然后,要调度vCPUb,KVM将vCPUa的VMPTRST VMCS传到某处,vCPUb的VMPTRLD VMCS从某处传来。
通过阅读 KVM 的代码,我没有找到 vCPU 调度的 VMPTRLD/VMPTRST 发生在哪里,以及什么是“某处”。
最佳答案
vmptrld在arch/x86/kvm/vmx.c中的vmx_vcpu_load
vmresume 在 vmx_vcpu_run 中
关于linux - Intel VMX中KVM如何调度多个VM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50774234/