论文部分内容阅读
多核与虚拟化的发展,数据规模的增长,以及新的计算模式的出现,对内存容量提出了不断增长的需求。然而,DRAM系统的扩展性却受到了封装、工艺和信号完整性问题的限制,尤其以信号完整性的影响最为严重,使得内存容量随着接口频率的提升甚至呈现下降趋势。采用缓冲芯片的解决方案虽然可以缓解信号完整性问题,但是其扩展性受到了同步访存协议的限制。另外,内存容量的扩展将会导致功耗和性能问题。一方面,内存功耗已经占了系统功耗的很大部分,随着内存容量的扩展,内存功耗将持续增长,其中很大比例来自于DRAM的刷新功耗。刷新操作同时阻塞正常访存的执行,影响性能。而且,随着DRAM密度的提升,刷新带来的功耗和性能开销将显著增加。另一方面,内存容量的扩展将使地址空间加大,加剧TLB的冲突,造成严重的性能开销。大页面可以显著缓解TLB冲突,未来可能成为趋势,但是却与传统的基于页着色的性能优化技术冲突,无法同时发挥作用提升性能。 本文针对内存系统的可扩展性,以及内存扩展带来的功耗、性能等问题进行优化,主要工作包括以下几个方面: 针对同步访存协议对缓冲芯片扩展性的限制,本文提出一种基于两次访存的扩展方案Twin-Load,该方法可以在标准同步DRAM接口上构建异步访存协议,从而打破了同步协议的限制,利用缓冲芯片组成可扩展的拓扑结构,同时避免了定制异步接口的成本、时效性和通用性的问题。Twin-Load方法将一次内存读取拆分为两次,第一次将数据预取至缓冲芯片,第二次从缓冲芯片读出正确数据,每次内存读取都是基于标准的同步协议,但是两者作为整体实现了异步访问。Twin-Load可以通过软件方式实现,利用手工或编译的方式替换程序中的访存指令,从而完全不需要修改现有处理器。本文通过原型平台验证了Twin-Load的有效性,虽然软件Twin-Load方式引入了更多的指令和访存,但是仍可以达到理想内存性能的74%,相比于在PCIe接口上扩展内存的方案,性能有数量级的提升。本文同时给出了硬件实现Twin-Load的方式,以及连接NVM的方法。 针对DRAM刷新导致的功耗和性能开销,本文提出一种基于内存元数据的智能刷新管理方法DTail,该方法利用所有内存单元并不需要以同样频率刷新的特性,减少不必要的刷新,从而降低其导致的功耗和性能开销。DTail从系统各个层次获取不需要刷新的内存行的信息(称为元数据),并将元数据存储于内存自身,由内存控制器在需要进行刷新时从内存中读取并进行判断,决定是否执行刷新。元数据的大小与内存容量成正比,但是DTail将元数据存储于内存的做法使得其存储开销相比于内存容量可以忽略不计,保证DTail的扩展性。本文同时发现现有的两种刷新方式在减少刷新方面具有互补的特性,从而根据元数据信息,在两者之间动态切换,达到更好的性能和更低的功耗。本文通过实验证明了DTail的有效性,在同时利用保持时间信息和有效性信息的情况下,可以几乎完全消除刷新对性能的影响,并减少绝大部分的刷新功耗。 针对大页面与页着色技术的冲突,本文提出一种基于位置换的Cache索引方法SWAP,该方法通过引入一层伪地址空间,解耦虚实转换和Cache索引,使大页面和页着色技术可以同时发挥作用。操作系统管理伪地址空间,维护虚地址空间到伪地址空间的映射,并且使用大页面降低TLB的冲突;SWAP将伪地址的某些位进行置换得到物理地址,实现伪地址空间到物理地址空间的转换。利用这层简单的硬件映射,SWAP可以把操作系统对伪地址空间中大页面的着色传递到物理地址空间,从而实现页着色带来的好处,比如划分共享Cache。评测结果显示,SWAP可以叠加大页面和页着色带来的性能提升。