首页> 中国专利> 一种融合数据传输和存储的非易失内存缓存方法

一种融合数据传输和存储的非易失内存缓存方法

摘要

本发明涉及一种融合数据传输和存储的非易失内存缓存方法,通过RDMA技术,在网络传输过程中直接访问服务端节点的非易失内存数据,基于数据请求以及缓存资源与硬盘空间的映射关系,执行相应缓存操作。与现有技术相比,本发明在整个存储系统访问过程中,零内存拷贝;建立读/写分离的缓存体系,读缓存采用线性映射方式,写缓存采用日志方式;在缓存脏数据交换到后端硬盘时,可以去除重复写入请求,排序、合并随机写入请求,具有高速、高性能的优点。

著录项

  • 公开/公告号CN113312300A

    专利类型发明专利

  • 公开/公告日2021-08-27

    原文格式PDF

  • 申请/专利号CN202110670041.1

  • 发明设计人 康亮;童飞文;马名;马可;

    申请日2021-06-17

  • 分类号G06F15/173(20060101);G06F3/06(20060101);

  • 代理机构31225 上海科盛知识产权代理有限公司;

  • 代理人翁惠瑜

  • 地址 200131 上海市青浦区清河湾路1200号1008室

  • 入库时间 2023-06-19 12:22:51

说明书

技术领域

本发明涉及一种数据存储方法,尤其是涉及一种融合数据传输和存储的非易失内存缓存方法。

背景技术

非易失内存(NVRAM)是一种在硬件和软件上均拥有内存访问特性的非易失存储介质,其在硬件上位于内存插槽,软件上支持内存地址访问方式。当前,单位容量的NVRAM的价格和性能介于内存和固态硬盘(SSD)之间,单根NVRAM容量也介于内存和SSD之间;在当前服务器中,受限于内存插槽数量、价格等因素限制,NVRAM容量不可能很大,所以其作为硬盘(尤其是SSD)的缓存来使用比较合适。

存储设备或者系统均会保证一定程度上的原子操作,以避免故障时候数据损坏。块设备的原子操作颗粒度一般为一个扇区(512字节),而非易失内存设备的原子操作颗粒度一般为一个CPU cache line长度(8字节),所以非易失内存作为存储至少需要通过软件模拟,保证扇区单位的原子操作。

当前,非易失缓存软件系统一般是构建在块设备系统之上,需要通过块设备接口访问缓存介质,即需要把非易失内存模拟为一个块设备,再通过内存拷贝的方式实现数据访问,该种方式会带来以下缺点:

1、块设备接口需要运行通用块设备层的程序,增加NVRAM访问延时;

2、远程直接内存访问(RDMA)传输技术无法直接访问块设备,需要通过操作系统内存中转;

3、内存和NVRAM之间数据传输,需要通过CPU进行拷贝,耗费大量CPU资源,存储系统响应速度慢;

4、NVRAM模拟成块设备,需要额外消耗CPU资源来解决扇区单位的原子操作问题,且该种方法只能保证写入请求中每个扇区的原子性,无法保证整个写入请求的原子性;

5、现有缓存技术一般使用读/写一体的缓存体系,缓存颗粒度比较小,无法进行有效数据合并,大量数据交换会导致硬盘成为性能瓶颈;

6、读/写一体的缓存系统,无法保证数据写入请求的完整性,存在写入请求部分更新的情况。

发明内容

本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种高速、高性能的融合数据传输和存储的非易失内存缓存方法,可以把传输协议融合到数据存储中,做到缓存系统零内存拷贝,保证写入请求的原子性,最大化的减少系统延时,降低CPU资源消耗,发挥出NVRAM的内存特点,从而提高缓存系统性能。

本发明的目的可以通过以下技术方案来实现:

一种融合数据传输和存储的非易失内存缓存方法,通过RDMA技术,在网络传输过程中直接访问服务端节点的非易失内存数据,基于数据请求以及缓存资源与硬盘空间的映射关系,执行相应缓存操作。

进一步地,所述非易失内存对应有一缓存资源池,

