开公司注册空头公司做网站,网站架设方式,嘉兴网课,青岛做网站的公司哪家好简介#xff1a; 内存虚拟化相比裸机#xff0c;仍然存在较大差异#xff0c;是当下值得关注的问题#xff01; 云与虚拟化
云计算是通过 Internet 服务的方式提供动态可伸缩资源的计算模式#xff0c;经过多年的发展已成为企业 IT 技术的重要支撑。虚拟化是云计算的核心…简介 内存虚拟化相比裸机仍然存在较大差异是当下值得关注的问题 云与虚拟化
云计算是通过 Internet 服务的方式提供动态可伸缩资源的计算模式经过多年的发展已成为企业 IT 技术的重要支撑。虚拟化是云计算的核心技术之一将一台计算机抽象为多台逻辑计算机即虚拟机每个虚拟机是一个单独安全的环境可运行不同的操作系统且互不影响。
虚拟化技术给资源使用和调度带来了极大便利云计算系统可以根据负载情况及时进行资源调度在提升资源利用率的同时保证应用和服务不会因资源不足而影响服务质量。然而虚拟化也是有代价的对资源的抽象带来了性能损失这也是虚拟化一直致力解决的问题。
虚拟化的资源抽象可以简单划分为三部分CPU 虚拟化、内存虚拟化和设备虚拟化。其中设备虚拟化已经可以实现网络、存储等设备直通虚拟机没有性能损失CPU 虚拟化在硬件特性的支持下执行普通指令性能与裸机相同而内存虚拟化相比裸机仍然存在较大差异是当下值得关注的问题。
内存虚拟化
虚拟内存说到内存虚拟化就不得不提虚拟内存的概念。早期的操作系统只有物理地址且空间有限进程使用内存时必须小心翼翼以避免覆盖其他进程的内存。为避免此问题虚拟内存的概念被抽象出来保证每个进程都有一块连续的、独立的虚拟内存空间。进程直接通过 VAVirtual Address使用内存CPU 访存时发出的 VA 由硬件 MMUMemory Management Unit拦截并转换为 PAPhysical AddressVA 到 PA 的映射使用页表进行管理MMU 在转换时会自动查询页表。 内存虚拟化与虚拟内存的概念类似一台主机上的每个虚拟机认为自己独占整个物理地址空间因而需要对内存再做一次抽象即内存虚拟化保证每个虚拟机都有独立的地址空间。这样一来在虚拟机和物理机中均有 VA 和 PA 的概念即 GVAGuest Virtual Address和 GPAGuest Physical Address以及 HVAHost Virtual Address和 HPAHost Physical Address。虚拟机内的程序使用的是GVA最终需要转换成 HPA。两个 VA 到 PA GVA 到 GPA 以及 HVA 到 HPA的映射同样使用页表管理GPA 到 HVA 一般是几段连续的线性映射由虚拟机的管理程序 VMMVirtual Machine Monitor进行管理。 进程访存需要从 VA 转换成 PA在引入内存虚拟化后转换路径发生了很大的变化。原本只需要将 VA 转换为 PA虚拟化后转换过程变成 GVA - GPA - HVA - HPA 。路径变得更长更复杂之后对于访存的安全和性能都带来了挑战这两点也是内存虚拟化需要达到的目标1安全 即地址转换的合法性虚拟机不能访问不属于自己的内存2性能即地址转换的高效性包括转换关系建立的开销低以及转换过程本身的开销低。
经典方案
为达成内存虚拟化的目标已经有很多虚拟化方案被提出SPTShadow Page Table和 EPTExtended Page Table是两种典型的方案也是大家最熟悉的方案。我们先以此为切入点看看他们是如何工作的然后再讨论其他的虚拟化方案。
SPT由于最初的硬件只支持一层页表转换直接用来转换虚拟机或物理机上的 VA 到 PA 都无法完成 GVA 到 HPA 的转换。因此 SPT 建立了一条捷径即影子页表直接管理 GVA 到 HPA 的映射如下图所示。每一个影子页表实例对应虚拟机内一个进程影子页表的建立需要 VMM 查询虚拟机内进程的页表。 由于影子页表管理的是 GVA 到 HPA 的直接映射SPT 地址转换路径与物理机路径相当直接查询一层页表就可以完成地址转换。在使用 4 级页表时转换过程如下图所示。 优势SPT 地址转换过程的开销低与物理机相当。
劣势
1地址转换关系的建立开销很大为保证地址转换的合法性所有的转换关系建立即虚拟机进程的页表修改都会被拦截之后陷出到特权的 VMM 中代为执行
2影子页表本身需要占用内存且一个影子页表只对应虚拟机内一个进程整体会占用较多内存资源。
EPT后来的硬件针对虚拟化增加了嵌套页表的支持使得硬件可以自动完成两层页表转换。EPT 即是基于硬件支持的方案在管理 GVA 到 GPA 的虚拟机页表基础上新增扩展页表管理 GPA 到 HPA 的映射如下图所示。这两层页表相互独立两层映射关系转换都由硬件自动完成。 由于虚拟机内各级页表gL4, gL3, gL2, gL1内容只是 GPA查询下一级时必须先经扩展页表nL4, nL3, nL2, nL1转换为 HPA使得整个转换路径很长。在两层页表均为 4 级时转换过程如下图所示。 优势地址转换关系的建立开销低独立的 EPT 页表的存在保证了地址转换的合法性因此虚拟机的页表可以自行修改而无需 VMM 的干预。
劣势转换过程的开销很大最坏情况下需要 244 4 4 * 4次硬件查表转换。
两种经典的方案在安全上都有坚实的保证但在性能上各有缺陷。SPT 为保证地址转换的合法性在建立转换关系时付出了很大代价而 EPT 虽然消除了建立转换关系的开销转换路径却更长了。
其他探索
业界和学术界关于内存虚拟化还有很多的探索基本思想与 SPT 或 EPT 类似可以据此分为三类来看
1一层页表方案。与 SPT 类似使用一层页表直接管理 GVA 到 HPA 的映射
2两层页表方案。与 EPT 类似使用两层独立页表分别管理 GVA 到 GPA 以及 GPA 到 HPA 的映射
3混合方案。结合前两类方案进行动态的选择。
Direct Paging一层页表方案这是 Xen 在早期硬件仅支持一层页表时的半虚拟化方案。相比于 SPT 最大的区别是没有单独维护 GVA 到 GPA 的虚拟机页表虚拟机知道自己处于虚拟化环境即知道自己的页表内容是 HPA。虚拟机修改页表也需要陷出但是采用主动陷出的方式可以 batch 化而 SPT 则是被动拦截陷出读取页表时只能拿到 HPA需要查一张 M2PMachine to Physical表才能得到 GPA。 Direct Paging 同样使用一层页表管理 GVA 到 HPA 映射地址转换的路径与 SPT 是相同的。在使用 4 级页表时最坏只需 4 次查表。
优势地址转换过程的开销低与物理机相当。
劣势
1地址转换关系的建立开销很大所有页表修改都需要主动陷出
2需要虚拟机做半虚拟化的适配虚拟机需要感知自己的页表管理的是 GVA 到 HPA 的映射。
Direct Segment两层页表方案这是学术界基于新硬件的方案。GVA 到 GPA 的映射管理与 EPT 相同同样采用多级页表。但 GPA 到 HPA 的映射采用分段机制 GPA 转换为 HPA 时只需要通过硬件加上一个偏移即可。 GPA 虽然不等于 HPA但二者的映射关系十分简单只需要 Direct Segment 硬件添加一个偏移整个转换路径与物理机的路径相比差别很小仅多了几次硬件偏移。虚拟机使用 4 级页表时转换路径如下图所示其中 DS 表示 GPA 到 HPA 转换的硬件支持。 优势地址转换关系的建立开销低同时转换过程的开销也很低。
劣势
1需要硬件支持 GPA 到 HPA 分段映射现有的硬件不具备这样的功能
2需要分配大段连续的内存即主机不能有太多内存碎片。
Flat EPT两层页表方案这也是学术界提出的基于新硬件的方案。整体与 EPT 非常相似唯一的区别在于 EPT 管理 GPA 到 HPA 的使用多级页表一般是 4 级每级 512 项而 Flat EPT 使用仅有一级的扁平页表表项远不止 512。 与 EPT 相同虚拟机内各级页表的内容也是 GPA查询下一级时需要先经过扁平扩展页表nL4转换为 HPA。由于扁平扩展页表只有一级转换路径相比 EPT 缩短了非常多。在虚拟机内使用4级页表时转换路径如下图所示最坏只需 94 1 4 * 1次查表。 优势地址转换关系的建立开销低同时转换过程的开销也较低。相比于 Direct Segment 对内存分配要求很低只需要少量连续内存用作扁平扩展页表即可8G规格虚拟机只需要 16M。
劣势需要硬件支持扁平扩展页表当前的硬件只支持表项为 512 的多级扩展页表。
Mix SPT and EPT混合方案这是学术界较早提出的方案简单而言就是动态的分时切换 SPT 与 EPT。在虚拟机运行时监控和采集 TLB miss 与 Page Fault 的数据在二者达到设定的阈值时进行 SPT 与 EPT 之间的切换如下图所示
TLB miss 率高于阈值 T1Page Fault 频率低于阈值 T2 时从 EPT 切换到 SPTTLB miss 率低于阈值 T1Page Fault 频率高于阈值 T2 时从 SPT 切换到 EPT优势有机会充分利用SPT与EPT的优势达到更好的性能。
劣势
1页表切换阈值的设定很困难硬件配置都可能影响阈值
2SPT与EPT的切换也是有代价的主要是SPT的销毁与重建。
总结
一层页表显著的优势是地址转换过程开销低与物理机相同需要解决的问题是减少地址转换建立的开销。一个可能的方向是放弃一些安全性让页表的修改更轻量另一个更实际的方向是在合适的场景使用即针对页表修改不频繁的负载使用。
两层页表的优势是地址转换建立的开销小虚拟机可以独立修改页表需要考虑的问题是缩短转换路径。这个方向其实可行性很高但是依赖新硬件的支持短期不太可能出现符合要求的新硬件。
混合页表的设计初衷是希望充分利用两类页表的优势但是做好动态的模式切换是非常困难的负载的差异甚至硬件的差异都可能影响切换的效果。或许针对已知负载做定向的调优是一个可行的方向。
长远来看如果有新硬件的加持两层页表尤其是Flat EPT是比较完善的方案地址转换可以很高效也不需要在安全和通用性上做一些牺牲。但是短期来看新硬件为时尚早在一层页表方案上做进一步的探索和优化是更加实际的。我们将会持续在内存虚拟化这条路径探索更多的可能欢迎大家加入 OpenAnolis 龙蜥社区讨论交流。
关于作者
陶志恒君川2020年加入阿里云操作系统-云原生底层系统团队目前从事性能优化方向的工作。
原文链接 本文为阿里云原创内容未经允许不得转载。