虚拟存储技术 虚拟存储( 二 )


优点:地址转换关系建立成本低,独立的EPT页表的存在保证了地址转换的合法性,虚拟机的页表可以自行修改,无需VMM干预 。
缺点:转换过程的成本非常高 。最坏的情况下,需要24(4+4+4 * 4)次硬件查找转换 。
这两个经典方案在安全性上有坚实的保证,但在性能上各有缺陷 。SPT在建立转换关系上付出了很大的代价来保证地址转换的合法性,而EPT消除了建立转换关系的开销,但是转换路径更长 。
其他探索
关于内存虚拟化,工业界和学术界还有很多探索 。基本思路类似于SPT或EPT,可分为三类:
1)一层页表方案 。类似于SPT,使用一层页表来直接管理从GVA到HPA的映射 。
2)双层页表方案 。与EPT类似,使用两个独立的页表来分别管理从GVA到GPA和GPA到HPA的映射 。
3)混合方案 。结合前两种方案进行动态选择 。
直接分页:一层页表方案,这是早期硬件只支持一层页表时Xen的一种半虚拟化方案 。与SPT相比,最大的区别是GVA到GPA的虚拟机页表没有单独维护,虚拟机知道自己是在虚拟化的环境中,也就是知道自己的页表内容是HPA 。虚拟机页表修改也需要陷阱,但是主动陷阱可以是批处理,而SPT是被动拦截陷阱 。读取页表时只能得到HPA,需要查一个M2P(机器到物理)表才能得到GPA 。
直接分页也是用一层页表来管理GVA到HPA的映射,地址翻译的路径和SPT一样 。使用4级页表时,最差只需要查表4次 。
优点:地址翻译过程成本低,与物理机相当 。
缺点:
1)地址转换关系的建立非常昂贵,所有页表修改都需要主动陷;
2)虚拟机需要做半虚拟适配,虚拟机需要感知到自己的页表管理着从GVA到HPA的映射 。
直接段:两层页表方案,这是学术界基于新硬件的方案 。GVA到GPA的映射管理和EPT一样,也是采用多级页表 。而GPA到HPA的映射采用分段机制,GPA转换成HPA时只需要硬件加一个偏移量 。
虽然GPA不等于HPA,但是两者之间的映射关系非常简单 。只有直接段硬件需要添加偏移量 。和物理机的路径相比,整个转换路径差别不大,只是多了几个硬件偏移量 。使用虚拟机四级页表时,转换路径如下图所示,其中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)次查表 。
优点:地址翻译关系建立成本低,翻译过程成本也低 。与直接段相比,需要的内存分配更少,只需要少量的连续内存作为平面扩展页表(8G虚拟机只需要16M) 。
缺点:需要硬件来支持平面扩展页表 。当前硬件仅支持具有条目512的多级扩展页表 。
混合SPT和EPT:混合方案,学术界较早提出的,简单来说就是SPT和EPT的动态分时切换 。监控并收集虚拟机运行时的TLB未命中和页面错误数据,当达到设定的阈值时,在SPT和EPT之间切换,如下图所示:
当TLB缺失率高于阈值T1并且页面错误频率低于阈值T2时,从EPT切换到SPT 。
当TLB缺失率低于阈值T1并且页面错误频率高于阈值T2时,从SPT切换到EPT 。
优势:有机会充分利用SPT和EPT的优势,达到更好的表现 。
缺点:
1)很难设置页表切换阈值,硬件配置可能会影响阈值;
2)SPT和EPT之间的切换也是有成本的,主要是SPT的破坏和重建 。
摘要
一层页表的明显优势是地址翻译过程成本低,与物理机相同 。要解决的问题是降低地址转换建立的成本 。一个可能的方向是放弃一些安全性,让页表的修改变得更轻;另一个更实际的方向是在适当的场景中使用它,也就是说,在不经常修改页表的情况下使用load 。
两层页表的优点是地址翻译开销小,虚拟机可以独立修改页表 。要考虑的问题是缩短翻译路径 。这个方向其实是很可行的,但是在新硬件的支持下,短期内出现符合要求的新硬件的可能性不大 。

推荐阅读