全虚拟化是什么
全虚拟化指 guest 操作系统无需任何修改就能运行在虚拟化层之上:敏感指令由 hypervisor 拦截处理,早期实现依赖二进制翻译,现代实现依赖 CPU 硬件辅助(Intel VT-x、AMD-V)。它的优点是兼容性最好,现成的物理机系统镜像可以直接迁移;代价是虚拟化本身带来的调度与 I/O 开销。
基本信息
| guest 改动 | 无需修改内核或安装专用驱动 |
|---|---|
| 依赖 | 硬件辅助(VT-x/AMD-V)或二进制翻译 |
| 典型实现 | ESXi、Hyper-V、KVM + 硬件辅助 |
| 优点 | 兼容性好,物理机镜像可直接迁移 |
| 局限 | 缺少硬件辅助时性能显著下降,仅适合实验 |
典型使用场景
- 同一台宿主上并行运行不同内核版本或不同发行版的系统
- 物理机迁移上云(P2V/V2V),尽量不改动原系统
- 搭建开发与实验环境,快速克隆多套系统
- 运行厂商不提供半虚拟化驱动的老系统
确认硬件辅助可用
确认硬件辅助可用
grep -m1 -oE 'vmx|svm' /proc/cpuinfo # vmx = Intel VT-x;svm = AMD-V
ls -l /dev/kvm # 存在且可读写才说明可以使用 KVM 加速
kvm-ok # Debian/Ubuntu 上的检查工具(kvmtool 包)
# BIOS/UEFI 中需开启虚拟化选项,否则 CPU 标志不会出现虚拟化方式对比
| 方式 | guest 是否需改 | 典型实现 |
|---|---|---|
| 全虚拟化 | 不需要修改 | ESXi、Hyper-V、KVM + 硬件辅助 |
| 半虚拟化 | 需要(前端驱动/改内核) | Xen PV、virtio 系列设备 |
| 硬件辅助虚拟化 | 不需要修改 | VT-x / AMD-V 扩展,常与全虚拟化叠加使用 |
缺少硬件辅助时 QEMU 可用 TCG 纯软件模拟运行,但性能通常只相当于物理机的一小部分,仅适合实验与临时环境。
嵌套虚拟化需要在宿主显式开启(如 KVM 的 nested 模块参数);公有云实例是否开放 VT-x 取决于厂商与实例规格,购买前确认。
判断与选型要点
- 看 guest 是否需要改内核:不需要改的基本属于全虚拟化路径
- 看宿主 CPU 标志:没有 vmx/svm 就只能靠软件模拟,性能不可用于生产
- 看 I/O 路径:磁盘与网卡是否走 virtio 等优化驱动,直接决定实际吞吐
- 看迁移需求:全虚拟化的镜像通用性好,跨平台搬运成本最低
全虚拟化与半虚拟化并非互斥:现代 KVM 常见组合是 CPU 走硬件辅助全虚拟化,磁盘与网卡使用 virtio 半虚拟化驱动以获得更好的 I/O 性能。