mcpField
H
hypervisor-internals

hypervisor-internals

github.com/mohitmishra786开发269291 次安装18 周前更新
代码仓库

关于 hypervisor-internals

hypervisor-internals 为 Agent 和底层开发者讲解硬件虚拟化,涵盖 Intel VT-x、AMD SVM、嵌套分页、中断及 KVM 接口,可用于故障排查和教学性 hypervisor 开发。

主要功能

  1. 01Intel VT-x 与 AMD SVM 概念
  2. 02VMCS、VMCB 和 VMEXIT 详解
  3. 03EPT 与 NPT 地址转换
  4. 04MSR、I/O 和中断虚拟化
  5. 05KVM ioctl 用法与 hypervisor 参考

适用场景

  1. 01排查 VMEXIT 风暴或 EPT 故障
  2. 02理解 KVM 或 Hyper-V 使用的硬件功能
  3. 03研究 hypervisor 安全问题
  4. 04构建教学用的最小 hypervisor

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill hypervisor-internals

安装后在 Claude Code 中输入/hypervisor-internals确认已加载。

详细介绍

Hypervisor 内部原理

目的

向 Agent 讲解硬件虚拟化的内部原理:Intel VT-x(VMXON、VMCS、VMLAUNCH/VMRESUME、VMEXIT 原因)、AMD SVM(VMCB、#VMEXIT)、扩展/嵌套页表(EPT/NPT)、APIC 虚拟化、MSR 位图、虚拟中断注入,以及构建最小化 1 类 Hypervisor 的参考资料。

适用场景

  • 了解 KVM、Hyper-V 或 VMware 如何映射到硬件功能
  • 调试 VMEXIT 风暴或 EPT 违规
  • 研究 Hypervisor 安全(CVE 分类)
  • 构建教学用 Hypervisor(SimpleVisor、hvpp)
  • 调优嵌套虚拟化性能
  • 分析 VM 逃逸或侧信道缓解措施

工作流

1. 虚拟化类型
Type 1 (bare metal)     Type 2 (hosted)
├── Hyper-V             ├── KVM + QEMU
├── Xen                 ├── VirtualBox
├── VMware ESXi         └── Parallels
└── Runs directly on HW     Runs on host OS
2. Intel VT-x 概述
VMX operation
├── VMXON — enter VMX root mode
├── VMCS setup — guest/host state fields
├── VMLAUNCH / VMRESUME — enter guest
├── Guest runs until VMEXIT
└── VMXOFF — exit VMX operation

关键结构:

  • VMCS(虚拟机控制结构)——来宾机/主机状态、控制字段
  • VMEXIT ——强制退出到 Hypervisor(I/O、MSR、EPT 故障、中断)
// Simplified VMX enable check (kernel/driver context)
#include <linux/cpufeature.h>
if (boot_cpu_has(X86_FEATURE_VMX))
    // VT-x supported
3. VMCS 字段(概念)
类别示例
来宾机状态GPR、CR0/3/4、段选择子、RIP、RSP
主机状态主机 RIP(VMEXIT 处理程序)、主机 CR3
控制项基于 Pin、基于 proc、VMEXIT/进入控制
退出信息退出原因、限定信息、来宾机线性地址

常见 VMEXIT 原因:

Exit reason codes (Intel)
├── 10 — CPUID
├── 28 — CR access
├── 30 — I/O instruction
├── 48 — EPT violation
├── 0  — External interrupt
└── 1  — Triple fault
4. AMD SVM(AMD-V)
SVM operation
├── EFER.SVME = 1
├── VMCB setup — guest save area + control area
├── VMRUN — enter guest
├── #VMEXIT — exit to host handler
└── Guest state in VMCB

VMCB 控制区:拦截向量(CPUID、MSR、IO)、嵌套分页启用状态、ASID。

IntelAMD
VMCSVMCB
VMXON/VMXOFFEFER.SVME
VMLAUNCH/VMRESUMEVMRUN
EPTNPT(嵌套页表)
5. EPT / NPT——二级分页
Guest virtual (GVA) → Guest physical (GPA) [guest page tables]
GPA → Host physical (HPA) [EPT/NPT, managed by hypervisor]

EPT 违规会触发 VMEXIT:来宾机访问了未映射的 GPA,或违反了权限设置。

# KVM EPT stats (if available)
# Nested virtualization adds second EPT walk — perf cost

侧信道缓解措施:在 VMEXIT 时刷新 L1D(MDS)、进行缓存分区。

6. MSR 和 I/O 位图
MSR bitmap (4KB)
├── Per-MSR read/write intercept control
└── Avoid VMEXIT on common MSRs for performance

I/O bitmap
├── Intercept specific port I/O
└── Pass-through unlisted ports

Hypervisor 会拦截 MSR_IA32_FEATURE_CONTROL、MSR_IA32_EFER 等。

7. APIC 虚拟化
APIC virtualization
├── Virtual interrupt delivery — reduce VMEXIT on EOI
├── Posted interrupts — hardware-assisted injection
└── TPR shadowing — avoid exit on priority changes

降低中断密集型来宾机的开销(网络 I/O)。

8. 虚拟中断注入

Intel:通过 VM-entry 中断信息字段注入。 AMD:VMCB 中的 V_IRQ、V_INTR_PRIO。

Device interrupt → host IRQ handler → hypervisor
    → inject virtual IRQ to guest IDT
    → guest ISR runs
9. 最小化 Hypervisor 参考资料
项目平台说明
SimpleVisorWindows用于教学,代码仅数千行
hvppWindowsC++ Hypervisor 库
kvmmLinux用于学习 KVM 的最小实现
barevisorx86_64Rust/ASM 教学项目

学习路径:

  1. 检测 CPUID 并启用 VMX
  2. 分配 VMCS,设置主机/来宾机状态
  3. 处理 CPUID 和 HLT 的 VMEXIT
  4. 添加采用恒等映射的 EPT
  5. 注入中断
10. KVM ioctl 接口(实践)
// Userspace KVM (how QEMU talks to 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);  // runs until VMEXIT

常见问题

症状原因修复方法
MSR 引发 VMEXIT 风暴MSR 位图拦截了所有访问精细调整位图;对安全的 MSR 采用直通
EPT 配置错误GPA→HPA 映射不匹配检查 EPT PTE 权限
嵌套虚拟化缓慢双重页表遍历使用硬件辅助;限制嵌套深度
VMXON 失败CR0/CR4 固定位按照 Intel SDM 设置所需的 CR 位
来宾机发生三重故障IDT 错误或异常未处理检查来宾机中断设置
I/O 拦截开销过高所有端口都被拦截缩小 I/O 位图

相关技能

  • skills/virtualization/qemu-kvm — KVM/QEMU 实践用法
  • skills/virtualization/containers-internals — 无需完整 VM 的轻量级隔离
  • skills/kernel/kernel-internals — 主机内核调度器/内存
  • skills/kernel/os-dev-scratch — 来宾 OS 开发背景
  • skills/security/kernel-security — Hypervisor CVE 缓解措施
  • skills/platform/riscv-privileged — RISC-V H 扩展虚拟化

评论

支持 Markdown