非易失内存系统中的写优化和持久化技术研究
现代处理器的多核化发展趋势和大量数据密集型应用的出现,使得计算机对高 容量主存的需求越来越迫切。现代计算机主存的主要存储介质是 DRAM (dynamic random access memory)。但是,由于在存储单元扩展和能耗效率方面的局限性, DRAM 很难做到更大的容量。新型的非易失内存(non-volatile memory,NVM)可 以有效地避免 DRAM 中存在的存储单元扩展和能耗效率问题,从而被考虑作为下一 代主存的主要存储介质。但是,现代的计算机系统都是面向传统的 DRAM 主存设计 和优化的,在当前的计算机系统中使用 NVM 面临着写优化和数据持久化两方面的 挑战。在写优化方面,由于 NVM 都是通过改变存储介质的物理状态来存储数据的, 物理存储单元被复写一定次数后会失效而具有有限的写耐久性,如何对 NVM 做有 效的写优化处理来提升其耐久性和性能是关键;在持久化方面,NVM 系统中的数 据从 CPU 写入到主存时就需要做数据持久化处理,如何使用有效的持久化技术来保 证数据的正确持久化和故障时的一致性是关键。另外,在一些应用场景如端设备上, NVM 主存还面临着安全性问题,这是因为 NVM 在系统关机后依然保存着数据而 产生数据残留,因此需要在 NVM 上使用内存加密。本文分别对非加密和加密 NVM 面临的写优化和持久化挑战展开研究并提出有效的解决方案。
为了提升非加密 NVM 的写耐久性,提出了一个面向 NVM 的写优化数据组织 结构 Path Hashing。Path Hashing 是一个基于哈希的数据结构,使用了一个新的写优 化哈希冲突处理方法,即位置共享,使得哈希数据结构中的插入和删除操作不会产 生额外的 NVM 写。通过进一步使用双路径哈希和路径缩减技术,Path Hashing 可以 在哈希表空间利用率和请求延迟方面获得高的性能。实验结果表明,Path Hashing 不 会造成额外的 NVM 写从而提升了 NVM 的耐久性,并可以达到 95% 以上的哈希表 空间利用率,与现有哈希表方法相比也实现了更低的请求延迟。
为了保证非加密 NVM 中数据的正确持久化和一致性,提出了一个面向 NVM 的持久化数据组织结构 Level Hashing。Level Hashing 在实现写优化和降低开销的同。时,可以保证 NVM 中哈希数据结构故障时的数据一致性并且支持高效地扩容操作。Level Hashing 提出了一个基于共享的两层哈希表,它的搜索、插入、删除和更新操 作在最差情况下具有常数级的时间复杂度,且很少产生额外的 NVM 写。为了低开 销地保证数据一致性,Level Hashing 对插入、删除和扩容操作实现了免日志的一致 性保证。为了高效地扩容哈希表,Level Hashing 提出了一个原地扩容技术,这种方 法只需要重新哈希 1/3 的哈希桶而不是整个哈希表就可以完成扩容,从而显著减少 了重哈希的桶数并提高了扩容性能。实验结果显示,与现有最好的哈希数据结构相 比,Level Hashing 获得了 1.4 − 3 倍的插入加速比、1.2 − 2.1 倍的更新加速比和 4.3 倍的扩容加速比。
为了提升加密 NVM 的写耐久性,提出了一个面向加密 NVM 的写优化内存架 构 DeWrite。DeWrite 使用内存加密机制来保证 NVM 中的数据安全,并通过消除重 复的内存写来提升 NVM 的使用寿命和运行性能。DeWrite 提出了一个轻量级内存行 粒度的数据去重技术来解决在加密 NVM 上执行低延迟的在线去重的挑战,并提出 操作并行和元数据共享策略来高效整合数据去重和内存加密技术,以提高系统的时 间和空间效率。实验结果显示,和传统的加密 NVM 方案相比,DeWrite 减少了平均 54% 的 NVM 写操作数量。同时,DeWrite 对加密 NVM 中的内存读操作和写操作分 别加速了 3.1 倍和 4.2 倍,且减少了 40% 的能耗开销。
为了保证加密 NVM 中数据的正确持久化和一致性,提出了一个面向加密 NVM 的持久化内存架构 SuperMem。SuperMem 是基于直写式计数器 cache 的持久化技术, 有效地避免了现有基于写回式计数器 cache 的持久化技术在备用电池的使用、可移 植性和恢复延迟等方面的问题。为了减少直写式计数器 cache 带来的额外的性能开 销,SuperMem 采用了一个局部性感知的计数器写聚合方法,通过探索计数器存储 和数据写分布的空间局部性来减少写请求的数量;并采用了一个跨 bank 的计数器存 储方法来高效地分发数据和计数器写到不同的 bank 上,利用 bank 的访问并行性来 加速内存写。实验结果显示,SuperMem 使用计数器写聚合方法减少了高达 50% 的 写操作数量,使用跨 bank 的计数器存储方法提升了最高 2 倍的系统运行性能。