读论文《SpecPMT: Speculative Logging for Resolving Crash Consistency Overhead of Persistent Memory》

SpecPMT: Speculative Logging for Resolving Crash Consistency Overhead of Persistent Memory

​ SpecPMT:用于解决持久性内存崩溃一致性开销的推测日志

华中科技大学

摘要

​ 在实际应用中**,崩溃一致性开销是采用字节可寻址持久性内存的长期障碍。尽管持续改进,但为了保证崩溃一致性而进行的持久化事务仍然会导致5.6倍的减速**,这使得持久化内存在实际环境中变得非常昂贵。本文介绍了一种新的方法——推测日志,它摒弃了大多数内存栅栏,通过提前记录数据值来减少数据持久化开销。该技术支持一种新的持久性事务模型——推测持久性内存事务(speculative persistent memory transaction, SpecPMT)。评估表明,SpecPMT将持久化事务的执行时间开销大幅降低到仅10%。

Memory Fence:串行化加载与存储操作

关键字 持久性内存,事务,日志,微架构

1、介绍

可字节寻址的持久性内存(如PCM)具有高密度、可字节寻址和数据持久性的特点

持久性内存在构建抗崩溃软件、改善软件性能和提高开发效率方面的潜力。

持久内存其实是一种新型的内存条、它即可以当做内存使用,也可以当做持久化外存设备使用,其不论在容量、性能、价格上都是处于两者的中间位置。

持久内存有跟硬盘一样的特性,断电以后重启,内存中的数据依然存在。

持久内存在单位价格上约为普通内存的一半,并且在单台机器上轻松达到 1.5 TB,甚至 3 TB 的内存大小。

当然引入持久内存,相比较于内存可能会带来一定的性能衰退

即使在崩溃或系统引导期间,也可以继续访问数据结构。

持久性内存事务来实现崩溃一致性:它们确保在崩溃后,持久性内存位置上的所有或没有事务更新是可观察到的。

某个操作的完成有多个步骤,其中某一步做完后系统崩溃,则会发生不一致的情况

例如:向VSFS的一个文件追加数据,那么文件系统需要进行多次写操作:

  • 需要修改文件的inode(储存文件元信息的区域)
  • 需要写文件的data块

理想:文件系统从一个一致性状态,原子地移动到另一个状态。

由于需要记录数据更新以提供事务语义,现有的持久性内存事务会产生较大的开销。(执行速度下降验证)

如图1所示,即使应用了最先进的软件(SPHT[14])或硬件(EDE[63])解决方案,与没有持久性内存事务的版本相比,STAMP[53]中的程序仍然遭受平均50-161%的执行时间开销。
在这里插入图片描述

​ 图2说明了推测日志记录的基本思想。在典型的持久事务中(图2左),在事务中更新数据之前记录数据(undo)。刷写和隔离确保在数据写入之前,日志写入得以持续。相反,**推测日志记录(图2右)将日志记录向上移动到上一次更新数据的事务。**通过这样做,可以获得几个好处。首先,日志写入利用第一个事务的提交来持久化日志,而不需要内存栅栏来持久化日志。其次,它将刷写延迟到事务提交,使事务执行得更快。第三,一旦事务提交,日志就会持久化数据的最新值,因此在同一事务中写入数据成为可选的。如果数据写入失败,崩溃后的恢复可以依靠日志记录重建更新的数据。因此,数据写入不再需要刷写。因为持久化日志记录涉及顺序写入,所以它们具有更好的空间局部性,并且比持久化数据写入(可能更随机)更快

在这里插入图片描述

​ 在效率和可恢复性方面出现了一些挑战:当事务内部或外部发生崩溃时,如何格式化和维护日志记录以支持正确的恢复?因为推测日志记录必须比事务提交的时间长,所以在存在多个事务和重复数据更新的情况下,这些记录应该保存多长时间?如何及时、非阻塞地识别和回收无用的日志记录?

