NBTree: a Lock-free PM-friendly Persistent B -Tree for eADR-enab(12)
Cooperative SMO.在NBTree中,SMO过程中对叶子节点的并发插入采用协作式SMO。当插入线程遇到具有in-fight SMO的叶子时,它将帮助完成它的SMO,然后继续。NBTree使用原子原语(如CAS)来协调多个SMO线程,以确保只有最快的修改是可见的。通过这种方式,即使某个SMO线程被挂起,NBTree也可以保证SMO以最快的速度前进,而不是等待SMO完成。具体来说,在复制阶段,多个SMO线程分别准备新节点,并使用CAS原语以原子方式安装copy_ptr。在sync阶段,还可以使用CAS原语协作完成每个键值项的同步。在链接阶段,NBTree使用CAS将新的叶子节点链接到元数据层和键值层。然后,NBTree使用HTM以原子方式更新父节点并设置flag.link。
图3 The procedure of three-phase SMO and sync-onwrite when updates and deletions operate on an SMO leaf.