共计 4133 个字符,预计需要花费 11 分钟才能阅读完成。
简介:内存虚拟化相比裸机,依然存在较大差别,是当下值得关注的问题!
云与虚拟化
云计算是通过 Internet 服务的形式提供动静可伸缩资源的计算模式,通过多年的倒退已成为企业 IT 技术的重要撑持。虚拟化是云计算的核心技术之一,将一台计算机形象为多台逻辑计算机,即虚拟机,每个虚拟机是一个独自平安的环境,可运行不同的操作系统且互不影响。
虚拟化技术给资源应用和调度带来了极大便当,云计算零碎能够依据负载状况及时进行资源调度,在晋升资源利用率的同时保障利用和服务不会因资源有余而影响服务质量。然而虚拟化也是有代价的,对资源的形象带来了性能损失,这也是虚拟化始终致力解决的问题。
虚拟化的资源形象能够简略划分为三局部:CPU 虚拟化、内存虚拟化和设施虚拟化。其中设施虚拟化曾经能够实现网络、存储等设施直通虚拟机,没有性能损失;CPU 虚拟化在硬件个性的反对下,执行一般指令性能与裸机雷同;而内存虚拟化相比裸机,依然存在较大差别,是当下值得关注的问题。
内存虚拟化
虚拟内存:说到内存虚拟化,就不得不提虚拟内存的概念。晚期的操作系统只有物理地址且空间无限,过程应用内存时必须小心翼翼以防止笼罩其余过程的内存。为防止此问题,虚拟内存的概念被形象进去,保障每个过程都有一块间断的、独立的虚拟内存空间。过程间接通过 VA(Virtual Address)应用内存,CPU 访存时收回的 VA 由硬件 MMU(Memory Management Unit)拦挡并转换为 PA(Physical Address),VA 到 PA 的映射应用页表进行治理,MMU 在转换时会主动查问页表。
内存虚拟化:与虚拟内存的概念相似,一台主机上的每个虚拟机认为本人独占整个物理地址空间,因此须要对内存再做一次形象,即内存虚拟化,保障每个虚拟机都有独立的地址空间。这样一来,在虚拟机和物理机中均有 VA 和 PA 的概念,即 GVA(Guest Virtual Address)和 GPA(Guest Physical Address),以及 HVA(Host Virtual Address)和 HPA(Host Physical Address)。虚拟机内的程序应用的是 GVA,最终须要转换成 HPA。两个 VA 到 PA(GVA 到 GPA 以及 HVA 到 HPA)的映射同样应用页表治理,GPA 到 HVA 个别是几段间断的线性映射,由虚拟机的管理程序 VMM(Virtual Machine Monitor)进行治理。
过程访存须要从 VA 转换成 PA,在引入内存虚拟化后,转换门路产生了很大的变动。本来只须要将 VA 转换为 PA,虚拟化后转换过程变成 GVA -> GPA -> HVA -> HPA。门路变得更长更简单之后,对于访存的平安和性能都带来了挑战,这两点也是内存虚拟化须要达到的指标:1)平安,即地址转换的合法性,虚拟机不能拜访不属于本人的内存;2)性能,即地址转换的高效性,包含转换关系建设的开销低,以及转换过程自身的开销低。
经典计划
为达成内存虚拟化的指标,曾经有很多虚拟化计划被提出,SPT(Shadow Page Table)和 EPT(Extended 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 的干涉。
劣势:转换过程的开销很大,最坏状况下须要 24(4 + 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,须要查一张 M2P(Machine 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 级页表时,转换门路如下图所示,最坏只需 9(4 + 1 + 4 * 1)次查表。
劣势:地址转换关系的建设开销低,同时转换过程的开销也较低。相比于 Direct Segment 对内存调配要求很低,只须要大量间断内存用作扁平扩大页表即可(8G 规格虚拟机只须要 16M)。
劣势:须要硬件反对扁平扩大页表,以后的硬件只反对表项为 512 的多级扩大页表。
Mix SPT and EPT:混合计划,这是学术界较早提出的计划,简略而言就是动静的分时切换 SPT 与 EPT。在虚拟机运行时监控和采集 TLB miss 与 Page Fault 的数据,在二者达到设定的阈值时进行 SPT 与 EPT 之间的切换,如下图所示:
TLB miss 率高于阈值 T1,Page Fault 频率低于阈值 T2 时,从 EPT 切换到 SPT
TLB miss 率低于阈值 T1,Page Fault 频率高于阈值 T2 时,从 SPT 切换到 EPT
劣势:有机会充分利用 SPT 与 EPT 的劣势,达到更好的性能。
劣势:
1)页表切换阈值的设定很艰难,硬件配置都可能影响阈值;
2)SPT 与 EPT 的切换也是有代价的,次要是 SPT 的销毁与重建。
总结
一层页表显著的劣势是地址转换过程开销低,与物理机雷同,须要解决的问题是缩小地址转换建设的开销。一个可能的方向是放弃一些安全性,让页表的批改更轻量;另一个更理论的方向是在适合的场景应用,即针对页表批改不频繁的负载应用。
两层页表的劣势是地址转换建设的开销小,虚拟机能够独立批改页表,须要思考的问题是缩短转换门路。这个方向其实可行性很高,然而依赖新硬件的反对,短期不太可能呈现符合要求的新硬件。
混合页表的设计初衷是心愿充分利用两类页表的劣势,然而做好动静的模式切换是十分艰难的,负载的差别甚至硬件的差别都可能影响切换的成果。或者针对已知负载做定向的调优是一个可行的方向。
久远来看,如果有新硬件的加持,两层页表(尤其是 Flat EPT)是比较完善的计划,地址转换能够很高效,也不须要在平安和通用性上做一些就义。然而短期来看,新硬件为时尚早,在一层页表计划上做进一步的摸索和优化,是更加理论的。咱们将会继续在内存虚拟化这条门路摸索更多的可能,欢送大家退出 OpenAnolis 龙蜥社区探讨交换。
对于作者
陶志恒(君川),2020 年退出阿里云操作系统 - 云原生底层零碎团队,目前从事性能优化方向的工作。
原文链接
本文为阿里云原创内容,未经容许不得转载。