论文部分内容阅读
在大数据时代的背景下,数据的海量增长和处理的时效性使得以外存为中心的计算机存储系统性能瓶颈凸显。与外存相比,DRAM能提供超高的数据访问性能;同时其面临着价格高、集成度低、易失性、高能耗等问题。随着新型存储技术的发展,其具有内存级访问速度和外存的非易失等特性,为优化数据访问带来了新的契机;然而,基于新型存储介质的非易失内存(NVM)存在读写不对称和有限写寿命等问题,因此,现阶段使用非易失内存完全替换传统内存是不实用的,混合传统内存和非易失内存则是可取的一种使用方式。在混合内存架构中,首先,有效地管理非易失内存空间可以为用户程序使用非易失内存空间提供简便性;其次,非易失内存具备较高的集成度,在集群中共享非易失内存空间可以为节点提供更大的存储空间,满足大数据的大容量需求;最后,现有基于内存的数据管理是以DRAM的特性为基础,没有利用非易失内存的优势和改进其不足。基于此,本文首先研究了单机以及分布式的非易失内存管理机制,然后结合远程直接内存访问技术(RDMA,Remote Direct Memory Access)研究了基于非易失内存的数据管理优化。主要工作及创新点如下:(1)提出了一种磨损感知的混合内存分配器内存分配器作为用户程序获取内存的而直接方式,磨损感知的内存分配器能够简化应用程序对非易失内存的使用。通用内存分配器的设计,将数据空间和元数据空间耦合在一起,动态频繁的内存分配会产生大量元数据小写,并通过缓存已经释放的空闲内存块加速内存块分配,导致热点内存区域的产生,从而加速了非易失内存的写损耗;NVMAlloc采用限定内存块在单位时间内分配次数的非易失内存分配器只会延缓热点内存块产生;基于此,设计了一个磨损感知的非易失内存分配器WAlloc,首先将可恢复的元数据存放到DRAM中,例如空闲内存块链;然后,采用基于磨损次数的分配策略均衡内存分配带来的内存写并重定向数据写,此外,选择性地为分配的非易失内存块关联DRAM写缓存吸收数据写,最后,采用显式数据预取和绕过CPU缓存的写的方式实现非易失内存上元数据或数据的持久化;实验的结果显示WAlloc磨损效果优于NVMalloc大约30%~60%,与Glibc malloc相比,WAlloc中每64字节的内存块的数据写减少约1~1.5倍。(2)提出了一种利用远程直接内存访问技术的非易失内存扩展机制RDMA技术提供的远程内存访问机制以及具备大容量、内存访问速度的非易失内存可以作为远程内存扩展设计选择。鉴于此,设计了一个远程非易失内存扩展系统-Pyramid,通过RDMA技术为单个节点聚合使用集群中其他节点上的非易失内存空间;首先,使用DRAM存放空间管理的元数据减少不必要的非易失内存写,其次,通过建立与远程虚拟内存地址的映射关系来实现远程内存的访问;再者,采用远程缺页的机制分配非易失物理内存,基于RDMA原语实现动态同步机制提升远程内存分配的性能;进一步地,为了加速数据的读写性能以及吸收NVM的数据写,为远程NVM空间的设置本地的DRAM数据缓存;最后,为了简化应用系统的使用,提供了基本的内存分配和访问接口。实验的测试结果表明Pyramid提供了低至11us到15us的远程内存分配性能。(3)提出了一种基于非易失内存的键值系统内存键值系统因其性能优势被广泛应用在大数据领域中由于DRAM有限集成度以及电气特性,使得外存的数据IO不可避免;非易失内存可以减少内存键值系统持久化开销。鉴于此,本文设计了一个基于非易失内存的键值系统-Craftsman,使用RDMA实现远程访问,并支持传统内存的管理;首先,将内存分为数据区和缓存区,缓存区又划分为稀疏和密集两个缓存区域,稀疏内存区用于存放客户端发送(远程写)的键值对,紧凑区是键值对主要缓存区;其次,考虑NVM的写磨损以及远程写性能,客户端采用非定点的远程写模式SET键值对,稀疏区中每个内存块只用于存放一个键值对;最后,设计内存压缩机制将键值对从稀疏区迁移至紧凑区,紧凑区中每个内存块包含多个键值对来提高内存的缓存效率。与Memcached相比,通过实验测试表明Craftsman的性能提升大约是18%~72.4%。(4)提出了一种基于远程可访问非易失内存的B+树基于非易失内存的B+树,一方面,通过显式地操作CPU缓存保证其数据的一致性,但B+树中元素排序带来的额外内存写,加速了非易失内存的写磨损;另一方面,在分布式环境中,B+树操作请求的集中式处理以及NVM的写延迟制约了B+树的并发访问性能;为此,文中利用远程内存直接访问(RDMA)技术,设计了一种基于非易失内存的B+树—Rio;首先,将B+树的内部节点存放到DRAM中,只持久化叶子节点;其次,利用RDMA提供的直接访问远程非易失内存的机制,通过客户端使用RDMA写操作持久化叶子节点,简化服务端的处理逻辑,增加B+树的处理吞吐量;然后,采用日志的方式组织非易失内存上的叶子节点中的数据以及延迟分裂叶子节点机制减少内存写;最后,通过RDMA的原子操作以及本地的原子操作协作实现远程并发控制缓和服务端的锁竞争。实验结果表明:相比于现有基于混合内存的B+-Tree,Rio的吞吐量提高约56%,端到端延迟降低了约15%。