DUDETM: Building Durable Transactions with Decoupling for Persistent Memory

DUDETM: Building Durable Transactions with Decoupling for Persistent Memory

motivation:

在HTM中不能使用clflush等持久化函数。无法保证PM上数据的一致性。在STM中即使可以实现下刷也会面临:1.undo logging双写问题,并且多个cflush和mfence会造成不小开销。2.redo logging数据重定向问题。

highlights:

1.将事务的ACID特性解耦合,其中ACI为一部分,D为一部分。其中ACI特性可以通过HTM(或STM)进行保证。D通过logging进行保证。

2.同时利用redo logging和undo logging的优点(redo优点: 下刷以及内存屏障指令开销由整个事务分摊。undo优点:就地更新)。将PM映射到DRAM上形成shadow,事务的执行仅在shadow上且DRAM上的值不会下刷,所以可以进行就地更新,省去了redo log的数据重定向开销。

3.异步持久化。由于1中的解耦合,DRAM上的事务执行完毕后,不需要等待日志持久化的完成。因此不需要等待下刷的时间,从而增加了并发度。

design:

image-20230424161307489

将整个流程分解成三个阶段:

1.perform阶段。即DRAM事务执行部分。可以直接就地更新,并用STM或HTM保证事务的ACI特性。在perform阶段形成redo log。

2.persist阶段。将perform阶段形成的redo log进行持久性下刷。该部分不需要事务(HTM/STM)参与。当该阶段完成时,即认为整个事务已经完成,因为已经可以保证PM中数据的一致性。

3.reproduce阶段。将redo log的更改反应到PM上的数据上。

drawbacks:

1.对HTM有修改。 2.由于需要shadow memory,所以性能受到DRAM大小限制。现在PM的大小远远超过DRAM,如果需要部署DudeTM,则需要page swap机制。下图为PM设置为1GB,DRAM大小为横坐标,纵坐标为DudeTM吞吐量测试结果。可以看到PM:DRAM=1:1时到PM:DRAM=16:1时,吞吐量下降两倍多。

image-20230424162533998