本记录主要基于清华大学计算机系舒继武老师在CCF ADL课程上的PPT,重点罗列重要的参考文献及工作成果:
持久性内存存储系统概述
背景
- 存储系统面临严峻挑战
- 数据量呈爆发性增长趋势
- 存储系统成为计算机系统的性能瓶颈
- 新型存储器带来巨大机遇
- 新硬件对存储软件提出颠覆性需求
- 内存与外存的统一处理
-
持久性内存存储系统 计算密集型->数据密集型 新型非易失固态存储器的有点:低功耗、非易失、高可靠性、抗振动及潜在的高性能 传统存储架构、软件及各层次都是针对传统器件设计的,难以发挥新型存储器件的特性;同时新型存储器件本身也有写性能和寿命有限等不足,这些都是需要解决的问题。
- 非易失存储系统
持久性恶内存存储系统的结构变化
- 易失性-持久性边界的变化(MEM-DISK -> Cache-MEM)
- 对存储介质的利用方式发生变化(文件?对象?)
三个关于持久性内存存储系统的研究内容:
- 持久性内存编程模型
- 持久性内存空间管理
- 持久性内存文件系统
持久性内存编程模型的挑战
新型编程模型涉及的内容:
- 软件访问硬件接口:以访问内存的方式访问NVM(Cache Coherent)
- ISA: Store 操作数据需从 CPU Cache 中刷出,全局可见性->数据持久化
- 暴露给应用程序的方式:
- SNIA NVM 编程模型 (Block/File/Mem)
- Memmory-mapped File (DAX)
- 编程复杂度:更安全,不易出错,熟悉的编程范式
新型编程模型面临的问题:
- 程序执行空间的数据已经持久化,如何提供应用程序自动管理持久化的功能?
- 需要确保程序数据在异常和系统崩溃后能被正确恢复,如何实现低开销的一致性机制?
持久性内存空间管理面临的挑战
高效的持久内存空间管理机制
- 持久性内存系统上的动态内存管理
- 易失性内存分配malloc->持久性内存分配pmalloc
- 易失性内存回收free->持久性内存回收pfree
- 融合内存管理和文件系统的空间管理方式
- 内存分配开销 -> 分配器的简化
- 混合主存管理 -> 混合主存的空间管理和数据分布
持久性内存文件系统面临的挑战
高效的持久内存文件系统构建
- 优化错配:更突出的软件延迟,该如何做软件系统方面的优化?
- 功能冗余:内存级别的文件系统需要保留、去除或增加哪些功能?
- 维度缺失:NVM存在耐久性问题,如何在文件系统中考虑耐久性?
持久性内存编程模型
概述
存储层次变革,需要定义新的内存编程模型
- 基于单级持久性存储系统的非易失性编程接口: Mnemosyne(ASPLOS’11), NV-Heaps(ASPLOS’11), NVML[Intel], Heapo(TOS’14)
- 新型编程模型的一致性开销的优化:Epoch(SOSP’09), WSP(ASPLOS’12), Kiln(MICRO’13), Strand Consistency(ISCA’14), LOC(ICCD’14), BPPM(MSST’15), Eager Sync(ASPLOS’16), Sync/Delegated Ordering(MICRO’16), DUDETM(ASPLOS’17), Kamino-Tx(Eurosys’17)
关键技术
基于内存映射文件的持久性堆结构
- 基于持久内存文件系统(如PMFS,EXT4-DAX)和内存映射文件导出load/store访问接口:Mnemosyne(ASPLOS’11), NV-Heaps(ASPLOS’11),NVML[Intel]
- 提供持久化事务支持,保证数据一致性
非易失编程库NVML
特点是:
- 提供NVM的编程模型和接口(包括事务接口)
- 构建于文件系统提供的mmap接口之上
- 用户态,较为全面的功能支持
优势是:
- 支持现有CPU硬件指令,并且兼容硬件厂商为NVM所增加的额外硬件指令
- 不需要额外的编程语言语义支持
- 具备较为全面的功能支持
挑战是:
- 容易出错的一致性编程体验
- 较为复杂的编程接口
- 相对较差的性能,尤其在内存分配和事务原子性支持上
基于原生堆的持久性堆结构
即在进程虚拟地址空间中预留一段持久性堆空间,如Heapo(基于堆的持久性对象存储)
一致性机制优化
在内存级维护持久性数据结构带来一致性问题 持久性内存的一致性机制开销分为:顺序写开销 & 持久性开销 一致性机制会引起额外的性能开销
持久型内存的一致性机制优化的两个维度:软硬件X持久顺序化开销
降低顺序化开销
- Epoch Persistency (SOSP’09)
- 在处理器中加入新原语,由硬件保证写入顺序
- 将程序执行用持久化屏障(PB)分成多个执行单元(Epoch);执行单元内部可以乱序执行、写合并;执行单元之间有序持久化
- Loose-ordering Consistency (ICCD’14)
- 放松一致性,允许持久化乱序
- 迫切提交协议(Eager Commit)
- 延迟事务提交状态检查,减少提交时刻等待
- 方法:以固定的格式写入数据日志
- 预测持久化
- 以预测的方式执行事务的持久化,降低顺序性维护的开销
- 方法:在CPU缓存中维护数据多版本,并跟踪事务依赖
- Strand Persistency (ISCA’14)
- 将执行线程划分为多个无序的strand,每个strand如同独立的线程
- 多个无依赖关系的IO操作可并行写回
- 相比Epoch Persistency,进一步放松约束顺序
- Eager Sync (ASPLOS’16) / Sync Ordering (MICRO’16)
- 利用Intel处理器面向持久性内存的扩展指令集
- 存在PCOMMIT指令执行顺序化执行
- Delegated Ordering (MICRO’14)
显示地暴露偏序顺序性约束给持久性内存控制器
- 实现缓存严格持久性语义
- 允许程序在存数操作持久化之前继续向前执行,使得程序易失性执行和持久化过程分离
- 由持久性内存控制器完成控制顺序化和持久化过程以最大化调度灵活性
- Hands-Off Persistence System (HOPS) (ASPLOS’17)
提供新ISA原语给应用程序,分离持久化和顺序化约束
- 在CPU cache 中增加Perisist Buffers,追踪更新的数据
- 分别独立支持顺序化和持久化原语
- 程序可以在epoch结束时使用ofence,在事务提交时使用dfence
降低持久化开销
- 全系统持久化技术(WSP)(ASPLOS’12)
- 通过后备电源灯硬件技术提供系统掉电后的数据备份,避免了数据因一致性导致的回写开销
- 非易失性CPU缓存 (MICRO’13)
- 将NVM引入CPU末级缓存LLC中,通过非易失性LLC提供数据新版本的持久化,降低了持久化开销
- 软件支持的持久化内存模糊持久化技术 (MSST’15)
基于WAL的持久性内存事务问题:
- 一个事务中数据存在多次拷贝
- 多次缓存行刷新的开销问题
- clflush和mefence额外增加约250ns延迟 模糊持久化边界,在持久性内存提供类似steal和no-force的缓存管理
- 日志内执行技术XIL(重组日志,使得未提交数据被写回NVM,放松了对未提交数据的要求)
- 易失检查点辅助批量持久化:利用日志中持久性版本维护覆盖写顺序,使得提交数据无需立刻写回,放松了对提交数据的要求
- 提供不同级别保证的去耦持久化事务 (ASPLOS’17)
- 利用shadow DRAM将整个持久化事务的运行解耦成3个异步的阶段(Perform,Persist,Reproduce),提供不同级别的持久性保证
- 避免undo log的多次fence操作,避免redo log的额外日志索引操作
- 支持现有的硬件事务内存
- 利用shadow DRAM将整个持久化事务的运行解耦成3个异步的阶段(Perform,Persist,Reproduce),提供不同级别的持久性保证
- 在关键路径上移除拷贝延迟的原子性事务 (Eurosys’17)
- 现有的原子性方法需要对数据进行拷贝,产生了额外的事务延迟
- Kamino-Tx通过异步的数据备份,避免了关键路径上的数据拷贝延迟
- 此外,它还通过动态的方法降低数据拷贝的存储开销
持久内存空间管理优化
概述
基于持久性内存重新构建有效的内存管理系统
- 内存分配的一致性保证机制及其优化
- 混合主存的容量扩展能力
- 混合主存上冷热数据的判断和放置
优化技术
Makalu: 高性能的 NVM 分配器 (OOPSLA’16)
NVML内存分配器的不足
- 每次NVM分配需要保证以下两点修改的原子性:
- 内存分配器的元数据修改
- 需要持久化指针指向分配的数据
- 结果:较高的NVM内存分配延迟
Makalu的解决方案:
- 所有分配的NVM对象都可以从一个包含512个root的集合到达,因此所有合法的NVM对象都可以从root找回,简化了内存分配器的元数据设计
- 简化的NVM分配器元数据设计,大大降低了每次NVM分配的开销
- 快速的NVM分配器重建
- 有效的内存垃圾收集模型
pVM: 持久化虚拟内存管理 (Eurosys’16)
- 提供自动的内存容量扩展技术
- 有效利用CPU缓存和TLB页表
- 设计了高效的对象存储接口
Thermostat: 用户透明的双层内存页管理技术 (ASPLOS’17)
- 用户透明的2MB大页设计和管理
- 动态的冷热页区分技术,可忽略的监测开销
- 双层混合主存设计,不频繁访问的数据放在NVM上