Skip to main content
  1. Posts/

快速了解虚拟机

本文阅读量
·2 mins·
Vm 虚拟机
udcode
Author
udcode
程序员A-DU
Table of Contents

快速了解虚拟机
#

1. 图解虚拟机
#

2. 宿主机/虚拟机
#

2.1 计算机系统
#

一个计算机系统通常包含:硬件、操作系统、应用程序

  • 底层的硬件是计算的基础;
  • 操作系统向下管理硬件资源,向上为应用程序提供运行环境;
  • 应用程序与用户进行交互,满足用户的具体需求。

操作系统缺少C++运行库导致的错误:

2.2 虚拟化
#

1. 用软件模拟出硬件的特性,再在虚拟的硬件上运行一个系统,有没有可能实现呢? —> 基于这个实现的就是虚拟机了。

2. 虚拟化技术理论
1974年,IBM的研究人员Geral J. Popek和Robert P. Goldberg发表了一篇题为《Formal Requirements for Virtualizable Third Generation Architectures》的论文,这篇论文奠定了虚拟机监控程序(VMM,Virtual Machine Monitor)虚拟化理论的基础。

在这篇论文中,Popek和Goldberg提出了虚拟化的三个基本要求:

  • 等效性(Equivalence):在虚拟机中运行的软件应该与在物理机上运行时表现一致,除了性能上的差异。
  • 资源控制(Resource Control):虚拟机监控程序必须完全控制虚拟机中的所有资源,确保虚拟机之间的隔离性和安全性。
  • 效率(Efficiency):大多数指令应该在不需要虚拟机监控程序干预的情况下直接在硬件上执行,以保证性能。

Popek和Goldberg还定义了两种类型的指令:

  • 特权指令(Privileged Instructions):只能在操作系统内核模式下执行的指令,如果在用户模式下执行会引发陷阱(trap)。
  • 非特权指令(Non-Privileged Instructions):可以在用户模式下执行的指令,不会引发陷阱。

根据这些定义,他们提出了一个重要的结论: 一个计算机架构是可虚拟化的,当且仅当在用户模式下执行的所有特权指令都会引发陷阱。这意味着虚拟机监控程序可以通过捕获这些陷阱来实现对虚拟机的控制。

Popek和Goldberg的虚拟化理论为后来的虚拟化技术发展提供了理论基础,指导了虚拟机监控程序的设计和实现。这个理论在现代虚拟化技术中仍然具有重要的指导意义。

3. VMware成立
1997年,VMware公司成立,标志着现代虚拟化技术的一个重要里程碑。VMware开发了一种新的虚拟化技术,称为二进制翻译(Binary Translation)。

  • 二进制翻译技术
    二进制翻译是一种在运行时将虚拟机中的指令动态翻译为宿主机可以执行的指令的技术。这种方法解决了传统虚拟化技术中的一些关键问题,特别是处理特权指令和非特权指令的执行。

4. Xen/半虚拟化
2003年,剑桥大学计算机实验室开发了一种基于虚拟机监控程序(Hypervisor)的虚拟化技术-Xen。
Xen支持半虚拟化(Paravirtualization)和全虚拟化(Full Virtualization),可以运行多种操作系统。

5. VT-x/VT-d/AMD-V
2005年,英特尔发布了VT-x和VT-d技术,AMD也有同样的AMD-V技术,扩展了x86架构的虚拟化指令集,让它能够更好地支持虚拟化技术。

6. KVM
2007年,由Qumranet公司开发的KVM被合并到Linux内核中。
KVM将Linux内核转变为一个虚拟机监控程序,使得每个虚拟机都是一个普通的Linux进程,利用现有的Linux调度和管理机制,扩展了Linux原生支持虚拟化的能力。
QEMU:KVM通常与QEMU(一个开源的硬件仿真器和虚拟机监控程序)一起使用,QEMU提供设备仿真和用户空间管理。

2.3 虚拟机的特性
#

  • 环境隔离:虚拟机与宿主机、虚拟机与其它虚拟机,环境相互隔离,互不影响。应用场景:软件测试、分析取证,比如病毒/木马程序。
  • 资源共享:虚拟机与宿主机、虚拟机与其它虚拟机共享硬件资源。
  • 弹性伸缩:虚拟机是基于软件创建的,可以做到依据用户需要快速创建、批量复制、快速销毁、集群化管理。

3. 虚拟化类型
#

虚拟化必然会带来性能上的损耗,为了提升虚拟化性能,有以下这些虚拟化类型:

类型 描述 示例
Type 0 硬件固件级别的虚拟化,集成在处理器或硬件中,提供直接支持。 Intel VT-x、AMD-V
Type 1 裸机型虚拟化,直接运行在物理硬件上,提供高性能和隔离性。 VMware ESXi、Hyper-V、KVM
Type 2 托管型虚拟化,运行在操作系统上,依赖宿主操作系统的资源管理和调度。 VMware Workstation、VirtualBox、Parallels
Type 3 应用层或轻量级虚拟化,更多依赖于共享操作系统或资源。 Docker、LXC、JVM

总结

  • Type 0 和 Type 3 的概念扩展了虚拟化的范畴,但它们没有像 Type 1 和 Type 2 那样成为行业标准。
  • Type 0 描述的是硬件级别的虚拟化,而 Type 3 更多关注软件和容器化技术。
  • 根据实际需求选择合适的虚拟化技术:Type 1 和 Type 2 常用于虚拟机,而 Type 3 在现代应用开发(如微服务和容器)中更受欢迎。

4. Type 2 型虚拟机
#

虚拟化管理器运行在操作系统之上,依赖于操作系统提供硬件访问。

常见的虚拟化管理软件:

  • VMware Workstation Pro
  • VirtualBox
  • QEMU:支持多种架构:QEMU能够在不同架构间进行模拟,例如在x86主机上运行ARM或RISC-V系统。
  • Parallels Desktop:macOS上的虚拟机程序。

5. Type 1 型虚拟机
#

虚拟化管理器直接运行在物理硬件上,可以称为"裸机型"。

  • VMware ESXi:VMware开发的企业级Type 1型虚拟机,用于硬件虚拟化。
  • Windows Hyper-V:启用后,原本的Windows系统成为根分区。嵌套虚拟化可能导致兼容问题。
  • QEMU-KVM:混合型,KVM是Linux的内核模块,提供CPU和内存的虚拟化,其它设备的虚拟化依赖QEMU提供。

6. 硬件虚拟化
#

还是为了提供虚拟化的性能,通过在硬件层面提供支持,使得虚拟机可以直接使用物理资源或通过虚拟化层(如 Hypervisor)间接访问这些资源。

6.1 CPU 虚拟化
#

CPU 是硬件虚拟化的核心,现代处理器通过指令集扩展提供虚拟化支持。

CPU 虚拟化

  • Intel VT-x(Virtualization Technology)
    • Intel 的虚拟化技术,通过增加新的 CPU 指令和 VMCS(Virtual Machine Control Structure)来支持虚拟化。
  • AMD-V(AMD Virtualization)
    • AMD 的虚拟化扩展,与 Intel VT-x 类似,提供 CPU 指令级支持。
  • ARM Virtualization Extensions(ARM VE)
    • ARM 架构支持虚拟化的扩展,广泛用于嵌入式和移动设备。

I/O直通:Intel VT-d 和 AMD SVM

  • 核心功能:VT-d 是 Intel 的硬件辅助虚拟化技术,用于解决虚拟机直接访问物理 I/O 设备(如网卡、GPU、存储控制器)时的安全和性能问题。

  • 关键技术

    • DMA 重映射(DMA Remapping):允许物理设备通过 DMA 直接访问虚拟机内存,同时确保隔离性(防止设备越权访问其他虚拟机的内存)。

    • 中断隔离:将设备中断直接路由到目标虚拟机,减少 Hypervisor 的干预。

    • 设备直通(Passthrough):将物理设备直接分配给某个虚拟机,绕过 Hypervisor 的虚拟化层,降低延迟。

  • 目标:提升 I/O 性能,同时保障安全性。

6.2 内存虚拟化
#

二级地址转换(Second-Level Address Translation, SLAT)

  • Intel 称为 EPT(Extended Page Tables)
  • AMD 称为 RVI(Rapid Virtualization Indexing)

实现虚拟机内存的高效映射,降低内存管理的性能开销。

6.3 I/O 虚拟化
#

SR-IOV(Single Root I/O Virtualization)

  • 硬件支持多虚拟机共享同一个物理 I/O 设备(如网卡、GPU)。
  • 每个虚拟机可以直接访问分配给它的虚拟功能(VF)。

6.4 网络虚拟化
#

利用虚拟交换机(vSwitch)和硬件加速技术,将物理网络资源虚拟化为逻辑网络,供虚拟机使用。

6.5 存储虚拟化
#