​ 本文通过两种方案来解决这些问题。第一种解决方案是纯软件解决方案,与现有硬件兼容。它采用了新颖的基于紧凑日志格式和后台内存回收的推测日志管理机制,以及基于紧凑日志格式的故障恢复协议。该方案的概念验证实现比当前最先进的就地解决方案KaminoTx[51]实现了约2.7倍的加速。但是,仍然存在两个关键缺陷:(1)内存空间开销,为持久性内存空间的3倍;(2)依赖于专用的后台内存回收线程。

​ 为了在保持性能的同时减少内存空间开销,本文提出了第二种解决方案,**为混合日志模型提供了一种新的架构。该模型允许软件对热数据(即频繁更新的)使用推测日志记录,**对冷数据使用撤销日志记录。通过控制数据热度的阈值,用户可以对推测日志区域的大小设置任意的界限。该混合日志模型还支持软硬件协同设计的日志回收方案。**日志回收在前台运行,因此不需要专门的回收线程。**这允许软件用一些指令回收推测日志记录,而不会阻塞其他正在运行的线程。

具体来说,推测日志记录按时间顺序进行排序,并划分为epoch。为跟踪日志记录创建的时间,需要向私有TLB项添加一些状态位。通过简单地用新指令清除与给定epoch相关联的比特位,硬件可以轻松地回收该epoch中创建的所有日志记录。

总之,这些解决方案为当前基于撤销日志的持久事务提供了一种替代方法,即推测的持久内存事务(SpecPMT)。

SpecPMT实现了持久性内存事务的所有理想属性,同时保持较低的事务开销**:(1)它使用了就地数据更新;(2)消除了日志记录和数据更新之间的栅栏;(3)不阻塞数据持久化的事务提交;(4)支持纯软件或轻量级硬件实现;(5)它与数据结构无关,而不是特定于数据结构**

本工作的贡献有:

1、提出基于推测日志的方法,在移除栅栏的基础上,大幅减少持久性事务的崩溃一致性开销。

2、提出了一种支持软件推测日志的SpecPMT变种,它使用了一种新颖的日志组织、恢复协议和日志回收

3、提出了一种基于SpecPMT的硬件支持的推测日志机制,该机制使用了一种新的混合日志机制和基于epoch的日志回收机制,在不需要后台回收线程的情况下,限制了内存空间开销。

4、对SpecPMT的有效性进行了实证评估

2、背景

​ 持久性内存指的是使用NVM存储数据结构,以便在进程生命周期之后仍然可以访问这些数据结构,甚至在崩溃或系统启动时也可以。本文假设Intel Optane DC持久性内存硬件模型。

​ 管理软件中的持久性需要硬件支持,允许软件指定何时应该持久化数据。内存数据持久化的另一个问题是需要对持久化数据进行系统抽象。因为持久化数据必须在系统电源周期之间存在,所以应用程序必须能够找到在当前电源周期之前创建的持久数据。

​ 持久化内存事务保证事务中的写入在恢复时是原子性

3、推测日志

​ SpecPMT 是一种对undo日志的优化,通过摊销持久性内存排序指令来提高其性能。

​ 经典的undo日志记录确保了正确的恢复:(1)存在一个记录旧值的日志条目,(2)这个日志条目在位置被修改之前就持久化了。遵循这些步骤意味着,如果事务被中断或电源丢失,被失败的事务修改的任何位置都可以回滚到它们的原始值

​ 但它们并不需要这样做,而且对于持久内存,更早地迁移它们具有性能优势。

SpecPMT采用了一种基于上述观察的新策略,为每个数据保持推测日志记录。为了兼容性,SpecPMT保留了经典的持久内存事务api[59,66],如图3所示,将常规日志记录替换为推测日志记录(spog)。示例代码删除了恢复API,因为只有在崩溃后恢复时才需要它。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请站在我身后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值