(云计算HCIP)HCIP全笔记(十二)本篇介绍虚拟化技术,内容包含:虚拟化资源、CPU虚拟化、KUMA、KVM介绍、模拟CPU指令、敏感指令区分、内存虚拟化、TLB技术、影子页表技术_hva云计算
1. 虚拟化资源
1.1 虚拟化对象
-
CPU虚拟化:
-
内存虚拟化:
目标是能做好虚拟机内存空间之 间的隔离,使每个虚拟机都认为自己拥有了整个内存地址,且效率页能接近物理机。
-
I/O虚拟化:
目标使不仅让虚拟机访问到他们所需 要的I/O资源,而且要做好它们之间的隔离工作,更重要的是减轻由于虚拟化所带来的开销。
1.2 虚拟化过程
-
全虚拟化:
使用VMM实现CPU、内存、设备I/O的虚拟化,而Guest OS和计算机系统硬件都不需要进行修改。
-
半虚拟化:
使用VMM实现CPU和内存虚拟化,设备I/O虚拟化由Guest OS实现。
-
硬件辅助虚拟化:
借助硬件(主要是处理器)的支持来实现高效的全虚拟化。
- 该技术将逐渐消除软件虚拟化之间的差别,成为未来的发展趋势。
能够识别敏感指令
1.3 CPU 虚拟化
- 数量:将一个物理CPU抽象成多个vCPU,物理CPU的线程数等同于vCPU的数量
- 指令:在bios上开启硬件辅助虚拟化技术(intel:vt-x amd:amd-v)
- CPU指令集类型
- RISC
- CISC
- 指令级别
- 特权指令
- 非特权指令
- 系统分级
- ring0
- ring1
- ring2
- ring3
- CPU指令集类型
1.3.1 如何模拟CPU指令(所有敏感指令)
特权指令只能在处理器最高特权级(内核态)执行
-
硬件辅助虚拟化解决:
要求CPU支持虚拟化,当CPU支持,会将指令再分为root模式跟非root模式
1.3.1.1 非root模式:
用户仅能使用CPU的两种指令:
- 特权指令(Ring0级别才能用)
- 普通指令(Ring3级别即可)
- 敏感指令(x86架构中敏感指令集和特权指令集两者交叉的部分)
敏感指令能够修改虚拟机的运行模式或宿主机状态的指令
- 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接口
用处:
- 它可以屏蔽虚拟化平台的差异
- 安装后运行libvirtd进程:操作虚拟化平台
- 管理硬件驱动
管理工具/命令行:
可以管理本服务器上的libvirt页可以通过网络管理其他服务器上的libvirt
1.4 内存 虚拟化
将物理机内存进行统一管理,引入一个新的内存空间,让虚拟机运行于新的内存空间中
- 四类内存地址:
- 物理机的物理内存 —— HPA
- 物理机的虚拟内存 —— HVA
- 虚拟机的物理内存 —— GPA
- 虚拟机的虚拟内存 —— GVA
物理机 资源流转至 虚拟机过程
HPA(物理内存地址)–>GPA(虚拟机OS获取的地址)–>GVA(虚拟机应用程序获取的地址)
Native操作系统对内存的认识与管理达成以下两点认识:
- 内存都是从物理地址0开始的
- 内存都是连续的
内存虚拟化需要解决两个的问题:
-
从物理地址0开始的:
物理地址0只有一个,无法同时满足所有客户机从0开始的要求;
-
地址连续:
虽然可以分配连续的物理地址,但是内存使用效率不高,缺乏灵活性。
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缓存目的变的没有意义了。
然而,EPT
和NPT
两个技术则通过在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所作的一部分案例