所述非易失内存被划分为数据区、元数据区和索引区,所述数据区具有多个用于存储缓存数据的数据块chunk,元数据区为每个chunk创建2个元数据块meta0和meta1,索引区为每个chunk创建一个有效索引index,

一个四元组(index,meta0,meta1,chunk)构成一个缓存数据资源,非易失内存中所有四元组组成所述缓存资源池。

进一步地,采用原子更新方法进行所述数据区的元数据更新。

进一步地,所述硬盘空间中,每个硬盘分配有一唯一硬盘ID,根据所述数据块的大小,按照线性映射方式,将每个硬盘划分为若干块逻辑空间,基于逻辑空间偏移构建硬盘Hashtable,每个逻辑空间至少有一个缓存数据块。

进一步地,所述数据请求至少包含一个三元组(ID,offset,length),基于ID表示硬盘ID,offset表示访问硬盘位置偏移,length表示访问硬盘数据长度,

在接收到所述数据请求后,基于所述硬盘ID及对应的硬盘Hashtable,查询或创建所需的逻辑空间,查询其关联的非易失内存数据块,映射数据到缓存数据块,计算数据请求位于缓存数据块中的内存地址,建立RDMA操作,直接读/写非易失内存数据块上内存地址。

进一步地,所述数据请求为读请求时,执行以下缓存步骤:

101)判断所需的逻辑空间中是否存在相应的读缓存数据块R

102)根据R

103)判断当前读请求所需缓存区域在bitmap中是否包含无效数据,若是,则采用分段线性映射数据加载方式加载数据段到R

104)计算当前读请求在R

进一步地,所述分段线性映射数据加载方式具体为:

根据读请求的offset和length计算出逻辑空间中所需位图的有效位,结合读缓存数据块中初始化位图,计算所需加载的数据段位图。

进一步地,所述数据请求为写请求时,执行以下缓存步骤:

201)判断所需的逻辑空间中是否存在相应的写缓存数据块Wchunk,若是,则执行步骤202),若否,则向缓存资源池申请一个缓存数据资源,构建写缓存数据块Wchunk,在对应的元数据中记录硬盘ID、逻辑空间偏移和全局唯一ID,所述全局唯一ID基于缓存池分配序列ID实现;

202)根据当前写请求中的length,计算写缓存数据块Wchunk剩余空间是否满足以日志写入方式追加该写请求,若是,则执行步骤204),若否,则执行步骤203);

203)标记当前写缓存数据块Wchunk为Schunk,立即再次向缓存资源池申请一个缓存数据资源作为Wchunk,同时启动后台线程,将Schunk中数据同步到硬盘,返回步骤202);

204)通过日志写入方式,计算写请求所需追加数据地址,然后使用RDMA直接写入该内存地址。

进一步地,所述将Schunk中数据同步到硬盘具体为:

1a)在逻辑空间内,创建线性地址映射表;

1b)通过检索、校验写缓存数据块上写请求日志头部WLH中数据,确定日志写入数据;

1c)按照日志顺序,把日志数据地址映射到线性地址映射表,其中后写入日志覆盖先写入日志地址空间;

1d)按照线性地址映射表中有效地址顺序,合并更新硬盘数据。

进一步地,所述日志写入方式中,写请求按照日志方式写入缓存数据块,每个日志分为写请求日志头部WLH和写请求数据DATA两部分,具体为:

2a)追加写请求日志头部WLH,其中写请求状态标记为正在进行;

2b)追加写请求数据DATA;

2c)修改WLH中写请求状态标记为完成;

2d)更新WLH完整性校验值。

与现有技术相比,本发明具有以下有益效果:

(1)本发明通过RDMA技术,在网络传输过程中直接访问服务端节点的非易失内存数据,最大化利用了非易失内存的内存特性,减少了不必要的软件栈开销,较少存储系统延时,在整个存储系统访问过程中,零内存拷贝。

(2)本发明结合了RDMA技术,整个缓存系统中数据访问均为零内存拷贝,极大的减少了CPU资源消耗。

