Page Differential Logging: 页差分读写技术(二)

写在前面

最近在阅读到一篇2016年ASPLOS会议论文NVWAL:Exploiting NVRAM in Write-Ahead Logging时,发现它提出使用了differential logging这项技术。我对此感到十分好奇,便google了一下这个术语,发现它的原型是在2010年SIGMOD的一篇文章上Page-Differential Logging: An Efficient and DBMS-independent Approach for Storing Data into Flash Memory

接下来我想就differential logging的起源和特点来简单地探讨一番,并试图说明这一技术在NVM上应用的可行性。

背景介绍

PDL详解


故障恢复

关于使用了page differential logging技术的故障恢复,我们需要注意两个问题:第一,故障发生时什么会被影响?第二,如何恢复被影响的数据?

结合PDL详解中的数据结构部分,我们知道,write buffer,physical page mapping table (ppmt)和valid differential count table(vdct)都是存储在内存中的。因此一旦发生断电或系统重启,ppmt和vdct结构都会丢失。

而我们已经知道,PDL算法是利用以上两个结构来定位base_page和differential_page,从而进行读或者写操作。

因此故障恢复,最首要的任务就是重新建立ppmt和vdct两张索引表。那么如何重建呢?我们来看研究者给出的算法描述:

这里写图片描述

由于这里比较重要,我们就耐着性子一行一行来分析它的伪代码:

首先,初始化ppmt和vdct (如何初始化是个问题);

然后,依次扫描整个Flash闪存的所有页。对于每一页都实施以下操作:

第一步,读取该页的spare区域,判断是否为过期页,若过期则开始扫描下一页,否则进行下一步;
第二步,判断该页r是base_page还是differential_page,通过数据结构中的type可以得到其类型。如果是base_page,则转到第三步,如果是differential_page,则转到第五步;
第三步,这里是雪崩的!我们结合算法来看,如果是base_page,那么就将当前物理页id赋值给pid并通过ppmt找到该pid对应的base_page和differential_page。等等,我们的ppmt结构的所有数据应该都已经丢失了啊,怎么还能用它去寻找数据页呢?貌似没有保存ppmt数据结构到flash持久存储的操作吧?因此,这里又是一个BUG。算了我们继续。
第四步,由于当前存在两个base_page(这里已经比较混乱了),需要比较谁的内容是最新的,这就要用到时间戳。通过时间戳比较可得最近更新的base_page,再比较base_page和对应的differential_page的时间戳,确定二者是否是一致的。如不一致,应当删去differential_page中的内容,设为空;
第五步,如果页r是differential_page,那么对于r中的每一个差分数据条目d,都去寻找对应的base_page以及之前可能存在的differential_page比较时间戳,决定保留最新的差分数据。

到这里这个算法基本就走完了,但我们的疑问并没有结束。
1. 两张表的初始化过程是如何实现的?这里研究者语焉不详。
2. 两张表即使可以初始化,但能够存储pid与物理页,差分数据页的映射关系吗?
3. 如果2可以实现,那么探讨后面的时间戳又有什么意义。

归纳一下,就是该算法的目的是为了恢复已经丢失的ppmt和vdct表。但是在恢复过程中,要借助ppmt和vdct的映射关系。这怎么算?恢复自己还要用到自己!!!

这篇论文真是又刷新了我的科研观。

总结与思考

总而言之,我的想法就是结合之前提到的NVM(非易失内存),实现differential logging技术。为什么会想到这一点呢?因为NVM与Flash有比较相似的地方,比如说都可以提供大容量持久存储空间,比如说都存在写次数有限会写穿的问题。

NVM比Flash好的地方在于NVM可以字节寻址,也就是说可以进行非常细粒度的操作。我们已经介绍过,闪存在写数据时是要先擦除数据的,而擦除是以块为单位操作的。NVM完全不需要有这样的顾虑,一字节一字节地寻址写入都是没有问题的(然而现在科研领域大家都是在使用模拟器来做,直白地说就是将DRAM开辟出来一块空间,然后通过延迟设置带宽设置等模拟成NVM)。

如果引进差分读写技术,对NVM的写操作就会减少许多开销,因为我们不需要把整页的数据写到NVM中了,这样所产生的第二个好处就是延长了NVM的寿命。

但我们也知道,那篇论文存在至少两处bug。如果要真正地在NVM上实现差分读写,构造好清晰准确易用的代码,还是挺具有挑战性的。

关于故障恢复,我还想讲一点。如果是我来做故障恢复,那么ppmt和vdct两张表肯定是要周期地写入到stable storage中去的,这样才有可能恢复出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值