> 技术文档 > (云计算HCIP)HCIP全笔记(十二)本篇介绍虚拟化技术,内容包含:虚拟化资源、CPU虚拟化、KUMA、KVM介绍、模拟CPU指令、敏感指令区分、内存虚拟化、TLB技术、影子页表技术_hva云计算

(云计算HCIP)HCIP全笔记(十二)本篇介绍虚拟化技术,内容包含:虚拟化资源、CPU虚拟化、KUMA、KVM介绍、模拟CPU指令、敏感指令区分、内存虚拟化、TLB技术、影子页表技术_hva云计算


1. 虚拟化资源

1.1 虚拟化对象

  • CPU虚拟化:

    目标是使虚拟机上的指令能被正常执行,且效率接近物理机

  • 内存虚拟化:

    目标是能做好虚拟机内存空间之 间的隔离,使每个虚拟机都认为自己拥有了整个内存地址,且效率页能接近物理机。

  • I/O虚拟化:

    目标使不仅让虚拟机访问到他们所需 要的I/O资源,而且要做好它们之间的隔离工作,更重要的是减轻由于虚拟化所带来的开销。

1.2 虚拟化过程

  • 全虚拟化:

    使用VMM实现CPU、内存、设备I/O的虚拟化,而Guest OS和计算机系统硬件都不需要进行修改。

优点 缺点 不需要修改guest os 虚拟化层的开销大
  • 半虚拟化:

    使用VMM实现CPU和内存虚拟化,设备I/O虚拟化由Guest OS实现。

优点 缺点 虚拟化层开销小,性能好 需要修改guest os
  • 硬件辅助虚拟化:

    借助硬件(主要是处理器)的支持来实现高效的全虚拟化。

    • 该技术将逐渐消除软件虚拟化之间的差别,成为未来的发展趋势。
优点 缺点 让物理硬件直接支持虚拟化功能
能够识别敏感指令 需要CPU支持虚拟化

1.3 CPU 虚拟化

(云计算HCIP)HCIP全笔记(十二)本篇介绍虚拟化技术,内容包含:虚拟化资源、CPU虚拟化、KUMA、KVM介绍、模拟CPU指令、敏感指令区分、内存虚拟化、TLB技术、影子页表技术_hva云计算

  • 数量:将一个物理CPU抽象成多个vCPU,物理CPU的线程数等同于vCPU的数量

(云计算HCIP)HCIP全笔记(十二)本篇介绍虚拟化技术,内容包含:虚拟化资源、CPU虚拟化、KUMA、KVM介绍、模拟CPU指令、敏感指令区分、内存虚拟化、TLB技术、影子页表技术_hva云计算

  • 指令:在bios上开启硬件辅助虚拟化技术(intel:vt-x amd:amd-v)
    • CPU指令集类型
      • RISC
      • CISC
    • 指令级别
      • 特权指令
      • 非特权指令
    • 系统分级
      • ring0
      • ring1
      • ring2
      • ring3

1.3.1 如何模拟CPU指令(所有敏感指令)

指令类别 含义 敏感指令 可以读写系统关键资源的指令 特权指令 绝大多数的敏感指令是特权指令
特权指令只能在处理器最高特权级(内核态)执行
  • 硬件辅助虚拟化解决:

    要求CPU支持虚拟化,当CPU支持,会将指令再分为root模式跟非root模式

1.3.1.1 非root模式:

用户仅能使用CPU的两种指令:

  1. 特权指令(Ring0级别才能用)
  2. 普通指令(Ring3级别即可)
  3. 敏感指令(x86架构中敏感指令集和特权指令集两者交叉的部分)
    敏感指令能够修改虚拟机的运行模式或宿主机状态的指令

(云计算HCIP)HCIP全笔记(十二)本篇介绍虚拟化技术,内容包含:虚拟化资源、CPU虚拟化、KUMA、KVM介绍、模拟CPU指令、敏感指令区分、内存虚拟化、TLB技术、影子页表技术_hva云计算

  • root3:Guest OS的普通指令直接向物理硬件发送指令,无需通过VMM层
  • root2
  • root1
  • root0:Guest OS调用虚拟机系统的root0级别特权指令,
    通过VMM向物理硬件发送指令。

