虚拟化技术(二)

虚拟化有哪些核心概念?

服务器的虚拟化

虚拟化的核心就是虚拟机监视器(Virtual Machine Monitor, VMM/Hypervisor),它是一个虚拟化层,将硬件抽象成虚拟计算资源,分配给虚拟机使用。硬件是一台物理机,有些情况下也被称作宿主机(Host Machine)。虚拟机运行在VMM之上,也被称作客户机(Guest Machine)。在虚拟机上才会安装操作系统(OS),用以通过服务和应用供用户操作完成一些特定的任务。VMM直接运行在硬件上的也被称作裸金属型的。此外,还有一种运行在操作系统上的被称作宿主型的。

服务器的虚拟化的抽象资源包括处理器(CPU或者GPU)、内存和I/O,CPU和内存用于通用计算,GPU用于图形计算、并行计算、智能计算,I/O用于扩展外部设备,包括存储和网络等。从功能上看,虚拟机监视器提供虚拟机的创建、资源的隔离和调度、虚拟化的设备管理等三项功能。此外,为保障虚拟资源的执行效率,降低虚拟化的损耗,VMM的很大一部分工作是性能优化,许多的架构设计方案都是为了达成这个目标。

CPU的虚拟化

物理CPU虚拟化的产物是虚拟CPU,或者vCPU,物理CPU也被称作pCPU。CPU的核心功能是接受指令请求和处理指令,串行接受指令请求和处理指令的单元是线程。模拟出vCPU的主要工作就是构造出线程的部件和功能,包括控制器、运算器、寄存器和高速缓冲存储器等部件,取指令、翻译指令和执行指令等功能。vCPU的数量取决于三个因素,物理CPU的数量、一个物理CPU内的核心数、一个核心的超线程数。

每个虚拟机可以被分配所有的vCPU,也可以分配部分,VMM负责vCPU的调度,也就是把vCPU上的指令转换为物理CPU上的指令。依据虚拟化方法的不同,有全虚拟化、硬件辅助虚拟化和半虚拟化。虚拟化方法需要VMM和虚拟机甚至是客户机的操作系统能够配合和兼容。全虚拟化也就是完全在软件层面模拟接受指令请求和处理指令的过程,这种情况下陷入内核执行的指令数量很多,因此性能较差。硬件辅助虚拟化是针对特权指令才陷入到特权级别执行,在CPU中实现了虚拟机的上下文切换和状态管理,提升了性能。半虚拟化需要修改操作系统来支持hypercall,使得客户机的操作系统也能运行在物理CPU的特权模式下。

内存的虚拟化

内存虚拟化的产物是虚拟内存,但实际上虚拟内存在没提虚拟化的时候,就已经有了。虚拟内存是为了给每个进程分配逻辑一致的独立的地址空间,有别于物理内存。在内存的虚拟化中是为了给每个虚拟机分配逻辑一致的独立的地址空间,在进程地址空间之外又加了一层,这样算下来是四个地址:客户机的虚拟地址(GVA)、客户机的物理地址(GPA)、VMM的虚拟地址(HVA)、VMM的物理地址(HPA)。不管几层,虚拟化方法的核心功能都是类似的,都是地址映射,实现机制就是通过页表分页管理地址映射,提高效率的方法就是减少映射转换的次数。

可被虚拟化的内存资源数量受到GPU支持能力、主板内存插槽数量、单条内存容量、内存类型等因素的限制。虚拟内存的容量受到物理内存容量和内存超分配技术的限制。

I/O的虚拟化

除去CPU和内存外,其他的设备都算作I/O,I/O往往是通过接口外挂上去后,由设备控制器与CPU和内存进行控制权、状态和数据的交换的。控制是双向的,由设备发起的是中断请求,由CPU发起的是设备访问。中断请求和设备访问都会下发指令,使得另一方的状态发生变化,同时携带要传递的数据。为提高CPU的效率,对于大量的数据移动,会通过DMA完成。

