linux - Intel VMX中KVM如何调度多个VM?

标签 linux x86 virtualization kvm

我正在通过 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/

相关文章:

C++ 执行脚本 Aprog 命令未找到

c++ - 以非 root 用户身份调用 mount() 系统调用

python - 在 Linux 上使用 pyodbc 连接到 DB2

c++ - 这是 sqrt 函数中的错误吗

python - 如何在 Mac 上安装 VirtualBox SDK

linux - 从原始文件创建虚拟机 - Proxmox

python - 在 TCP Python SocketServer 中捕获目标 IP

c++ - 英特尔引脚 : analysis routine detects ah register instead of rsp (REG_STACK_PTR)

linux - 适用于 Linux/CentOS 的最佳虚拟化或开源云平台是什么?

assembly - 在堆栈帧创建之前或之后插入寄存器之间有什么区别吗?