虚拟化的(大部分)指令是直接跑在真实的 CPU 上的,虚拟机内的指令集与宿主机相同,执行速度接近原生(宿主机)执行的速度。

与虚拟化相对的一个概念是仿真 / 模拟,简单说就是伪造硬件。例如 QEMU 依靠模拟 ARM 处理器在 x86 处理器系统中创建一个 ARM 处理器的虚拟机。

虚拟化技术分为以下几种:

  • 基于二进制辅助翻译的全虚拟化

    • 使用了一种叫做二进制转换(Binary Translation)的技术。其核心是让 Hypervisor 运行在 Ring 0 上,由它来负责管理底层的硬件。而虚拟机的操作系统运行在权限较低的 Ring 1 上,普通指令直接转交 CPU 执行,调用特权指令的时候,Ring 0 的 VMM 使用二进制转换技术将这些指令调用拦截下来,并负责指令的后续工作。
    • 优点:兼容性好,无需修改操作系统内核,无需额外硬件支持
    • 缺点:软件拦截机制,性能开销大
    • VMware Workstation 早期版本
  • 半虚拟化

    • 使得虚拟机的操作系统仍然可以运行在 Ring 0 上,但是需要修改操作系统的内核,把其中对特权指令的调用都改成对 Hypervisor 的调用,这种调用叫做 Hypercall,半虚拟化的典型代表是 Xen。这样,当在 Ring 0 上的虚拟机的操作系统调用特权指令的时候,会转成对 Hypervisor 的 Hypercall 调用,依然是由 Hypervisor 来统一的对系统硬件资源进行管理。
    • 优点:性能开销较小,效率高
    • 缺点:需要修改 Guest OS 内核
    • Xen-PV
  • 基于硬件辅助的全虚拟化

    • 需要 CPU 对虚拟化技术的支持。CPU 提供了 root 模式与 non-root 模式,各有 Ring 0 到 Ring 3。虚拟机的操作系统运行在 non-root 模式的 0 环上,在操作系统调用特权指令的时候,通过硬件的机制将特权指令调用通过类似于中断的机制转到在处在 root 模式的 Hypervisor 上,由 Hypervisor 完成对硬件的统一管理。
    • 优点:性能开销比基于二进制辅助翻译的全虚拟化小,且无需修改操作系统内核,兼容性好
    • 缺点:需要有硬件支持(如 Intel VT, AMD SVM)
    • VMware Workstation 后期版本、Xen-HVM、KVM

Reference

虚拟化技术简介: https://www.neko.ooo/introduction-to-virtualization/