论文部分内容阅读
随着数据中心、大数据应用的发展,DRAM(Dynamic Random-Access Memory)技术由于工艺限制,其存储密度增速难以满足计算规模的快速增长。将存储密度大、价格低廉,但性能弱于DRAM的非易失性内存(Non-Volatile Memory,NVM)和DRAM构成异质内存是解决该问题的一个主流研究方向。此时,需将应用中的数据进行冷、热划分,并布局到异质内存中的DRAM和NVM部分。托管式语言,如Java,Scala等,被广泛应用于分布式系统、嵌入式系统等框架的开发。由于托管式运行时自身具有内存管理模块,其往往和操作系统、硬件的的异质内存管理机制策略产生冲突。 本文围绕“利用托管式运行时系统管理异质内存”的思想,来解决多系统层次同时移动数据造成的冲突问题。针对数据使用行为复杂的单机应用和计算行为规则的大数据应用,本文分别提供了基于程序分析的数据划分策略和数据布局编程接口。最终,该研究基于内存计算框架Spark和Java运行时OpenJDK实现了贯穿大数据应用、大数据框架、运行时系统、异质内存的一体化管理框架。 本文的创新点主要有: ·基于运行时系统,针对单机应用提出了一种粗、细两级粒度的冷、热数据划分,并利用GC进行数据布局的方法。本文直接利用运行时堆现有的数据生命周期、数据类型等数据分类,进行粗粒度的冷、热数据划分;本文发现了程序中的物理访存主要由极少量函数造成的现象,并提出了基于函数访存密度(Memory Access Density)的细粒度冷、热数据划分方法。最终,针对Dacapo等程序,在异质内存中的DRAM比例为15%-25%时,和使用与异质内存等量的DRAM相比,仅有5%-25%的性能差。 ·本文对典型内存计算框架(Spark)的迭代计算应用的磁盘开销、GC、计算特征等进行了系统分析,发现其基本单元(RDD)之间具有显著的访存差异和生命周期差异,而单一基本单元内部的众多数据则具有类似的访存行为。基于此,本文提出了一套以自定义数据结构(RDD)为布局粒度的异质内存编程接口。 ·提出了一种跨层的“大数据框架-运行时系统协同”的数据布局策略。通过本文开发的数据信息传递通道,应用开发者对单一自定义数据结构(RDD)进行位置(DRAM、NVM)标注后,标注信息首先在Spark层次中相互依赖的RDD之间进行传播,然后运行时层根据标注信息划分众多孤立的数据对象,并基于该数据划分进行异质内存布局和定向优化。使用本文提出的编程接口对现有Spark应用进行轻微修改,便可以RDD粒度在异质内存上进行数据布局。在使用DRAM比例在25%-35%的异质内存时,可以达到全部使用DRAM时80%-97%的性能。