5、内存虚拟化
1)无内存虚拟化时
HOS为所有APP应用维护VA–MA地址映射关系,使得所有APP都能使用从0开始连续的内存地址空间,多应用间逻辑隔离,互不影响。
虚拟内存地址(Virtual MemoryAddress,即 VA)
机器内存地址(Machine Memory Address,即 MA)
2)有内存虚拟化(全虚)
1、三个地址
虚拟内存地址(Virtual MemoryAddress,即 VA)
物理内存地址(Physical Memory Address,即 PA)
机器内存地址(Machine Memory Address,即 MA)
2、三张映射表
GOS维护:APP— GVA—GPA映射表
VMM(KVM)维护:VM— GPA–HVA映射表
HOS维护:虚拟化层+APP HVA—HPA映射表
VM内部应用访问内存,需要查三张映射表才能访问到物理内存,开销较大
3、用语言表述
虚拟化后的操作系统可以分为HostOS也就是宿主操作系统,往上是VMM层也就是虚拟化层,最上面可以跑很多GuestOS也就是来宾操作系统,GuestOS上面跑的有应用。
那么这些应用要访问内存的物理内存需要查三个表,分别是GuestOS维护的GVA和GPA,
由GPA查询由VMM维护的GPA和HVA的关系
由HVA继续查询HOS维护的HVA和HPA关系表,从而找到HPA得到具体的物理地址
3)内存全虚拟化优化
1、影子页表
VMM向上查询GOS内部的 GVA–GPA映射表
VMM向下查询HOS内部的 HVA–HPA映射表
结合自己GPA–HVA映射表,将三张映射表整合形成GVA–HPA影子页表,并载入CPU的MMU中,提升查表速度。
MMU是内存管理单元
4)内存硬件辅助虚拟化
1、EPT技术
Intel EPT AMD NPT 技术
Intel的CPU提供了**EPT (Extended Page Tables,扩展页表)**技术,直接在硬件上支持GVA->GPA->HPA的地址转换,从而降低内存虚拟化实现的复杂度,也进一步提升内存虚拟化性能。
2、原理
先查找在整合!
CPU查找GOS内部的GVA–GPA映射表,载入CPU内部形成CR3表
CPU整合 GPA–HVA映射表+HVA—HPA映射表,形成EPT扩展页表
查表动作不在由VMM参与,CPU硬件实现查表 CR3+EPT,如果缺页,才触发异常,转由VMM和HOS分配页表项,重新载入到CPU内部的EPT中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdiboGsR-1628818997309)(C:\Users\Jack\AppData\Roaming\Typora\typora-user-images\image-20210812113707447.png)]
5)Huge Page和Transparent Huge Page
内存管理的最小块级单位叫页,一个page是4096个字节,1M有256个page
cpu通过MMU(内存管理单元)维护page表记录
所以条目越少,查询越简单
Huge pages是通过使用大页内存来取代传统的 4kb 内存页面,以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。
Huge pages 有两种格式大小: 2MB 和 1GB , 2MB 页块大小适合用于 GB 大小的内存, 1GB 页块大小适合用于 TB 级别的内存; 2MB 是默认的页大小。
THP 是一个抽象层,能够自动创建、管理和使用传统大页。
标准大页管理是预分配的方式
而透明大页管理则是动态分配的方式。
一页内存越大,条目越少,TLB缓存越容易查询
6)TLB
页表缓存、转址旁路缓存,为CPU的一种缓存
6、IO虚拟化(KVM)
1)全虚拟化(全模拟)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0fvVan6-1628818997312)(C:\Users\Jack\AppData\Roaming\Typora\typora-user-images\image-20210812212317351.png)]
IO全虚拟化:VM使用的IO设备是由VMM层模拟出来的,VMM层负责对VM的IO请求进行监测、截获、模拟执行动作,对VMM层损耗较大,但对VM的GOS无需做任何操作,实现简单。
IO处理流程:APP—GOS—虚拟IO设备驱动—KVM(IO trap)----IO共享环(一段内存)—QEMU—HOS内核 IO设备硬件驱动—物理IO硬件
优点:VM的GOS不需要做修改,兼容大部分的GOS,兼容大部分的IO设备
缺点:IO访问路径长,VMM(KVM)开销大,IO处理性能差,VM数量较多时,并发处理性能非常低。
2)半虚拟化(virtio)
IO半虚拟化:VM使用的IO设备任然是由VMM层模拟出来,但是GOS内部需要做修改,安装pv driver,使得VM能够主动将IO请求下发给VMM,VMM无需监测、截获动作,制作模拟执行,降低VMM层性能损耗,但是对GOS有操作要求,是折中的解决方式。
IO处理流程:APP—GOS—virtio前端驱动—IO共享环(一段内存)—QEMU—HOS内核 IO设备硬件驱动—物理IO硬件
KVM只做通知
优点:IO访问路径变短,VMM(KVM)开销降低,IO处理性能高,支持批量IO处理
缺点:VM的GOS需要修改(安装前端驱动),对IO设备兼容性有要求,老旧IO设备可能不支持
3)硬件辅助虚拟化(PCI设备直接分配)
IO硬件辅助虚拟化:需要特殊硬件支持(支持虚拟化能力的IO板件),VM的GOS安装硬件驱动,使得VM下发IO请求通过硬件驱动直接到达硬件,无需VMM做任何处理,性能最高,成本最高,能够实现一个硬件被多台VM共用。
优点:IO性能最高,VMM(KVM)不需要参与
缺点:特殊IO设备才能实现,主板PCI插槽有限,支持VM的数量有限,成本高
VM失去很多高级特性(HA DRS 内存快照等等)
7、FC平台支持的QOS维度
1)CPU QOS
(1)份额:cpu资源抢占时
(2)预留:cpu资源抢占时
(3)限制:
2)内存QOS—开启内存复用
(1)份额:内存抢占时
(2)预留:
(3)限制:
3)网络的QOS
可以通过流量整形限制虚拟机网卡的网络流量发送和接收速率
操作:网络—DVS—端口组—网络设置—发送和接收方向的流量整形
(1)平均带宽:
(2)峰值带宽:
(3)突发大小:
4)磁盘的QOS:
vm—配置—磁盘----更多—设置磁盘IO上限
(1)每秒的读或写或读写字节数(BPS):
(2)每秒的读或写或读写个数(IOPS)
8 内存复用
(1)内存气泡
系统主动回收虚拟机暂时不用的物理内存,分配给需要复用内存的虚拟机。内存的回收和分配均为系统动态执行,虚拟机上的应用无感知。整个物理服务器上的所有虚拟机使用的分配内存总量不能超过该服务器的物理内存总量。
(2)内存交换
将外部存储虚拟成内存给虚拟机使用,将虚拟机上暂时不用的数据存放到外部存储上。系统需要使用这些数据时,再与预留在内存上的数据进行交换。
(3)内存共享
多台虚拟机共享数据内容相同的内存页。
注意:可以增加主机的内存交换分区
内存交换分区目前只支持虚拟化本地硬盘的数据存储
9、NUMA技术
(1)Host NUMA
物理服务器内部按node调度cpu和内存,本地调用性能最高,跨node调用性能损耗大,所以host numa可以实现主机上层应用调用cpu和内存时在hostnuma的控制下尽量从同一物理node内调用
(2)Guest NUMA
让虚拟机也呈现NUMA架构,虚拟机上层应用调用虚拟机的vcpu和vRAM时也能尽量从同一vnode内来调用(一个vnode的vcpu和vRAM来源一个物理node)—虚拟机上层应用调用cpu和内存资源时最终会映射到一个物理node内去调用
一个虚拟机的不同vnode可以对应底层的不同物理node
10、HA的过程
(1)虚拟机HA原理
1.VM故障或者物理节点故障
2.VRM查询VM状态,发现VM故障
3.VRM节点判断VM有HA特性,则根据保存的VM信息选择可用的CNA主机启动VM
4.CNA节点收到HA请求,根据VM规格,卷信息创建新的VM
5.启动过程中,将VM之前的卷重新挂载,包括用户卷