通过抽象存储设备,将物理存储分割或聚合成逻辑存储卷,支持动态分配。

6.6 显卡虚拟化
#

6.6.1 早期的GPU分片虚拟化(vGPU)
#

GPU分片虚拟化是将一个物理的GPU分割成多个实例,给不同的虚拟机使用。

  • 最初PCI规范下,一个物理GPU设备只有一个PCI地址,为了能够多个虚拟机能够使用一个GPU,需要引入一个协调者(Mediate),来协调不同虚拟机对GPU的使用。
  • 每个虚拟机使用的是一个mdev(Mediated Device)。
  • 至于IOMMU(地址空间映射)是为了实现GPU和虚拟机的高效和快速通信。

NVIDIA 安培架构之前的GPU都是采用Mediate方案。

  • NVIDIA M10/M60/P4/P40/T4/RTX6000/RTX6000 都是这种方案。

NVIDIA 支持vGPU的显卡打包在了NVIDIA vWS和vPC的方案里面。

  • 只有宣称支持vWS/vPC的显卡采用启用GPU虚拟化。
  • 并且NVIDIA会对vGPU收取License费用。

另外针对普通NVIDIA显卡不支持虚拟化的问题,业内有vgpu-unlock的方案。

  • 将普通显卡破解,实现启用vGPU。
  • 这一方案仅仅适用于图灵架构及之前的GPU,安培架构的GPU不适用于这一方案。

6.6.2 基于SR-IOV的vGPU
#

SR-IOV:单根IO虚拟化,指的是一个PCIe物理设备,可以虚拟出多个虚拟设备,每个虚拟设备又自己的PCI地址。

  • 这样物理设备内的每个虚拟设备的实例可以分配自己的PCI地址。
  • 这样虚拟机与虚拟设备实例之间可以通过自己的PCI地址进行通信,大大提升了效率,也简化了管理。

NVIDIA 的GPU从安培架构开始支持SR-IOV。

  • 比如 A2、A10、A40、A5000、A6000、L2、L20、L40。
  • 尽管支持SR-IOV,mediate的功能框架仍然保留了。

Intel从12代CPU开始,也支持核显的SR-IOV。11代的移动处理器(比如1135G7)核显也支持SR-IOV。

AMD采用SR-IOV的vGPU技术称为 MxGPU。

微软在Azure Stack HCI和Windows Server中,提供了基于SR-IOV的vGPU的支持。微软称之为GPU-P。

  • GPU-P从操作系统层面绕过了硬件限制,实现了普通消费级显卡的虚拟化。
  • GPU-P支持红绿蓝厂(AMD/NV/Intel)的消费级显卡。

6.6.3 vGPU的应用场景
#

主要应用于如下场景:

办公场景:vGPU用于对操作系统和相关应用进行加速,提升用户体验,降低CPU的消耗。

  • 在Microsoft Windows 10/11、Office 365、Web 浏览器和视频流相关的应用程序,会使用到GPU进行加速。

设计场景:专业的设计应用(CAD/CAM)需要使用GPU进行加速显示、渲染、模拟计算

  • 专业的设计软件对于桌面的GPU有要求,比如数字媒体、设计、仿真等应用。
  • 比如 Adobe系列产品(PS、AE、AI、PR、AU)、Autocad、Revit、Maya、3Dmax、SolidWorks、Pro-E、NX/UG、Catia、Stable Diffusion、Blender 3D。
  • 这类应用一般采用专业的图形工作站。

游戏场景:满足在线运行游戏的需求,满足游戏的实时交互体验

  • 比如3A大作《黑神话-悟空》,以及一些网络游戏。
  • 游戏场景对GPU由更高的要求,一方面游戏是实时业务,需要及时低延时和瞬时响应,以确保操作体验。另一方面游戏对于画质、实时渲染的帧率,有很高的要求。

7. 云计算
#

虚拟化技术是构建云计算的基石。

开源云计算平台:

  • OpenStack:构建企业化的大型云计算平台,比如企业自建的xxx云。

  • PVE:构建家用私有云计算平台,比如All in one服务器。

公有云:

  • 国内云厂商有:阿里云、腾讯云、华为云、天翼云、Ucloud、金山云等等。

  • 国外云厂商有:微软、亚马逊、Salesforce Inc.、谷歌和甲骨文等等。

Related

使用Cloudflare加速访问个人博客
·1 min
Web Blog
快速搭建个人博客网站
·2 mins
Web Blog