(3)本发明采用读/写分离的缓存设计,可以按照不同方式访问读/写缓存数据,读缓存采用分段线性映射,写缓存采用日志追加方式,所以在加载硬盘数据时,可以按需加载,较少无效数据加载;在写请求时,系统发生异常,可以保证整个写请求的原子性。

(4)在缓存脏数据交换到后端硬盘时,可以去除重复写入请求,排序、合并随机写入请求。

附图说明

图1为本发明原理示意图;

图2为本发明的非易失内存数据区分布图;

图3为本发明的元数据更新图;

图4为本发明的缓存资源映射图;

图5为本发明的数据分段加载图;

图6为本发明的数据同步图。

具体实施方式

下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

本实施例提供一种融合数据传输和存储的非易失内存缓存方法,如图1所示,融合数据传输层和存储层,通过远程直接内存访问RDMA技术,在网络传输过程中直接访问服务端节点的数据,基于数据请求以及缓存资源与硬盘空间的映射关系,执行相应缓存操作。

该方法支持缓存数据分段加载,支持缓存数据排序、合并换出,具有以下几个关键技术:

1)创建缓存资源池

格式化非易失内存,如图2所示,非易失内存被划分为数据区、元数据区和索引区,其中,数据区划分为同等固定大小的数据块(chunk),这些chunk作为缓存分配的基本单元;元数据区用于存储数据区各数据块元数据,为保证元数据事务性更新,需为每个数据块在元数据区分配两个元数据空间,即为每个chunk的创建2个元数据块(meta0和meta1),一个有效,另一个无效;索引区用于保存元数据区有效性索引,为每个chunk创建一个有效索引(index),其大小正好为非易失内存原子颗粒度大小,记录元数据区中合法有效的元数据块索引。

基于上述划分可以获得四元组(index,meta0,meta1,chunk),一个四元组表示一个缓存数据资源,非易失内存中所有这些四元组组成一个缓存资源池。

如图2所示,在元数据区,每个chunk都有两个元数据对应(meta0、meta1),如图3所示chunk的元数据更新时,不覆盖有效元数据块,而是写入无效元数据块,然后修改索引区指向新写入的元数据块。由于索引区中索引均为原子操作,所以元数据更新可以保证原子性。

2)构建缓存资源到硬盘空间映射

为每个硬盘分配缓存系统内唯一ID,按照硬盘ID把所有硬盘组织成一个红黑树。

按照数据块chunk的大小,采用线性映射方式,把硬盘划分成若干块逻辑空间,每个逻辑空间管理其所分配的不定量NVRAM数据块,逻辑空间ID为硬盘ID和逻辑空间所在硬盘内偏移。

根据读写请求,动态创建、分配物理资源到逻辑空间,把逻辑空间在硬盘中的偏移作为Key,为每个硬盘构建Hashtable,用于查询逻辑空间信息。

根据逻辑空间的读、写请求,为每个逻辑空间分配不同的NVRAM作为缓存数据块,分配到的NVRAM数据块,使用其NVRAM内存物理地址作为RDMA内存访问地址,进行数据传输。此时传输行为,也为NVRAM内存访问操作。

NVRAM只读缓存数据块,其元数据区包含有64-bit有效位标记,可以按照读取请求需要的数据量加载所需数据,并标记其有效性。NVRAM只写缓存数据块采用日志方式,逻辑空间数据块换出时,对该空间所有写入操作进行去重、排序、合并,然后再换出到硬盘。

如图4所示,每个逻辑空间可以关联0-1个读缓存数据块和0-2个写缓存数据块,但是每个逻辑空间至少有一个缓存数据块。

3)分段线性映射数据加载

若数据请求为读请求,则从缓存资源池中分配一个只读数据块,使用线性地址映射方式加载硬盘数据。

读缓存数据块被分为若干数据段,在读缓存数据块所对应的元数据区中,存储位图,用于标识该读缓存数据块上有效数据,读请求根据读缓存数据块上的位图,按照线性映射的方式计算,读请求需要加载的数据段。

