硬件虚拟化

Hardware virtualization 也称为平台虚拟化(platform virtualization),指创建的虚拟机就好像在真实主机上运行的操作系统。在硬件虚拟化的虚拟机中软件运行是和底层物理硬件资源隔离的,Guest操作系统和Host操作系统可以是完全不同内核和不同种类的操作系统。

在2005年和2006年,Intel和AMD分别提供了x86架构下的硬件辅助虚拟化技术。其中,Intel虚拟化技术称为 VT-x ,在笔记本到服务器的很多主流Intel芯片都提供了VT-x虚拟化技术支持。在 KVM Atlas 中,我实践的KVM虚拟化技术大多也是基于Intel VT-x硬件辅助虚拟化实现的。

不过,实际上现代主流处理器,包括X86(intel和AMD) / ARM / PowerPC 等都对KVM有不同程度的支持,我们可以通过处理器信息检查了解CPU支持虚拟化情况:

  • Intel:
    • 在Linux操作系统中通过 /proc/cpuinfo 检查是否包含 vmx 关键字
    • 在 macOS中通过命令检查 sysctl machdep.cpu.features 检查。

vmx 即 Virtual Machine Extensions (虚拟机扩展),添加了10条新指令: VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, 和 VMXON 。这些指令允许进入和退出一个虚拟化执行模式,此时guest OS以为自己运行在完全权限(ring 0),而其实Host OS依然受到保护。

  • AMD:
    • /proc/cpuinfosvm 关键字
  • ARM:
    • ARM从ARMv7-A处理器的Contex-A15开始支持虚拟化,包括Contex-A7和Contex-A17
    • ARMv8-A处理器也支持虚拟化
    • 详见 ARM products processes

嵌套虚拟化

嵌套虚拟化在guest操作系统内部也提供了hypervisor功能,这样第一层虚拟机内部还可以再运行第二层虚拟机,对于云计算平台,甚至可以嵌套不同的云计算技术,例如在OpenStack云计算环境中嵌套运行Vmware云计算平台,对于一些传统的IT架构可以无缝迁移到新的云计算平台。

嵌套虚拟化的实现是基于 硬件辅助虚拟化 的切分计算机架构来实现的。如果没有提供硬件支持的嵌套虚拟化,一些软件技术也能够实现嵌套虚拟化,不过现在越来越多的嵌套虚拟化是需要硬件支持的。例如,从Intel Haswell微架构开始(2013年),Intel开始提供 VMCS shadowing 技术来支持嵌套虚拟化加速。

注解

我所使用的模拟集群部署的MacBook Pro 2015 later恰好是等同于Haswell的Crystal Well系列处理器( Intel Core i7-4850HQ处理器 ),在 KVM嵌套虚拟化 我就只需要使用一台MacBook Pro来模拟OpenStack集群。请参考我的 KVM嵌套虚拟化 来了解嵌套虚拟化的神奇能力。