HeMem: Scalable Tiered Memory Management for Big Data Applications and Real NVM
introduction
混合内存架构的使用成为了一种趋势。随着傲腾非易失性内存正在逐渐普及,相比于DRAM,它拥有着更高的密度,提供更大的内存容量。然而,傲腾非易失性内存的带宽和延迟性能与DRAM存在一定的差距。为了弥补性能的问题兼顾内存容量,需要混用Dram和NVM。
现在内存的管理分为软件和硬件,傲腾内存在硬件上提供了一些模式来方便管理,虽然这种方法可以不需要对现有的操作系统进行修改,但是对于上层缺乏透明度。而在软件上进行管理,NVM和DRAM的地址范围可以暴露出来,从而进行更复杂的管理。
解决方案:在软件上提出了HeMem,动态管理分层内存的操作系统,提出一种高级的策略去处理内存访问、性能隔离,充分利用NVM的性能,同时降低页面追踪的开销
设计
总体架构
HeMem是一个用于分层主存的用户空间管理器,它可以动态且透明地链接到内存密集型应用程序中。HeMem会去捕捉系统对于匿名内存页的处理调用,然后转移到用户态的page fault的处理线程,这样HeMem就可以在用户态去管理内存了。
HeMem的主要核心分为两个部分,根据内存访问采样的冷热数据分离以及异步内存数据迁移。
软件采样
传统的基于扫描页表观察数据访问频率的方式,需要遍历整个页表,同时也需要重置bit位,会占用过多的cpu资源。HeMem采用了一种开销更低的异步内存访问采样(PBES)来确定访问频率。HeMem以某种频率运行PBES线程抽样检测内存页的访问次数,并将记录保存在缓冲区中,进行冷热数据分离。在PBES线程运行的过程中,同时其他线程如页错误处理也可以运行。
数据迁移
整个迁移不能影响整体的性能,所以HeMem采用了DMA的方式进行。
数据迁移发生在NVM的热数据和DRAM的冷数据中,这个冷热数据的区分是由之前的PBES维护的,同时由于NVM的写性能非常的差,写访问比较重的页面会具有一个很高的优先级。
性能测试
使用GUPS(见参考)作为基准性能测试,当测试集的热数据大小与DRAM差距很大时,MM和HeMem的性能差距并不大,此时HeMem也很少进行冷热数据迁移
但是当测试数据集热数据大小接近DRAM时,MM的性能就会显著低于HeMem的性能,此时MM会大量出现DRAM和NVM的迁移,许多热数据会被迁移到NVM。
同时,HeMem为GAP图处理基准提供高达50%的运行时减少,为siloin内存数据库的TPC-C提供13%的高吞吐量,为键值存储在性能隔离下降低16%的延迟,并且优化NVM的10x的磨损均衡。
参考文章
https://mp.weixin.qq.com/s/2Ilcpoquz25tQ-3FeVkp4w
https://en.wikipedia.org/wiki/Giga-updates_per_second