虚拟化的目的是为了分隔资源和利用资源,梳理来看这里面的资源有设备、接口、总线和中断处理器/RTC/DMA等四项。虚拟化设备需要单独拎出来看,不同的设备虚拟化的方法有所不同,共性是接入CPU和内存的方式,以及通信和控制的方式。接口用于接入设备,物理实体上是各种端口和插槽,从通信机制上看,一种是端口I/O,另一种是内存映射I/O。总线用于设备和CPU、内存间的通信,连接了设备和CPU、内存。接口和总线的虚拟化,就是接入配置和通信机制的虚拟化。通信机制的核心部分是中断处理器、RTC和DMA完成的,虚拟化通信机制的主要部分就是虚拟化它们。

具体到虚拟化的解决方案所要讨论的,就是VMM中有没有必要实现某种资源的虚拟化,某种资源的虚拟化可否放在用户空间实现。

虚拟I/O的设备数量受限于物理主机的I/O带宽(网络带宽、存储带宽等)、VMM的参数配置(资源类型、设备配置等)、物理设备虚拟化的支持情况、虚拟设备的类型和数量(虚拟网卡、虚拟控制器等)等因素。

GPU的虚拟化

从硬件上看,GPU通常是显卡的一部分,显卡属于外部设备,需要跟CPU和内存配合工作。CUDA编程让GPU能够支持通用的并行计算(GPGPU),在CUDA编程之前GPU主要通过图形接口执行图形渲染任务。随着GPU被人工智能领域用来训练深度学习的神经网络,这样的计算也开始被称作智能计算。

物理GPU虚拟化的产物是vGPU,将vGPU分配不同的虚拟机使用,为了保障性能,也有直通的资源独占的方式。由于显卡的外设属性,也需要考虑设备驱动,可GPU又不同于其他的外设,具备计算的能力,因此GPU的核心在处理计算任务的时候也被看作是服务器,而不仅仅是向CPU发起中断请求的客户端。在英伟达vCUDA核心的设计上,有三个模块客户端、服务端和管理端。客户端是安装在虚拟机上的显卡驱动程序,负责对CUDA应用程序API的拦截、解析、包装、代理请求和代理响应。服务端是位于一个特权虚拟机中,负责接受管理端的资源注册,以及为客户端的请求提供服务。管理端才是GPU的管理器,位于特权域VMM中,负责GPU的动态调度、负载均衡和故障恢复。

物理GPU的数量受限于主板显卡的卡槽数量、显卡的类型、总线带宽和电源供应等因素。虚拟GPU的数量受限于物理显卡的数量、VMM的配置和调度策略、GPU和内存资源等因素。

存储的虚拟化

存储虚拟化需要从两个角度来看,一个是用户的使用角度,另一个是物理设备的管理。

从用户使用角度看,有直接挂载磁盘的块存储,也有直接挂载文件系统的文件存储,还有更扁平化的对象存储。

块存储相当于一块空白的磁盘,支持创建、初始化、挂载、卸载等操作。创建的结果是一个虚拟磁盘,初始化的结果是要对虚拟磁盘进行分区或者格式化,并创建文件系统。在分布式环境中,创建和初始化的结果跨越了单机的限制,但实质上与本地磁盘管理要做的事情类似,都是元数据的管理。虚拟磁盘的挂载和卸载也是元数据的操作。除了元数据操作外,实际数据的读写需要遵从一些分布式的网络存储协议,并且要做好元数据中分区、块和实际物理存储之间的映射关系。操作系统使用的存储协议需要考虑网络环境,iSCSI(Internet Small Computer System Interface)是基于IP的存储协议,适用于局域网和广域网连接的块存储;Fibre Channel是专用于存储区域网络的高速传输协议;NVMe-oF是基于NVMe的网络协议。

