2018年8月,北京大学肖臻研究员团队的论文《Phantasy: Low-Latency Virtualization-based Fault Tolerance via Asynchronous Prefetching》被计算机系统领域顶级学术期刊TC(IEEE Transactions on Computers)录取并在线预发表(online access, DOI: 10.1109/TC.2018.2865943)。肖臻研究员团队在虚拟机热备份领域已深耕数年,2011年团队也曾在顶级学术期刊TC上发表题为《Optimizing the Performance of Virtual Machine Synchronization for Fault Tolerance》的学术论文(DOI: 10.1109/TC.2010.224)。本文将以上述两篇论文为主线,简要介绍肖臻研究员团队在虚拟机热备份领域的相关研究内容和发现。
近年来,随着云计算的普及,越来越多的业务应用被部署于虚拟服务器而非传统的物理服务器。尽管云计算服务能够带来诸多好处,一些“关键性”应用却极少使用云计算资源。所谓“关键性”应用是指那些对于系统的可用性要求非常高,一旦系统出现故障会导致严重后果的应用。例如,一个支持股票交易市场的计算系统,每秒钟要处理大量的金融交易,一旦系统因为软硬件问题而发生故障,所引起的经济损失将是不可估量的。再比如民航的航空管理系统,要对空中各类飞机的信息进行及时的处理和判断,一旦系统发生故障而不能做出正确的判断,其后果将是灾难性的。国家的很多要害部门,如电力、航空、 通讯、军事等,都存在这种关键性的应用。云计算数据中心的高可用性问题是阻碍关键性应用使用云计算资源的主要原因之一。这些关键性应用大多要求底层系统提供至少五个九的可用性(也即99.999%),然而目前大多数云供应商如Amazon EC2最高仅仅能提供四个九的可用性。
为了弥合这其中的差距,提高云计算服务的可用性,研究人员提出通过容错服务(fault tolerance, FT)提供无缝的故障恢复,这其中基于虚拟化技术的双机热备份系统往往被认为是提供容错服务最有效的手段。双机热备份系统一般要求在两台物理机上分别运行主虚拟机和备份虚拟机,主虚拟机周期性地将其完整的机器状态备份到备份虚拟机中,一旦主虚拟机所在物理机发生硬件故障,则由备份机接管,继续执行。
传统的虚拟机热备份系统往往会引入极大的性能开销以及极高的网络延迟,而这往往是这些关键应用所无法接受的,因此也限制了虚拟机热备份系统的应用。本项目团队针对上述问题,从多个角度出发,深入研究,分别实现了Taiji以及Phantasy两个虚拟机热备份系统,较好的解决了上文提到的运行性能开销过大及网络延迟过长等问题,下面将简要介绍这两个工作。
图 2.1 虚拟机双机热备份系统架构图
图2.1展示了虚拟机双机热备份系统的架构图,系统包含两台服务器,分别为主服务器 (Primary Host)和备份服务器(Backup Host)。两台服务器分别运行主虚拟机管理器(Primary VMM)和备份虚拟机管理器(Backup VMM)。受保护的虚拟机,即主虚拟机(Primary VM),运行在主服务器上,处于执行状态; 备份虚拟机(Backup VM)由备份虚拟机管理器维护,实时备份主虚拟机的状态,处于待机状态。
双机热备份系统以固定的执行周期(epoch)同步主虚拟机和备份虚拟机状态。在每个执行周期内,主虚拟机管理器记录主虚拟机的状态变化(包括CPU、内存、外部设备等);在执行周期结束时,完成主虚拟机和备份虚拟机同步。为了减少主虚拟机在同步过程中的停机时间,这类系统通常采用了异步执行模式,也就是在同步虚拟机状态的过程中,主虚拟机恢复执行;主虚拟机管理器收到备份虚拟机管理器的确认消息时,上一周期的虚拟机同步才算完成。在主虚拟机的异步执行过程中,客户操作系统需要访问外部存储设备、发送和接受网络数据包,如何保证主虚拟机出现故障后,仍然保持存储系统和网络状态的一致性是虚拟机双机热备份系统的关键。
通过上文描述,我们不难发现,限制虚拟机热备份系统运行效率的关键因素就是如何高效地获取和传输内存脏页。下文中我们将分别讨论我们在Taiji和Phantasy中是如何解决该问题的。
为了提高虚拟机双机热备份系统的运行效率,Taiji系统引入了一种高效的虚拟机镜像技术。下文中我们将首先介绍读错误减少(Read Fault Reduction)技术和写错误预测(Write Fault Prediction)技术,减少主虚拟机内存访问引起的虚拟机“陷阱”,提高每个执行周期过程中主虚拟机的执行效率;之后我们介绍软件大页(Software Superpage)技术,减少在虚拟机之间映射大片内存页面的开销,减少每个执行周期结束时主虚拟机的停机时间。
以往的虚拟机热备份方法中使用的脏页记录模式没有考虑页表项重用的性质。在每一个epoch开始后,虚拟机管理器删除了所有存在的影子页表,这导致任何内存访问操作都会引起虚拟机“陷阱”,从而虚拟机管理器可以探测到哪些页面被客户操作系统修改。这种机制的负面影响是内存读操作也会导致虚拟机“陷阱”,而脏页记录的目的只需要发现所有写操作。
读错误减少技术的核心思想是利用影子页表重用度高的行为,在每个执行周期开始时,保留所有影子页表页表项;为了能够发现所有写操作,把所有L1级影子页表页表项全部设置为“只读”。该机制有效有效避免了每个执行周期重新建立影子页表的过程,只有第一次写操作才会引起虚拟机“陷阱”。
图 3.1 选择性扫描L1级影子页表
特别的,我们采用一种选择性扫描机制以提高执行效率。如图3.1所示,在每个执行周期开始时,我们选择性地扫描所有影子页表页表项,并把“可读写”页表项设置为“只读”。我们为每一个L1级影子页表分配了一个位图标记位(Marker)。
写错误预测技术的核心是预测客户操作系统在同一个执行周期内将要发生的写操作“陷阱”,预先把相应的影子页表页表项设置为“可读写”权限。该技术的基本过程如下:虚拟机管理器在处理写操作“陷阱”时,同时执行写操作预测,把可能发生写操作“陷阱”的页表项设置为“可读写”,并把该页表项对应的内存页表记录为脏页。后续对该页面的写操作将不再发生虚拟机“陷阱”。
预测准确率决定了系统性能。错误预测会导致虚拟机管理器做很多无效工作,产生大量虚假脏页。我们设计了Histase预测算法,由于篇幅有限,对该算法的讨论详见论文[2]。
在每个epoch结束后,所有脏页都会被主虚拟机控制器发送到备份机。而发送前脏页需要被映射到内核中的虚拟机控制器中。由于在一个执行周期中,客户操作系统可能修改大量内存,内存映射过程一般会消耗较长时间。由于内存映射期间主虚拟机处于停机状态,因此内存映射的开销对应用程序的性能影响较大。我们引入了软件大页技术,用来减小虚拟机之间映射大量内存页面的开销。
图 3.2 软件大页结构
软件大页的基本思想同样利用了写操作“陷阱”的重用性原理,把经常被修改的内存页面映射到管理操作系统中,并且动态更新映射到管理操作系统中的内存页面。图3.2是以32位PAE系统为例的软件大页设计示意图。
软件大页使用较少的虚拟地址空间映射主虚拟机的所有内存页面,有如下优点:一,Taiji系统的内存拷贝进程可以直接拷贝主虚拟机的所有脏页,好像所有的内存页面被持久地映射在管理操作系统中,避免了在每个执行周期结束后映射脏页的过程;二,因为我们只使用了较少的虚拟地址空间访问主虚拟机的所有页面,所以,对Taiji脏页拷贝进程其他部分影响较小。
上一章介绍的Taiji系统有效提高了虚拟机热备份系统的运行效率。本章中,我们关注虚拟机热备份系统网络延迟过长的问题,并介绍Phantasy系统。该系统通过异步脏页预取技术将现有虚拟机热备份系统的网络延迟减小了85%,并且进一步减少了38%的运行开销。
图 4.1 基于检查点拷贝的虚拟机双机热备份系统执行流程
图4.1展示了现有基于检查点拷贝的虚拟机双机热备份系统的执行流程,每一个epoch中,为了保证整个系统对外的状态一致,所有对外发出的数据都会被预先缓存在本地的I/O缓存中。在epoch执行结束后,主虚拟机会暂停执行并生成检查点,而只有当这个检查点被完整发送到备份机之后,对应的网络缓存才能被释放。而这个网络缓存机制,正是导致虚拟机双机热备份系统网络延迟过大的主要原因。加之上文提到的关键应用往往对网络延迟较为敏感,因此这也是限制双机热备份系统广泛应用的主要原因。
为了减小以往双机热备份系统的网络延迟,我们摒弃了现有方法中周期性同步检查点的机制,转而采用一种基于异步拉取式脏页预取的检查点同步机制。与现有方法中需要等到一个epoch运行完成才使得主虚拟机停机以便收集脏页生成检查点,然后再传输检查点的方法不同,我们设计了一种异步脏页拉取机制:在主虚拟机运行时,由备份虚拟机通过RDMA网络提供的远程内存直取功能将脏页直接拉取到备份虚拟机内存中。这样,在每个epoch结束时只需要拷贝极少量没有来得及预取的脏页即可。
图 4.2 Phantasy系统架构图
图4.2展示了Phantasy的系统架构图,在Phantasy中,为了实现异步脏页拉取,我们向KVM虚拟机控制器中添加了预取器以及脏页记录器等结构。其中脏页记录器负责周期性地记录虚拟机产生的脏页以便备份机可以预先得知需要拉取哪些脏页。为了高效获得虚拟机产生的脏页信息,我们采用了Intel处理器提供的page modification logging(PML)硬件特性快速得到脏页地址。预取器则通过RDMA READ操作直接将这些脏页从主虚拟机拉取到备份虚拟机中。值得注意的是,为了避免对虚拟机性能的影响,整个预取过程都被设计为虚拟机不可知的(VM-agnostic),因此在预取过程中,主虚拟机不会被暂停。
图 4.3 Phantasy中采用的异步多轮预取流程
图4.3展示了Phantasy中采用的异步多伦预取机制流程,由于篇幅有限,在此将不对其展开讨论,详细介绍可参考论文[1]。
本文首先分析了限制传统虚拟机热备份系统广泛应用的性能问题和网络延迟问题,在此基础上分别介绍了Taiji和Phantasy两个虚拟机热备份系统。
在Taiji系统的研究中,我们发现现有的虚拟机状态记录和复制技术对应用程序的性能造成了很大影响。通过深入分析影子页表页表项重用和写操作“陷阱”的局部性等性质,我们提出了高效的虚拟机状态记录技术,包括Read Fault Reduction和Write Fault Prediction,这两个技术把虚拟机状态记录机制的性能分别提高了31%和21%。另外,我们提出了软件大页技术,有效降低了虚拟机之间映射大量内存页面的开销,加快了虚拟机状态复制过程。相较于Remus系统,Taiji将热备份系统运行性能提高60%左右。
在Phantasy系统的研究中,我们发现造成虚拟机热备份系统网络延迟过高的主要原因是检查点拷贝机制中较长的依赖关系导致的网络数据被缓存时间过长。因此我们首次提出了利用硬件辅助虚拟化技术中的PML特性进行内存脏页追踪的方法。在此基础上,我们进一步提出了异步拉取式脏页预取策略,使得备份虚拟机可以在不中断主虚拟机运行的情况下,异步地将主虚拟机产生的内存脏页拉取到备份虚拟机中。相较于以往虚拟机双机热备份系统,Phantasy显著降低了85%的系统延迟。这对于交互式应用来说,是至关重要的。近年来随着区块链技术的发展,新一代高性能公链号称要支持每秒百万级别的交易数目。Phantasy采用的低延迟技术可以大幅度提高用户体验。点击查看我们组在区块链方面的工作
除了虚拟机热备份技术之外,我们课题组还在虚拟机确定性重演领域进行了深入的研究。确定性重演技术在软件调试、信息安全、区块链的共识机制中都有广泛的应用。我们通过基于指令块的执行方法来记录多核环境下共享内存的交织访问等影响处理器执行的事件来保存系统运行状态,利用新一代Intel处理器的特性来高效追踪虚拟机运行过程中产生的读写集合,通过去中心化的三阶段并行提交协议、本地拷贝缓存技术等一系列优化大幅度改善了基于软件实现的虚拟机确定性重演的性能。点击查看我们组在确定性重演方面的工作
在过去的几年中,围绕构建高效的容错系统,我们已经展开了一系列前沿研究,并在IEEE INFOCOM[3]国际会议和IEEE TC[1][2]期刊发表了多篇高水平论文。 基于我们工作中的发现和提出的研究问题,来自国内外的多个团队相继在CCS、USENIX Security、IEEE INFOCOM、FAST、SOCC等顶级会议发表高水平论文。
[1] Shiru Ren, Yunqi Zhang, Lichen Pan, and Zhen Xiao. Phantasy: Low-Latency Virtualization-based Fault Tolerance via Asynchronous Prefetching IEEE Transactions on Computers (TC), February 2019.
[2] Jun Zhu, Zhefu Jiang, Zhen Xiao, and Xiaoming Li. Optimizing the Performance of Virtual Machine Synchronization for Fault Tolerance IEEE Transactions on Computers (TC), December 2011.
[3] Jun Zhu, Zhefu Jiang, and Zhen Xiao. Twinkle: A Fast Resource Provisioning Mechanism for Internet Services Proc. of IEEE Infocom, April 2011.
Twinkle: A Fast Resource Provisioning Mechanism for Internet Services. IEEE Infocom, Shanghai, China, April 2011.
一种高效的脏页获取方法 发明人:朱君、江哲夫、肖臻、李晓明,专利号:200910243439.6,授权时间:2012年07月05日
软件全称:基于虚拟机的双机热备份系统 登记号:2010SR015056 著作权人:北京大学(中国) 登记日期:2010/04/07