用途:解释硬件虚拟化内部机制,帮助理解 KVM、Hyper-V、VMware 如何映射到硬件特性,并用于调试 VMEXIT 风暴或 EPT 违规、研究 hypervisor 安全(CVE 分类)、构建教学型 hypervisor(SimpleVisor、hvpp)、调优嵌套虚拟化性能、分析 VM 逃逸与侧信道缓解。
主要能力:区分 type-1(裸金属,如 Hyper-V、Xen、VMware ESXi)与 type-2(宿主型,如 KVM+QEMU、VirtualBox)。Intel VT-x 侧介绍 VMXON 进入根模式、VMCS 的 guest/host 状态与控制字段、VMLAUNCH/VMRESUME、VMEXIT 原因码(如 10 CPUID、28 CR 访问、30 I/O、48 EPT violation、0 外部中断、1 三重故障)。AMD SVM 侧介绍 EFER.SVME、VMCB 保存区与控制区、VMRUN、#VMEXIT,并与 Intel 对应(VMCS/VMCB、VMXON/VMXOFF 对 EFER.SVME、EPT 对 NPT)。还涵盖 EPT/NPT 二级分页(GVA→GPA→HPA)、MSR 与 I/O bitmap、APIC 虚拟化(虚拟中断投递、posted interrupts、TPR shadowing)、虚拟中断注入(Intel 经 VM-entry interruption-information 字段,AMD 经 VMCB 的 V_IRQ、V_INTR_PRIO),以及 KVM ioctl 接口(KVM_CREATE_VM、KVM_CREATE_VCPU、KVM_RUN)。
使用方式:资料给出学习路径——CPUID 检测与启用 VMX、分配 VMCS 并设置 host/guest 状态、处理 CPUID 与 HLT 的 VMEXIT、加入恒等映射的 EPT、注入中断。示例检测命令:if (boot_cpu_has(X86_FEATURE_VMX));KVM 用户态示例:int kvm = open("/dev/kvm", O_RDWR); int vm = ioctl(kvm, KVM_CREATE_VM, 0); int vcpu = ioctl(vm, KVM_CREATE_VCPU, 0); ioctl(vcpu, KVM_RUN, 0);
适用场景与限制:适用于底层虚拟化学习与调试。常见问题包括 MSR 拦截导致 VMEXIT 风暴(应微调 bitmap 放行安全 MSR)、EPT 配置错误(核对 GPA→HPA 权限)、嵌套虚拟化慢(双重页表遍历,需硬件辅助并限制嵌套深度)、VMXON 失败(需按 Intel SDM 设置 CR0/CR4 固定位)、guest 三重故障、I/O 拦截开销。价格为暂未提供;支持平台、版本与安装命令资料未明确给出。