虚拟化技术:计算虚拟化、存储虚拟化、网络虚拟化。
一、计算虚拟化介绍
- 计算虚拟化的分类及作用
1、 CPU虚拟化:保障CPU资源的合理调度以及VM上的指令能够正常高效的运行。
2、 内存虚拟化:保障内存空间的合理分配、管理、隔离以及高效可靠的使用。
3、 I/O虚拟化:保障VM的IO操作隔离与正常高效地执行。
- 常见的计算服务架构
虚拟化只是底层硬件与上层OS/app解耦,提供可灵活分配地技术资源池地底层技术。要想实现虚拟机的创建与管理,需要与其他组件(镜像、调度、存储、网络等)协同工作才能完成,并提供完整的计算服务。
- OpenStack Nova(开源)
开源的云平台,通过不同同组件提供计算、存储、网络、数据库等多种云服务。其中计算服务由Nova组件提供,通过nova-API与其他组件通信,通过nova-compute对接不同的虚拟层提供计算虚拟化服务
Nova架构:
- 阿里云ECS架构(厂商私有)
云服务器ECS是阿里云提供的基于KVM虚拟化(上一节提到的全虚拟化<=>混合虚拟化)的弹性计算服务,建立在阿里云飞天(Apsara)分布式操作系统上,实现计算资源的即开即用和弹性伸缩。
请求的主要调用流程:OpenAPI --> 业务层 --> 控制系统 --> 宿主机服务。
- 腾讯云CVM架构
云服务器CVM(Cloud Virtual Machine)是腾讯提供的基于KVM虚拟化的弹性计算服务,建立在腾讯云分布式资源管理调度系统vStation上(有自己的分布式系统)。
请求调用流程为:API Server --> vStation --> 服务器集群。
二、CPU虚拟化
在物理机(宿主机)中通过进程或线程这种纯软件的方式模拟出假的CPU。
通过CPU虚拟化可以将一个物理CPU发给不同的虚拟机使用,但物理CPU核数要大于虚拟CPU总核数,因为虚拟出来的每颗CPU实际上就是一个线程或进程,虚拟CPU过多时,需要进行线程/进程的切换,浪费时间。
- CPU虚拟化的计算
总资源 = 服务器CPU个数 * 单个CPU的核数kernel * 线程(超线程为2,单线程为1,一般为超线程)
eg. 某个服务器有四个主频为3.0GHz的CPU,每个CPU四核,超线程。
∴ 服务器总共可以虚拟出来的VCPU = 4 * 4 * 2 = 32个;
∴ 总资源为 32 * 3.0GHz = 96GHz。
一般多个虚拟机之间可以复用一个物理CPU,因此单台服务器上的虚拟机可以使用的VCPU大于总的VCPU数量。
- CPU Qos(服务质量)
CPU服务质量,用来控制虚拟机使用CPU资源的大小。
主要分为三类:份额、预留、限额。
(1) CPU资源限额:控制虚拟机占用物理资源使用的上限;
(2) CPU资源份额:定义了多台虚拟机在竞争物理CPU资源时,需要按比例分配计算资源;
(3) CPU预留资源:定义了多台虚拟机在竞争物理CPU时,每台虚拟机最低分配的计算资源。
在分配时,最先看预留,再看份额,最后看限额。
eg. 一个2.8GHz的单物理机,三台VM:A、B、C,份额分别是:1000、2000、4000,预留为:700MHz、0MHz、0MHz。思考:满CPU运行时每台资源。
解:先看预留:A有预留700MHz,B、C没有预留
∴ A = 700MHz;
再看份额,由于A有预留,已经分配,因此不看A,剩下B、C比例为2 : 4 = 1 : 2;
∴ B = (2.8GHz - 700MHz) * (1/3) = 700MHz;
C = (2.8GHz - 700MHz) * (2/3) = 1.4GHz;
- NUMA(Non Uniform Memory Access Architecture)
非统一内存访问体系结构,提高物理服务器性能的一种技术。
原理:将物理服务器的CPU和内存资源分到多个node上,由于node内部可以独立工作,node内的内存访问效率最高。NUMA则保证了一个VM上的VCPU尽量分配到同一个node中的物理CPU上,如果一台VM的VCPU跨node访问内存的话,访问的延时会增加。
保证VM1只占用CPU1,而不会占用CPU1的一部分再占用CPU2的一部分。
三、内存虚拟化
目标:保障内存空间合理分配、管理以及隔离、高效地运行。
内存虚拟化抽象了物理内存(32位机寻址空间2^32,64位机寻址空间2^64)。底层有机制将虚拟地址根据页表映射成相应的物理地址。
- 内存虚拟化类型
1、全虚拟化 <==> 影子页表技术SPT(Shadow Page Table)
为每个VM维护一个SPT,记录虚拟化内存与物理地址内存的映射关系。VMM将SPT提交给CPU的内存管理单元MMU(地址转换单元)进行地址转换,VM的页表无需改动。
VM的页表固定,分配的物理内存也固定。
2、半虚拟化 <==> 页表写入法
为每个VM创建一个页表并向VMM注册。VM运行过程中VMM不断管理和维护该页表,确保VM能直接访问到合适的地址。
VM页表不固定,可动态修改,也可动态伸缩(物理内存不够可再分配,然后修改VM页表)。
3、硬件辅助内存虚拟化 <==> Intel扩展页表EPT(Extend Page Table) 和 AMD嵌入页表NPT(Nested Page Table)
全虚拟化和半虚拟化都增加了一个页表,相当于增加了一个中间商,效率不高
EPT/NPT是MMU的一个扩展,CPU硬件的一个特性(自带的,嵌入了CPU),通过硬件方式实现GuestOs物理内存 --> HostOS物理内存的地址转换,比上述开销低、性能高。
- 内存复用
在服务器物理内存一定的情况下,通过综合运用内存复用单项技术(内存气泡、内存共享、内存交换)对内存进行分时复用。
通过内存复用,使得虚拟机内存规格总和大于服务器内存规格总和,提高服务器中虚拟机密度。(逻辑意义上6G --> 9G)
内存复用Qos:
(1) 内存预留:VM预留最低的物理内存;
(2) 内存份额:适用资源复用场景,按比例分配内存资源。
常见内存复用技术:
1、内存气泡
虚拟化层将较空闲的VM内存,分配给内存使用较高的虚拟机,提高物理内存利用率。但所有VM使用的分配内存总量不能超过该服务器的物理内存总量。
内存的回收和分配由虚拟化层实现,虚拟机上的应用无感知。
2、内存交换
将外部存储虚拟成内存给VM使用(其中存储的是不常用的),将VM上长时间未访问的数据存放到外部存储上,建立映射关系。VM再次访问这些数据时,通过映射关系再与内存上的数据进行交换。
3、内存共享
VM对共用的内存(共享数据内容为0的内存页)做只读操作,当有写操作时,运用写时复制(开辟另一块空间,并修改映射)。
eg. 两台VM中有1/3的信息是一样的,就用共享内存,其余2/3不一样的存放在自己的内存中。
内存复用eg. 物理内存6G,部署三台虚拟机,未开启内存复用时,每台VM只各分配了2G内存(1:1:1分配),开启内存虚拟化,通过内存复用可将物理的6G变成逻辑上的9G,这样每台虚拟内存3G(多出来的1G是通过气泡(空闲)、交换(外存)、共享(相同的)虚拟出来的)。
四、I/O虚拟化
目标:保障虚拟机的IO操作隔离与正常高效的运行。
假设大部分计算服务都迁移到了虚拟化环境中(好处:资源共享且减少开销),而虚拟机要访问外围设备(磁盘、网络等,且即使在非虚拟化环境中访问外围设备也需要技术–>应用程序使用系统调用),因此到达虚拟机层面,要达到硬件的访问速度很困难,如何处理虚拟化IO呢?
方法:
(1) 全虚拟化:通过软件模拟的形式模拟IO设备(性能不高);
(2) 半虚拟化:由Hypervisor提供资源调用接口。VM通过特定的调用接口与Hypervisor通信,完成获取完整IO资源控制操作(需要修改内核以及驱动程序,存在移植性和适应性问题,导致其使用受限。即只能在当前环境中运行。但性能高);
(3) 硬件辅助虚拟化(I/O直通技术):通过硬件辅助,使虚拟机不用通过VMM直接访问物理设备。
–>常用SR-IOV(Single Root I/O Virtualization)单根I/O虚拟化标准。该技术可以直接虚拟出128~512个网卡,让虚拟机都拿到一块独立的网卡,直接使用I/O资源。
- I/O环
非密集I/O:1s都的次数很少;
密集I/O:1s读的次数多但每次读的内容少(宽度小)。
I/O环适配功能主要用来提升大块(44K以上)多队列(32队列深度以上)类型的IO密集型业务中I/O的性能(就是将存储设备资源利用率提高)。
用户可以通过开启I/O环适配功能,提升I/O性能。
五、常见集群策略
集群(cluster):计算机系统,通过一组计算机或服务器的软硬件连接起来,高度紧密地协作完成计算工作。
在客户端看来只有一台设备为其提供服务,但实际上它是一群设备地集合,只不过他们提供的服务一样。
好处:集群中单个计算机称为节点,通过局域网连接,利用多个计算机进行并行计算,获得很高的计算速度;也可以用用多个计算机做备份,提高可靠性。
- 虚拟机的HA机制
HA(High Availability):高可用性。一种让服务中断尽可能少的技术。将多台主机组建成一个故障转移集群,运行在集群上的服务(or VM)不会因为单台主机的故障而停止。
好处:提升故障恢复速度(秒级),降低业务中断时间,保证业务连续性,实现一定的系统自维护。
- 动态资源调度(DRS)
DRS(Dynamic Resource Scheduling)动态资源调度:根据对资源池资源负载的动态监控,合理触发均匀分配规则,实现资源池中的物理服务器之间重新分配虚拟机的目的。–> 负载均衡,削峰填谷
当前物理服务器上负载过大时,通过DRS将虚拟机迁移到其他负载较轻的物理服务器上;当虚拟机负载过大使,DRS将为资源池中的物理服务器重新分配虚拟机可使用的资源,在多个虚拟机之间智能地分配可用资源。
- 分布式电源管理(DPM)
DPM(Distributed Power Management):分布式电源管理,用于业务较轻(负载较小)时,将虚拟机动态“集中”到集群中的少部分主机上,将其他主机待机,节省电力消耗,等到业务量(负载)较大时,再重新唤醒之前待机的主机。
执行DPM策略的前提是开启DRS策略。DMP策略依赖DRS进行虚拟机的转移。
- 集成存储器控制器(IMC)
IMC(Intergrated Memory Controller):集成存储器控制器。设置IMC策略,使虚拟机可以在不同CPU类型的主机之间进行切换,确保主机向虚拟机提供相同的CPU功能集。即使主机的实际CPU不同,也不会因为兼容性迁移失败。
不建议开启IMC,最好将相同的CPU放在一个集群里。
六、华为FusionCompute
FusionCompute是华为云操作系统(FusionSphere)的一款基础软件,主要负责底层硬件资源(计算、存储、网络)的虚拟化。通过统一的接口,对虚拟出来的资源进行集中的调度和管理,从而降低业务的运行成本,保证系统的安全性和可靠性。
组成:
(1) 计算节点代理CNA(Computing Node Agent):其中包含VNA(Virtual Node Agent)虚拟节点代理,VNA主要负责计算、存储、网络虚拟化的配置以及管理。CNA相当于安装在物理服务器上的OS,主要提供虚拟计算功能,管理计算节点上的虚拟机,管理计算节点上的计算、存储、网络资源。
(2) 虚拟资源管理器VRM(Virtual Resource Manager):FC的管理单元,一般安装在虚拟机上,也可以以ISO(镜像)方式安装在物理服务器上,主要提供对资源的集中管理,并提供统一的维护操作接口。
CNA一般只有一个,VRM可以是多个。即CNA虚拟出来资源,VRM管理资源。
- 架构