文件存储不再增加分区和块的概念,元数据中直接管理文件和文件夹。网络文件存储协议有NFS(Network File System)、CIFS/SMB(Common Internet File System/Server Message Block)和AFP(Apple Filing Protocol)。对象存储相比文件存储更加扁平化,元数据管理存储空间(Bucket)和对象。对象存储首先是亚马逊AWS的S3现实,也被称作S3协议。

从物理设备管理的角度看,存储虚拟化分三个层次,最底层是存储资源的标准化接入,中间层是统一的数据管理,再上层是虚拟存储整合成资源池。存储的资源主要是磁盘,从介质上是两类,机械硬盘(Hard Drive Disk, HDD)和固态硬盘(Solid State Drive, SSD),此外,还有混合固态硬盘和磁带。存储资源接入主机可以是单块内置或外置,也可以是多块构成的存储阵列。机械硬盘接入主要通过SATA接口,也可以通过SAS(Serial Attached SCSI)扩展器,或者网络协议iSCSI和FC。固态硬盘接入主要通过PCIe槽位,利用NVMe访问和传输协议控制硬盘读写。同一块硬盘通过分区形成不同的存储盘,多块存储盘的物理分区通过逻辑卷组形成跨磁盘的逻辑卷(虚拟分区)。集中的块存储服务通过专门的网络结构和网络协议搭建形成SAN(Storage Area Network)存储。集中的文件存储服务通过瘦服务器将磁盘阵列管理起来形成NAS(Network Attached Storage)存储。通过主机服务器来访问存储的架构是以服务器为中心的架构,成为直连DAS(Directed Attached Storage)存储。虚拟主机也可以接入本地存储镜像。

网络的虚拟化

网络由网络节点和传输介质组成,此外在节点之间传输信息需要协议进行控制数据传输。对网络进行虚拟化就是对网络节点、传输介质和传输协议进行设计和实现。虚拟化的网络称作Overlay网络,物理网络称作Underlay网络。

网络节点按照功能分主要有五种客户终端、主机服务器、交换机、路由器、网关。对于网络实现来讲终端和服务器都能归结到网卡(NIC)上。传输介质有同轴电缆、双绞线、光纤、无线电波等。传输协议按照网络分层是底层在外层,上层在里层,一层包一层,封装和拆包的过程恰好相反。

虚拟化后的网络节点也被称作网元,都通过软件定义实现。虚拟主机通过挂载虚拟网卡进行网络通信,两台虚拟机之间通过虚拟交换机通信,虚拟网卡和虚拟交换机之间通过虚拟链路通信。跨物理机的虚拟机之间的通信除了需要隧道封装技术外,还需要经过虚拟地址和物理地址的映射转换的NAT网关。Overlay的隧道封装技术主流的包括两种GRE(Generic Routing Encapsulation)和VxLAN(Virtual eXtensible LAN)。

相关推荐
AI大模型系统化学习9 小时前
AI产品风向标:从「工具属性」到「认知引擎」的架构跃迁
大数据·人工智能·ai·架构·大模型·ai大模型·大模型学习
stormsha9 小时前
MCP架构全解析:从核心原理到企业级实践
服务器·c++·架构
10000hours9 小时前
【存储基础】NUMA架构
java·开发语言·架构
nbsaas-boot12 小时前
商品模块中的多规格设计:实现方式与电商/ERP系统的架构对比
架构
想用offer打牌12 小时前
一站式了解BASE理论
后端·面试·架构
Kookoos13 小时前
健康检查:在 .NET 微服务模板中优雅配置 Health Checks
微服务·架构·.net·abp vnext
想用offer打牌13 小时前
一站式了解CAP理论
面试·架构
勤奋的知更鸟15 小时前
深入了解MCP基础与架构
架构
nbsaas-boot15 小时前
从架构视角设计统一网络请求体系 —— 基于 uni-app 的前后端通信模型
网络·架构·uni-app
神一样的老师15 小时前
工业物联网中的事件驱动采样架构及优化
物联网·架构