硬件虚拟化

在“虚拟化技术概念及分类 ”一文中,从应用程序的角度,将虚拟化技术分为: 硬件虚拟化、操作系统级虚拟化和程序库级虚拟化三类。本文将对硬件虚拟化的概念、发展历史做展开描述。

硬件虚拟化是对计算机硬件环境的虚拟,其上支持多种操作系统并发执行。在描述硬件虚拟化之前,先来了解一下计算机的硬件环境。


计算机硬件环境

当前服务器均基于Modified Harvard架构,其简化结构如下:
中央处理器:执行特定指令集指令的数字电路,是特定指令集架构(如:x86-64、ARM)的具体实现。
内存:CPU直接访问的存储设备,存储了CPU执行需要的指令和数据。
I/O设备:计算机与外界进行信息交互的设备,例如网卡,磁盘等。

作为参考,如下是一个真实的x86服务器架构:


硬件虚拟化

为虚拟化计算机硬件环境,需要对上述三个核心组件进行虚拟,即硬件虚拟化的三个核心组成部分:
CPU虚拟化:支持特定指令集(如:IA-32e、ARMv8.2、RISC-V)特权和非特权指令执行,指令执行于虚拟CPU环境,同个物理CPU可对应多个虚拟CPU。

内存虚拟化:内存虚拟化实现了对不同操作系统及其上应用程序内存视图的虚拟及访存的隔离。

I/O虚拟化:提供虚拟的输入/输出设备,以便操作系统及其上应用程序与外界通信。

硬件虚拟化在实际应用中,其实现架构如下图所示:
虚拟机 :虚拟机是软件模拟的计算机硬件环境,提供物理计算机的功能。虚拟机包含虚拟硬件、客户操作系统和客户应用程序。
Hypervisor:Hypervisor实现了CPU、内存和I/O虚拟化、使得多个不同操作系统虚拟机的并发执行成为可能。Hypervisor是虚拟机的管理者、也称虚拟机管理器或者虚拟机监视器。
硬件设备: 物理设备资源,包含处理器、内存、I/O设备等。


硬件虚拟化的分类

从是否需要修改客户操作系统的角度可以分为如下两类:
全虚拟化:不需要修改客户操作系统和客户程序,依赖二进制翻译或硬件辅助等技术实现。
半虚拟化:需要修改客户操作系统,替换部分操作系统代码用于辅助虚拟化实现,典型代表是Xen PV。

全虚拟化相对于半虚拟化有更好的兼容性,而在有了硬件辅助技术之后,性能也达到甚至超过半虚拟化的性能。因此,目前大多数的硬件虚拟化用的都是全虚拟化。


硬件虚拟化发展历史

  • 1994 Bochs 发布,可模拟IA32 IBM PC兼容机环境
  • 1997 Virtual PC发布
  • 1999 VMware发布VMware Workstation,支持全虚拟化
  • 2003 Xen 1.0发布,支持半虚拟化
  • 2005 Intel发布支持VT-x的奔腾4CPU
  • 2006 AMD发布支持SVM的速龙64CPU
  • 2007 包含KVM的2.6.20Linux内核发布,支持硬件辅助虚拟化

从上世纪80年代、90年代到现在,硬件虚拟化伴随着计算机软硬件一路发展。到今天,随着硬件辅助虚拟化的全面普及,以KVM为代表的全虚拟化技术已经在云计算领域得到了广泛的应用。


参考资料:
[1] Jim Ledin. Modern Computer Architecture and Organization.
[2] Smith J E, Nair R. Virtual Machines: Versatile Platforms for Systems and Processes.
[3] https://en.wikipedia.org/wiki/Instruction_set_architecture
[4] https://lenovopress.com/lp1392-thinksystem-sr650-v2-server
[5] Staff V I. Whitepaper: Understanding Full Virtualization, Paravirtualization, and Hardware Assist[J]. virtualization.info, 2007.
[6] Anil Madhavapeddy. Lecture Virtualization I and II, 2018.
[7] https://en.wikipedia.org/wiki/Timeline_of_virtualization_development