NVM数据结构优化之四:LB+-Trees: Optimizing Persistent Index Performance on3DXPoint Memory

研究目的

减少NVM(3DXPoint Memory)写,持久化数据的开销。

研究背景

现有的部分B+树研究使用的是仿真NVM环境,这样的方式下的设计与真实的NVM硬件的一些特性是不能做到良好匹配的,已有的基于NVM的B+树优化的数据结构在节点分裂时仍然需要采用log,放大了NVM地写。此外,之前地实验很少涉及到对硬件的特性分析与验证,论文基于3DXPoint Memory进行了实验分析,并针对其特性进行了数据结构设计。

研究概述

1、利用3DXPoint Memory在缓存行上数据的移动几乎不影响NVM的写性能,持久化刷新操作是以缓存行为单位进行刷新,因此尽可能的使得每次刷新的缓存行中的脏数据越多越好,从而减少持久化引起的刷新指令引起的开销。论文将叶子节点划分为4个缓存行大小,当lin0的存满后,下一次将要跨到下一缓存行时,就将lin0的数据移到最近的空的缓存行(依次lin1、lin2、lin3),因此,使得下一次插入时只需要刷新lin0,而不需要刷新lin1和lin0(插入节点后需要修改存在lin0中的头部信息),本来需要进行两次缓存行刷新变为了只需要一次。

2、将节点的大小设置为256字节的倍数,如此有利于充分利用3DXPoint Memory的带宽

3、节点中添加alt字段,节点尾部添加两个指针,使用在节点的分裂过程中,以此来使得节点在分裂时不再需要log。

关键技术

根据对3DXPoint Memory硬件的性能分析,得出了3DXPoint Memory一些明显的特征:

特性一、在cache line上的修改不会影响写性能

特性二、3DXPoint Memory内部数据访问的粒度是256字节

特性三、3DXPoint Memory随着一个程序负载集大小的增加而性能降低

发现当3DXPoint Memory程序数据访问的大小达到其总内存的1/8或更多则性能会比较稳定。

根据以上的3DXPoint Memory的特性,设计了如下的LB+-tree:

1、节点大小为256字节的倍数

header是由16字节组成,每个line是64字节,lock字段用于并发控制,alt字段用于指示节点尾部哪一个指针在被使用。

2、减少缓存行的刷新

尽可能刷新包含头部信息的缓存行,减少持久化所需要的开销(调用刷新指令的次数),因为刷新line0只需要调用一次指令,而刷新其它line则需要调用两次刷新指令(因为头部信息在line0,所以除去刷新line0,刷新其它line都需要同时刷新line0和其所在line)

3、无日志方式的节点分裂

 4、并发控制

采用HTM+lock来进行并发控制,当节点在进行删除或是插入操作时,将会把lock字段置1,使得其它操作无法访问当前节点,直到lock被置为0.

5、Multi-256B Nodes

一个节点由多个块组成,每一个快的大小都是256字节,每一个块都和第一个块一样,具有header,即分布式头部,将元数据分散到每一个块中,以达到满足设计的通过移动缓存行数据达到减少刷新指令数量。除第一个块由尾指针外,2~m块尾部是一个可选择的header,alt变为表示其是否使用。

 

6、节点融合

当节点由于删除导致节点小于M/2时,本文并不会进行节点融合,而是直接保持此状态。也就是节点并不需要融合操作。

实验环境

3DXPoint Memory

研究总结

作者虽然清晰的讲解了单个256字节节点的设计,但是在Multi-256B Nodes的具体设计是模糊的,而该点也可以说是很重要的一点。

改论文的结构设计和想法是极其巧妙的,但是由于其单独针对的是3DXPoint Memory,可能在其它的NVM上会有一些的不适应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值