论文部分内容阅读
随着互联网的迅猛发展以及数据采集和存储能力的稳步增长,人类积累的待处理和利用的数据量已经达到传统的大型机无力处理的程度。面对这一“大数据”问题的挑战,以MapReduce、Spark等分布式并行计算框架为代表的一大批横向扩展的解决方案应运而生,逐渐取代了传统的纵向扩展方案。它们通过将数据切分并分配到大量机器构成的集群中进行处理,实现了极佳的可扩展性,但同时也要求用户学习和使用其特有的编程模型,给用户带来了认知负担和旧软件的迁移成本。互联网时代的另一个重要趋势就是云计算,也就是依托虚拟化技术实现计算机资源的切分、管理和按需分配。在云上,单独的一台虚拟机处理能力有限,无法胜任大数据处理任务。为克服此限制,一种解决方案是使用虚拟机构成集群,在其上运行分布式计算框架,从而突破单台虚拟机运算能力的瓶颈。本文提出了一种分布式虚拟化架构,利用多台物理机构成一台虚拟机,可以作为另一种解决方案。该架构在实现资源聚合的同时,不需要用户改变使用习惯,避免了分布式计算框架的相应弊端。本文重点研究了分布式虚拟机监控器中用于实现内存虚拟化的分布式共享内存的设计与实现。为了在虚拟化环境中实现与整合高性能的分布式共享内存,本文创新地提出了以下机制:(1)一种基于放松的一致性的、配合半虚拟化使用的内存同步协议。在分布式共享内存中,同步协议的选取对性能有着重大影响,最近的工作采用的多是基于放松一致性的协议。然而,虚拟化系统要求内存的实现对客户机完全透明,这限制了我们只能使用基于顺序一致性的协议,无法达到最佳的性能。为了解决这个问题,本文提出了允许不同的vCPU处在不同一致性模式的同步协议,配合半虚拟化技术,可以有效绕过虚拟化系统对内存一致性的限制。(2)分布式共享内存与I/O虚拟化的整合机制。在虚拟化系统中,I/O虚拟化与内存虚拟化并不完全正交,I/O设备发起的DMA会访问内存。为了将DMA访问与分布式共享内存整合,本文提出了分布式共享内存中页的代理及读写锁机制,分别用于处理透传和非透传方式实现的虚拟设备。本文的贡献还包括:(1)分析了分布式共享内存的内存替换策略,提出了一种有效的策略以及虚拟化环境下的实现方法。(2)在QEMU-KVM系统中实现了分布式共享内存,作为分布式虚拟机监控器dQEMU的一部分。本文详细阐述了实现中的一些具体问题,揭示了在虚拟化环境中实现分布式共享内存的要点,对今后的工作有一定参考价值。(3)在实现中同时支持TCP和RDMA两种网络通信方式,运用RDMA网络提高了分布式共享内存的性能。本文在集群上对搭载了上述分布式共享内存的dQEMU进行了测试,验证了它启动的虚拟机能运行Linux等主流操作系统。针对内存同步延迟以及不同场景下内存读写吞吐量的实验表明,采用RDMA作为网络通信方式可以获得更低的延迟和更高的吞吐量。运行不同类型的应用时,分布式共享内存也呈现出不同的性能特征,其中计算密集型的应用性能表现最佳。