对虚拟化的初步认识

it2023-06-25  76

本人小白,初次步入虚拟化领域,谨将自己所学知识做下总结,如有理解不到位的地方会及时做出修改。

对虚拟化的认识:下层软件模块抽象出一个虚拟的软件或硬件接口为上层软件模块提供服务,使得上层软件模块运行在与自己所期待环境相一致的虚拟环境上。就比如将一个物理平台(下层软件模块)可虚拟为多个虚拟平台(上层软件模块)。

虚拟化的两种实现方式: 1. VMM直接运行在硬件平台,控制所有硬件并管理客户机操作系统。如Xen。 2. VMM运行在一个操作系统里,管理客户机操作系统。如KVM、VirtualBox。 注:VMM:全称(Virtual Machine Monitor),即虚拟机监视器,也可称为Hypervisor。

VMM提供的虚拟平台类型分为两类: 1. Full-virtualization(完全虚拟化) : 客户机操作系统不知道自己是运行在虚拟平台上的,它去操作的硬件资源其实是由软件模拟出来的,客户机操作系统不需要修改代码。 2. Para-virtualization(半虚拟化): 客户机操作系统知道自己是运行在虚拟平台上,会主动适应。当它去操作硬件资源时,直接进行物理机上的系统调用(System Call,实际是Hypervisor Call,也叫Hypercall),但是客户机操作系统内核的代码需要修改。

虚拟化的核心技术:CPU虚拟化、内存虚拟化、I/O虚拟化、网络虚拟化。

CPU虚拟化: 在完全虚拟化的平台下,若CPU不支持硬件虚拟化,则需要VMM来模拟特权指令。客户机操作系统运行在Ring 3上,让它认为自己的内核运行在Ring 0上。当它试图执行特权指令时,物理机内核就会监控到它想执行虚拟的特权指令行为,然后做出正确的反应,再将结果返回给客户机操作系统。 若CPU支持硬件虚拟化(IntelVT-x 和 AMD-V技术),客户机操作系统内核运行在Ring 0上,物理机内核则运行在Ring -1上。

内存虚拟化: 在物理机上,每个进程看到的内存地址都是由页框将真实的物理内存地址虚拟成的虚拟地址。内存虚拟化需要通过两次地址转换实现,VMM根据GVA(客户机虚拟地址)到GPA(客户机物理地址)再到HPA(物理机物理地址)的映射关系,得到从GVA直接到HPA的映射,并写入影子列表,但这种方式内存开销大,效率不高。 为了提高性能,Intel的EPT(Extent Page Table) 技术和AMD的NPT(Nest Page Table) 技术都对内存虚拟化提供了硬件支持。这两种技术原理类似,都是在硬件层面上实现客户机虚拟地址到物理机物理地址之间的转换,称为Virtualation MMU(影子MMU)。当有了这种MMU虚拟化技术后,对于虚拟机来说,通过内部的虚拟MMU把GVA转换为GPA,但是同时真正的影子MMU会把客户机虚拟地址GVA转换为真正的物理地址HPA,将结果保存到TLB中。 当多个虚拟机进行切换时,需要频繁地清空TLB。Intel和AMD就提供了带标签的TLB技术,以前的TLB只有两个字段,标记GVA到HPA的对应关系,现在增加了一个主机编号字段,可以避免虚拟机切换时,TLB的频繁清写,提高了TLB缓存的命中率。

I/O虚拟化: I/O虚拟化的方式有三种:

1.模拟I/O设备: 由VMM模拟出IO设备给客户机,当客户机想使用真实的IO设备时,内核通过驱动访问到VMM模拟的IO设备,然后到达VMM模拟设备区域。由于VMM模拟许多设备并且运行了许多客户机,所以VMM也提供了一个I/O Stack,用来调度这些IO设备请求到物理机内核,然后请求真实的IO设备。

2.半虚拟化: 客户机知道自己的IO设备是虚拟出来的而非模拟,当它想使用真实的IO设备时,直接进行物理机上的系统调用(System Call)进而请求真实的IO设备。

3.I/O透传技术: I/O透传技术的思想就是提供多个物理IO设备,如多块硬盘,多个网卡,物理机进行管理和分配这些IO设备,客户机就可以直接请求真实的IO设备,性能得到了很大的提升。这种技术基于Intel的VT-x和VT-d技术实现,VT-x解决了客户机直接访问真实的IO设备空间问题,而VT-d提供的DMA重映射技术解决了物理机的DMA操作直接访问客户机的内存空间问题。

网络虚拟化: 早期的网络虚拟化通过重新配置物理机的网络拓扑结构实现。将物理机和客户机的网络接口配置在同一个桥接下边,使客户机拥有独立的MAC地址。 后来Intel的VT-d技术可以直接将网卡分配给客户机使用,但由于网卡和服务器支持的PCI设备数有限,所以不能满足许多的客户机。因此引入SRIOV(Single Root I/O Virtualization)技术。 SRIOV定义了两种功能,分别是PF(Physical Function)和VF(Virtual Function)。PF用来管理和配置SRIOV,VF则用来进行数据处理,PF和VF被连接在SRIOV网卡的一个桥接上,共享物理资源,一个VF被当做一个虚拟网卡分配给客户机,各个VF的通信互不干扰,网络数据流绕开了VMM,直接在VF和客户机之间传递,几乎达到了和非虚拟化环境一样的网络功能。

最新回复(0)