把 Ring/VMX/SVM、KVM、QEMU、Hyper-V 等名词镶嵌进“为什么会出现→出现后解决了什么”的历史脉络。
1. 从“共用一台大机器”开始(1960–1980)
- 1960s IBM MAINFRAME 推出 CP-67 / VM-370,一台机器同时给多位研究员用 Hypervisor(宿主) / Guest
- 1970s 为了方便多任务,处理器开始有 特权级 概念 Ring(x86)、EL(ARM)
CPU 上出现 Ring0(操作系统核心)/Ring3(用户程序)的分层,就是为了让几个人/几个程序安全共存。
2. PC 世纪:虚拟化“失传”又“复活”(1980–2005)
- 1981 IBM PC:只要跑一个 DOS,没人想着同机多系统 → 虚拟化淡出。
- 1990s PC 服务器普及,利用率低 成本高。
- 1998 VMware 诞生:靠二进制翻译偷偷把敏感指令改写,重现“多 VM”——但慢 + 复杂。
痛点 VMware 每次遇见 mov cr3, … 之类特权指令都要动态改代码 → “有硬件直接帮我截胡不就好了?”
3. 硬件援军:VMX 与 SVM(2005–2006)
| 公司 | 年份 | 技术 | 核心创意 |
|---|---|---|---|
| Intel | 2005 | VT-x / VMX | 在 CPU 里插入一个更高的特权层:VMX-Root |
| AMD | 2006 | AMD-V / SVM | 同样搞一个 SVM Host 层 |
Guest OS 运行在 VMX Non-Root,一旦执行敏感指令 → VM-Exit → 硬件自动跳回 Host。 Host 拿到控制权后再 VM-Entry 让 Guest 继续跑。 再也不用改 Guest 代码,虚拟化性能瞬间提升一个量级。
4. 社区力量:KVM + QEMU(2007–2010)
-
2007 Linux 2.6.20 合入 KVM.ko 把内核变成轻量“Type-1” Hypervisor;提供 /dev/kvm ioctl 让用户态控制 vCPU
-
2007 QEMU 0.9 原是纯软件模拟器,引入 -enable-kvm 参数,成为 KVM 的用户态前端
-
2012 virtio / vhost-vsock 高效准虚拟设备,把磁盘、网卡甚至 socket 都虚拟出来
硬件已能高速切换 Guest/Host,但需要“谁来管理多少内存给 Guest、给它什么网卡”。 • 内核态 → KVM 负责“能跑”。 • 用户态 → QEMU 负责“像真机”,并实现设备模拟。
5. 各家公有云的演化分支(2008–2018)
厂商 开始商用 选择 备注 Microsoft 2008 Hyper-V 自带 Windows 内核里;相比 KVM 接口不同,但理念同源 Amazon 2017 Nitro Hypervisor 基于 KVM 重写,去掉 QEMU、只留必要 I/O,提供更轻量的 VM Google / Oracle / 阿里 2010s 继续用 KVM+QEMU 在此基础上再做云管控平台 你今天在云上租到的大多数 VM,底下都是“VT-x/SVM + KVM/QEMU”或“VT-x/SVM + 自研 Hypervisor”组合。
6. 安全再进阶:VM-级 TEE 登场(2016–2022)
硬件厂商重新思考:“Host 还是能在 VM-Exit 时读内存,如果把内存直接加密呢?”
| 年份 | 技术 | 关键机制 | 关联 Hypervisor |
|---|---|---|---|
| 2016 | AMD SEV | 内存 AES-XTS 加密 | KVM/QEMU |
| 2020 | SEV-SNP | 再加完整性表 RMP,Host 不能偷偷改页表 | KVM/QEMU |
| 2020 | AWS Nitro Enclave | 在同一台 EC2 再切微型 VM;内存同样由 Nitro Hypervisor 加密 | Nitro |
| 2023 | Intel TDX | VMX 上叠加 TDX-Module + PAMT 完整性 | KVM/QEMU/Hyper-V |
加密后,Host 依旧要给 Guest 提供网络等设备 → vsock / virtio-serial 继续使用。 Guest 想证明自己真的跑在 TEE → 新 ioctl (SNP_GET_REPORT, TDX_GET_REPORT) 把启动度量打包成 Quote。
7. 把关键名词放回时间轴
- 70s ─ Hypervisor (IBM VM/370)
- 80s ─ Ring0 / Ring3 (x86)
- 90s ─ VMware 二进制翻译
- 2005 ─ VT-x (VMX Root / VM-Exit / VM-Entry)
- 2006 ─ AMD-V (SVM, VMCB)
- 2007 ─ KVM.ko + QEMU-kvm
- 2012 ─ virtio / vhost-vsock
- 2008-2018 ─ Hyper-V, Nitro Hypervisor
- 2016 ─ SEV-ES
- 2020 ─ SEV-SNP & Nitro Enclave
- 2023 ─ Intel TDX
8. 现在再看概念
- Ring:CPU 内部的权限层次;Ring0=内核,Ring3=用户。
- VMX / SVM:把 Ring0 再包一层,让 Guest OS 被“骗”在 Ring0 里跑。
- VM-Exit / Entry:Guest 想做特权事 → 硬件跳到 Hypervisor → 处理后跳回。
- KVM:Linux 内核模块,提供“跑 Guest 的最小支撑”。
- QEMU:用户态管理器,创建虚拟设备 & 镜像。
- Hyper-V / Nitro:微软 / AWS 的“KVM 替代品”。
- vsock:Hypervisor 额外塞的一块“虚拟 PCI 设备”,Host 与 Guest 拿到一对 socket fd。
- VM-级 TEE(SNP / Nitro Enclave / TDX):在上述虚拟化流程上再罩一层“内存默认加密 + 启动度量 + 报文证明”。
9. 因果链
“多人共用机器 → 虚拟化 → 性能瓶颈 → 硬件扩展 → 超级快的 VM → 仍担心宿主偷窥 → 内存加密 + 远端证明 → VM-级 TEE。”
理解了这条链,后面你在 SEV-SNP、Nitro、TDX 里看到的 ioctl、vsock、Quote,就都能找到“它们在历史上解决了哪一个痛点”。
建议把时间线与痛点记成一句口诀 IBM → VMware → VT-x/SVM → KVM/QEMU → 云 Hypervisor → 内存加密(SNP/Nitro/TDX)
Pomelo_刘金 ,转载请注明出处,感谢!背好了,这节课就通关。