分级保护域:
Ring0:拥有最高级别权限,一般只有操作系统和驱动才会允许拥有此权限
Ring1
Ring2
Ring3:权限最低,所有程序都可以拥有此权限

1.3.1.2 root 模式:VMM

虚拟机的特权指令,仅在虚拟机中是Ring 0级别,当敏感指令出现将会交付给VMM层进行判断,若是需要会给物理硬件进行执行,不然直接在虚拟机中就可使用Ring 0级别的权限

虚拟化层之上为虚拟机,可以说虚拟机是一个拥有了Ring3权限的APP,
但在虚拟机中的系统需要获得Ring0权限才可以进行一系列操作

1.3.2 如何让多个VM共享CPU

利用Native操作系统类似的机制,通过定时器中断(所有CPU都会有的功能),在中断触发时陷入VMM,从而根据调度机制进行调度

KVM:

  • Qemu(此Qemu不是彼Qemu —— KVM-QEMU):处理I/O设备的指令
  • KVM:处理CPU设备的指令
1.3.2.1 解决方案(陷入模拟)

当某台虚拟机需要使用指令时,会中断虚拟机陷入VMM层里,在VMM层中KVM的内核CPU(VCPU)就会捕捉到指令,对指令进行识别。

  • 如果指令是针对于CPU,那么直接在VCPU中运行并返回运行结果给虚拟机,返回结果后虚拟机脱出陷入。

  • 如果指令是针对于I/O设备,那么KVM的内核VCPU进行退出处理,交给I/O操作,再经过ioctl返回至Qemu进行处理,Qemu通过I/O操作模拟,交给Qemu里的VCPU进行运行,然后将结果返回至KVM内核的VCPU,再返回给虚拟机脱出陷入