如图5所示,读请求根据offset和length可计算出逻辑空间中所需位图的有效位,然后结合读缓存数据块中位图,计算出所需加载的数据段位图。

load bitmap=read bitmap&(~valid bitmap)

然后根据load bitmap从硬盘加载对应位置的数据,更新valid bitmap。

4)日志写入方式

若数据请求为写请求,则从缓存资源池中分配1-2个只写数据块,使用日志方式存储写请求数据。

如图4所示,写请求按照日志方式写入缓存数据块,每个日志分为写请求日志头部(WLH)和写请求数据(DATA)两部分;其中WLH中包含数据请求三元组(ID,offset,length)、所在chunk的全局唯一ID、写请求状态和WLH完整性校验值。

日志写入过程可分为以下步骤;

a)追加写请求日志头部(WLH),其中写请求状态标记为正在进行;

b)追加写请求数据(DATA);

c)修改WLH中写请求状态标记为完成;

d)更新WLH完整性校验值。

5)数据同步

如图6所示,本发明使用线性地址映射表,合并、排序更新硬盘数据。其主要过程如下:

a)在逻辑空间内,创建线性地址映射表;

b)通过检索、校验写缓存数据块上WLH中数据,确定日志写入数据;

c)按照日志顺序,把日志数据地址映射到线性地址映射表,其中后写入日志覆盖先写入日志地址空间;

d)按照线性地址映射表中有效地址顺序,合并更新硬盘数据。

6)数据请求访问

限制客户端数据请求的最大长度,读请求长度、写请求长度加写请求日志数据头部长度需要小于等于缓存数据块长度。通过数据请求访问,可以查询或者创建逻辑空间。

每个数据请求,都至少包含一个三元组(ID,offset,length),分别为硬盘ID,访问硬盘位置偏移,以及访问硬盘数据长度。通过ID,基于硬盘ID红黑树数据,可以找到所需访问的硬盘。再按照每个硬盘上创建的Hashtable,可以找到该数据请求所在的逻辑空间。如果该逻辑空间不存在,则创建一个空逻辑空间插入Hashtable。

基于获取的逻辑空间,查询其关联的非易失内存数据块,映射数据到缓存数据块,计算数据请求位于缓存数据块中的内存地址,建立RDMA操作,客户端节点直接读/写该非易失内存数据块上内存地址。

7)读请求访问

数据请求为读请求时,按照6)中所述的数据请求访问,找到或者创建一个读请求所对应的逻辑空间。

如图4所示,如果该逻辑空间中不存在相应的读缓存数据块(R

如果该逻辑空间中存在相应的R

如果当前读请求所需缓存区域在bitmap中含无效数据,则采用如3)所述的分段线性映射数据加载方法加载数据段到R

如果当前读请求所需缓存区域在bitmap中均为有效数据,则计算当前读请求在R

8)写请求访问

数据请求为写请求时,按照6)中所述的数据请求访问,找到或者创建一个写请求所对应的逻辑空间。

如图4所示,如果该逻辑空间中不存在相应的写缓存数据块(Wchunk),则向缓存资源池申请一个缓存数据资源,在该Wchunk元数据中记录硬盘ID、逻辑空间偏移和全局唯一ID。该写缓存全局唯一ID,可用缓存池分配序列ID实现,即在缓存资源池上每次缓存资源分配,递增该序列ID。

如果该逻辑空间中存在相应的Wchunk,则根据当前写请求长度,计算写缓存数据块剩余空间是否满足日志方式追加该写请求。计算方法为写请求日志头部(WLH)长度加上写请求数据长度小于或等于Wchunk剩余空间。

如果当前Wchunk空间不足,则标记其为Schunk,立即再次向缓存资源池申请一个缓存数据资源作为Wchunk。同时启动后台线程,采用如4)所述的数据同步方法,把Schunk中数据同步到硬盘。

如果Wchunk空间足够,则立即启动如4)所述的日志写入方式,计算写请求所需追加数据地址,然后使用RDMA直接写入该内存地址。

上述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号