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:
将整个流程分解成三个阶段:
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时,吞吐量下降两倍多。