1.3.2 NUMA

  • NUMA(Non Uniform Memory Access)这项技术可以使众多服务器像单一系统那样运转

  • 同时保留小系统便于编程和管理的优点。

    基于电子商务应用对内存访问提出的更高的要求,NUMA也向复杂的结构设计提出了挑战。

  • 非统一内存访问(NUMA)是一种用于多处理器的电脑内存体设计,内存访问时间取决于处理器内存位置。
    在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器(存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。

  • NUMA架构在逻辑上遵循对称多处理(SMP)架构。

1.3.3 KVM

KVM全称:Kernel-base Virtual Machine

  • KVM:实现cpu/内存的虚拟化 (linux天生集成的模块)

    cpu虚拟化/内存虚拟化 基于硬件虚拟化

  • qemu:实现I/O虚拟化 (软件)

KVM是什么:它属于II型虚拟化

  • 它所在linux内核中,是内核中的一个实现cpu/内存虚拟化的模块
    任意一装由linux操作系统的物理机,安装KVM模块之后即变成了Hypervisor(VMM)
1.3.3.1 三种运行模式
  • Guest Mode(虚拟机):包含虚拟机的CPU、内存、磁盘等虚拟设备

  • User Mode(用户空间):QEMU组件运行于该空间,用来模拟执行IO操作

  • Kernel Mode(内核空间):开源操作硬件的空间

1.3.3.2 libvirt

Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具。
它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术。
这些API在云计算的解决方案中广泛使用。

它是由C语言写的软件包,它属于一个管理工具,用于对接各种hypervisor(VMM),同时内部设计了多种语言的api接口

用处:

  1. 它可以屏蔽虚拟化平台的差异
  2. 安装后运行libvirtd进程:操作虚拟化平台
  3. 管理硬件驱动

管理工具/命令行:
可以管理本服务器上的libvirt页可以通过网络管理其他服务器上的libvirt

1.4 内存 虚拟化

将物理机内存进行统一管理,引入一个新的内存空间,让虚拟机运行于新的内存空间中

  • 四类内存地址:
    1. 物理机的物理内存 —— HPA
    2. 物理机的虚拟内存 —— HVA
    3. 虚拟机的物理内存 —— GPA
    4. 虚拟机的虚拟内存 —— GVA

(云计算HCIP)HCIP全笔记(十二)本篇介绍虚拟化技术,内容包含:虚拟化资源、CPU虚拟化、KUMA、KVM介绍、模拟CPU指令、敏感指令区分、内存虚拟化、TLB技术、影子页表技术_hva云计算

(云计算HCIP)HCIP全笔记(十二)本篇介绍虚拟化技术,内容包含:虚拟化资源、CPU虚拟化、KUMA、KVM介绍、模拟CPU指令、敏感指令区分、内存虚拟化、TLB技术、影子页表技术_hva云计算

物理机 资源流转至 虚拟机过程

HPA(物理内存地址)–>GPA(虚拟机OS获取的地址)–>GVA(虚拟机应用程序获取的地址)

Native操作系统对内存的认识与管理达成以下两点认识:

  • 内存都是从物理地址0开始的
  • 内存都是连续的

内存虚拟化需要解决两个的问题:

  1. 从物理地址0开始的

    物理地址0只有一个,无法同时满足所有客户机从0开始的要求;

  2. 地址连续:

    虽然可以分配连续的物理地址,但是内存使用效率不高,缺乏灵活性。

1.4.1 内存映射

1.4.1.1 TLB

TLB(Translation Lookaside Buffer) —— 转译后备缓冲区

  • 转译后备缓冲器,也被翻译为页表缓存转址旁路缓存

    这是为CPU提供的一种缓存,有存储器管理单元用于改进虚拟地址到物理地址的转译速度

TLB为典型的结合存储(content-addressable memory,首字母缩略字:CAM)

用处:

TLB具有固定数目的空间槽,用于存放将虚拟地址映射至物理地址的标签页表条目
其搜索关键字为虚拟内存地址,其搜索结果为物理地址。

  • 如果请求的虚拟地址在TLB中存在,CAM 将给出一个非常快速的匹配结果,之后就可以使用得到的物理地址访问存储器

  • 如果请求的虚拟地址不在TLB中,就会使用标签页表进行虚实地址转换,而标签页表的访问速度比TLB慢很多。

有些系统允许标签页表被交换到次级存储器,那么虚实地址转换可能要花非常长的时间。

1.4.1.2 影子页表

从软件实现GVA到GPA的转换,由VMM将影子页表载入物理上的内存管理单元(MMU)

  • 缺点:技术复杂、内存开销大

场景复现:

  • 假如现在有A和B两个GuestOS

CPU是轮流分别处理它们的请求当CPU执行到A的时候,会将A请求的VA(Virtual Address)经影子MMU转换为真机的PA(Physical Address),并缓存在TLB中存储;

当GuestOS A使用完本次的CPU时间片后,CPU需要将A切到后台,将B切到前台执行,
但为了防止B在执行过程中误用A缓存在TLB中的结果,故必须将其清空;

当GuestOS A再次被调入前台执行时,发现自己的TLB被清空了,因此它会再次向影子MMU发出内存空间的请求, 经转换后在经结果缓存在TLB中,这时B的TLB缓存已经被清空了,这使得TLB缓存目的变的没有意义了。

然而,EPTNPT两个技术则通过在TLB中为每个Guest OS加入一个标记位,来区分各自的缓存结果,这样每次Guest OS切换回来后,直接在TLB中找到自己的标记就可以获取影子MMU的转换结果。

  • 关于影子页表:

Intel 和AMD分别通过EPT(Extended Page Tables)和 NPT(Nested Page Tables)为虚拟化应用提升影子MMU的性能,
并通过标记(tagged)TLB来避免虚拟机切换时频繁清写(flush)TLB以提高TLB缓存的命中率。

拓展页表(EPT(Extended Page Tables)):
这是用于内存管理单元 (MMU)的英特尔第二代x86虚拟化技术,用于提高MMU的性能而推出的解决方案

AMD-NPT(Nested Page Tables):由AMD推出的用于提高MMU性能的解决方案

EPT:Intel推出的忆体分页虚拟化机制

Intel的CPU提供了EPT (Extended Page Tables,扩展页表)技术,直接在硬件上支持GVA->GPA->HPA的地址转换,从而降低内存虚拟化实现的复杂度,也进一步提升内存虚拟化性能。

NPT:AMD推出的忆体分页虚拟化机制

NPT的两阶段记忆体转换,特点就是将Guest Physical Address→System Physical Address,VMM不用再保留一份SPT(Shadow Page Table),以及以往还得经过SPT这个转换过程。除了降低各部虚拟机器在切换时所造成的效能损耗外,硬体指令集也比虚拟化软体处理来得可靠与稳定。

2. 云计算与虚拟化的区别

类别 作用 云计算 一种商业模式或服务模式 虚拟化 实现云计算的重要手段之一

虚拟化技术:

  • 开源:KVM、XEN

  • 闭源:Hyper-v、vSphere、FusionCompute

3. 缩略词

VRM——————————虚拟机资源管理,会与cna进行对接,可以控制多台cna

KVM——————————虚拟机中的模块,存储在linux内核里

XEN——————————虚拟机中的内核模块,06年以前主流的虚拟机架构

libvirt——————————软件包,负责对接驱动和管理工具,它拥有多种语言的api接口,可以用根据对应语言的api直接进行管理libvirt对kvm操作

Guest Os——————————虚拟机操作系统

Huest Os——————————硬件操作系统

driver——————————硬件驱动

HPA——————————物理机的物理内存

HVA——————————物理机的虚拟内存

GPA——————————虚拟机的物理内存

GVA——————————虚拟机的虚拟内存

TLB——————————转译后备缓冲区

CAM——————————结合存储

4. ❤️HCIP专栏——前文链接

  • (云计算HCIP)价值8k的上万字学习笔记,考华为云计算HICP的有福啦!HCIP全笔记(一)本篇涵盖 云计算概述,谈及虚拟化、云计算的介绍、云服务模式、部署模式的区别和主流云计算技术
  • (云计算HCIP)价值8k的上万字学习笔记,考华为云计算HICP的有福啦!HCIP全笔记(二)本篇介绍服务器基础、硬件结构、RAID冗余阵列
  • (云计算HCIP)价值8k的上万字学习笔记,考华为云计算HICP的有福啦!HCIP全笔记(三)本篇介绍网卡、华为服务器网卡类型、电源和风扇、服务器关键技术:BIOS、IBMC、BMC、IPMI
  • (云计算HCIP)价值8k的上万字学习笔记,考华为云计算HICP的有福啦!HCIP全笔记(四)本篇介绍 存储技术、硬盘类型、存储架构:DAS、SAN、NAS等
  • (云计算HCIP)价值8k的上万字学习笔记,考华为云计算HICP的有福啦!HCIP全笔记(五)本篇介绍存储形态、RAID技术特点与工作原理、RAID的常见级别介绍
  • (云计算HCIP)价值8k的上万字学习笔记,考华为云计算HICP的有福啦!HCIP全笔记(六)本篇介绍存储协议,包含:SCSI、iSCSI、FC协议、iFCP协议、FCoE协议;FC协议与TCP协议
  • (云计算HCIP)HCIP全笔记(七)本篇介绍网络技术基础,包含:网关、交换机、路由的介绍,OSI网络参考模型、TCP/IP协议栈、TCP和UDP协议、SSH协议
  • (云计算HCIP)HCIP全笔记(八)本篇介绍网络技术基础,包含:网络交换的流程、交换机原理、VLAN技术、VLAN划分与接口类型、路由原理、路由转发流程、静态路由和默认路由
  • (云计算HCIP)HCIP全笔记(九)本篇介绍操作系统基础,内容包含:操作系统组成、分类和定义,Linux的特性结构和Linux版本分类
  • (云计算HCIP)HCIP全笔记(十)本篇介绍操作系统基础,内容包含:linux命令使用、linux文件相关命令、vim的使用、配置openEuler静态IP地址、设置主机名 等
  • (云计算HCIP)HCIP全笔记(十一)本篇介绍虚拟化技术,内容包含:虚拟化介绍、虚拟化定义、虚拟化重要概念、虚拟机类型、虚拟化的特点:分区、隔离、封装、硬件独立

5. 💕👉博客专栏

  • Golang专栏-包含基础、Gin、Goam等知识
  • 云原生专栏-包含k8s、docker等知识
  • 从0开始学习云计算-华为HCIP证书
  • JUC专栏-带你快速领悟JUC的知识!
  • JVM专栏-深入Java虚拟机,理解JVM的原理
  • 基于Java研究 数据结构与算法-包含贪心算法、加权图、最短路径算法等知识
  • Docker专栏-上手热门容器技术Docker
  • SpringBoot专栏-学习SpringBoot快速开发后端
  • 项目管理工具的学习-设计技术:Maven、Git、Gradle等相关管理工具
  • JavaSE-全面了解Java基础
  • JS专栏-使用JS作的一部分实例~
  • 使用CSS所作的一部分案例