一种非易失性缓存实现方法及装置制造方法

文档序号:6639683阅读:447来源:国知局
一种非易失性缓存实现方法及装置制造方法
【专利摘要】本发明公开了一种非易失性缓存实现方法及装置,该非易失性缓存实现方法为:首先将物理的闪存存储资源虚拟化为闪存存储池,然后在所述存储池上创建三种逻辑存储单元,大缓存单元、小缓存单元和写镜像单元,所述大缓存单元用于提供常规的缓存服务,所述小缓存单元用于提供随机写操作的加速服务和读操作的数据暂存服务,所述写镜像单元用于为大缓存和小缓存中的脏数据提供冗余备份保护功能。本发明的非易失性缓存实现方法避免了产生巨大的缓存状态表问题,也避免了严重影响写性能的冗余备份方式,能够做到超大容量和超高性能,从而显著提高了集中控制设备的读写性能。
【专利说明】一种非易失性缓存实现方法及装置

【技术领域】
[0001]本发明涉及存储【技术领域】,特别是涉及一种应用于集中分布式存储架构的集中控制设备中,提高集中控制设备及整个存储系统的存储性能的非易失性缓存实现方法及装置。

【背景技术】
[0002]随着半导体技术的发展,高速非易失性存储器件(例如闪存)的存储密度越来越高,目前已经作为数据访问加速设备在数据中心中被广泛使用。与机械磁盘相比,非易失性存储器件(例如闪存)具有更快的随机访问速度;与DRAM相比,非易失性存储器件(例如闪存)能够在电源关闭后继续保持数据,并且具有更大的存储密度。
[0003]闪存的高存储密度,非易失性,以及高访问速度的特点,使得闪存在存储系统中得到广泛的应用,其中一种应用就是作为存储系统的加速设备。闪存作为存储系统的加速设备,也有多种实现形式。有闪存加速卡,闪存加速存储层,以及闪存加速缓存。
[0004]闪存作为加速缓存应用时,需要记录缓存的每一个缓存行(Cache Line)的信息。例如缓存对象的地址,缓存的状态(脏,无效,冻结,清除中,装载中等),以及缓存行的老化程度等。缓存行的个数和闪存缓存的大小和10请求的颗粒度有关。
[0005]闪存作为加速缓存应用时,还需要保证闪存缓存和后端连接的存储系统(例如分布式存储集群203)之间的数据一致性,即闪存缓存中的数据要和后端连接的存储系统中的数据保持一致。
[0006]现有的闪存缓存方法中,有仅作为读缓存使用的。有作为读写缓存使用的,但是对写操作的加速效果有限,原因是为了保证数据的可靠性,而使用了对写性能影响很大的冗余备份技术。另一方面,现有的闪存缓存实现中,闪存的容量并没有达到百TB级别。
[0007]以上【背景技术】内容的公开仅用于辅助理解本发明的发明构思及技术方案,其并不必然属于本专利申请的现有技术,在没有明确的证据表明上述内容在本专利申请的申请日已经公开的情况下,上述【背景技术】不应当用于评价本申请的新颖性和创造性。


【发明内容】

[0008]本发明的目的在于提出一种非易失性缓存实现方法,以解决上述现有技术存在的闪存缓存中存在的缓存行表项管理和数据一致性问题导致的缓存状态表巨大及控制设备的读写性能差的技术问题。
[0009]为此,本发明提出一种非易失性缓存实现方法,首先将物理的闪存存储资源虚拟化为闪存存储池,然后在所述存储池上创建三种逻辑存储单元,大缓存单元、小缓存单元和写镜像单元,所述大缓存单元用于提供常规的缓存服务,所述小缓存单元用于提供随机写操作的加速服务和读操作的数据暂存服务,所述写镜像单元用于为大缓存单元和小缓存单元中的脏数据提供冗余备份保护功能;
[0010]数据写入时,如该写操作命中了小缓存单元的缓存行,则把数据写入小缓存单元,如未命中小缓存单元但命中了大缓存单元的缓存行,则把数据写入大缓存单元,如大缓存单元和小缓存单元都未命中且加速标识有效,则将数据写入小缓存单元,否则数据不写入闪存存储资源而直接写入后端存储集群;
[0011]数据读取时,如该读操作命中了小缓存单元的缓存行,则把小缓存单元中的数据返回,如未命中小缓存单元但是命中了大缓存单元的缓存行,则把大缓存单元中的数据返回,如大缓存单元和小缓存单元都未命中且加速标识有效,则从后端存储集群读取大缓存单元的缓存行对应大小的数据并装载到大缓存单元的缓存行,再把数据返回给前端数据申请单元,如大缓存单元和小缓存单元都未命中且加速标识无效但数据暂存标识有效,则从后端存储集群读取对应小缓存单元的缓存行数据并装载到小缓存单元的缓存行,再把数据返回给前端数据申请单元,否则从后端存储集群读取的数据不经过闪存存储资源而直接送给前端数据申请单元。
[0012]优选地,本发明的方法还可以具有如下技术特征:
[0013]所述大缓存单元、小缓存单元和写镜像单元的大小满足如下公式(Little_Size+Mirror_size)/Li 111e_granu1ar i ty+B i g_S i z e/B i g_granu1ar i ty< = available—DRAM_Size/entry_size,其中,Big_Size为大缓存单元的大小,Little_Size为小缓存单元的大小,Mirror_size为写镜像单元的大小,Little_granularity为小缓存单元缓存行的大小,Big_granularity为大缓存单元缓存行的大小,avai 1 ab 1 e_DRAM_Size是可用的存储缓存状态表的DRAM的大小,entry_size是缓存每个表项的大小。
[0014]所述写镜像单元由至少一个逻辑写镜像子单元组成,所述大缓存单元、小缓存单元分别由至少一个逻辑大缓存子单元、至少一个逻辑小缓存子单元组成。
[0015]所述物理的闪存存储资源包括两个以上物理托盘,所述大缓存单元、小缓存单元和写镜像单元均横跨所述两个以上物理托盘。
[0016]数据在写入所述大缓存单元、小缓存单元和写镜像单元时,所述大缓存单元的写入物理位置与所述写镜像单元的写入物理位置处于不同的所述物理托盘上,所述小缓存单元的写入物理位置与所述写镜像单元的写入物理位置亦处于不同的所述物理托盘上。
[0017]所述小缓存单元和写镜像单元的单个缓存行位于同一个物理托盘内或横跨两个以上物理托盘,所述大缓存单元的单个缓存行位于同一个物理托盘内或横跨两个以上物理托盘。
[0018]数据写入操作和数据读取操作落到哪个物理托盘按以下原则:当某个物理托盘损坏时,仅仅将原来映射到该物理托盘上的操作转移到其他的物理托盘上,而原来就映射到其他物理托盘上的读写操作维持映射关系不变。
[0019]所述大缓存单元的缓存行至少包括脏状态、干净状态和无效状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中无有效数据;当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态;当缓存处于脏状态时,只有收到缓存行清除请求时跳转为干净状态;当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到失效请求时跳转到无效状态。
[0020]所述小缓存单元的缓存行至少包括脏状态、干净状态、无效状态和冻结状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中没有有效数据,所述冻结状态表示当前缓存行处于冻结状态,只能被读取,不能被写入;当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态;当缓存处于脏状态时,收到缓存行清除请求时跳转为无效状态,收到移动请求时跳转为冻结状态;当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到读请求时跳转到无效状态;当缓存行处于冻结状态时,只有收到移动完成的返回时缓存行跳转到无效状态。
[0021]还包括守护单元,该守护单元用于在后台将写镜像单元中的脏数据清除到后端存储集群,以限制所述闪存存储资源中需做冗余备份的脏数据在预定的范围内。
[0022]所述冗余备份采用写镜像方式。
[0023]所述物理的闪存存储资源为闪存、相位存储器。
[0024]本发明还提出一种非易失性缓存实现装置,包括:闪存存储资源虚拟化单元,用于将物理的闪存存储资源虚拟化为闪存存储池;
[0025]逻辑存储单元创建单元,用于在所述存储池上创建三种逻辑存储单元,大缓存单元、小缓存单元和写镜像单元,所述大缓存单元用于提供常规的缓存服务,所述小缓存单元用于提供随机写操作的加速服务和读操作的数据暂存服务,所述写镜像单元用于为大缓存和小缓存中的脏数据提供冗余备份保护功能;
[0026]数据写入单元和数据读取单元;
[0027]所述数据写入单元进行数据写入时,如该写操作命中了小缓存单元的缓存行,则把数据写入小缓存单元,如未命中小缓存单元但命中了大缓存单元的缓存行,则把数据写入大缓存单元,如大缓存单元和小缓存单元都未命中且加速标识有效,则将数据写入小缓存单元,否则数据不写入闪存存储资源而直接写入后端存储集群;
[0028]所述数据读取单元进行数据读取时,如该读操作命中了小缓存单元的缓存行,则把小缓存单元中的数据返回,如未命中小缓存单元但是命中了大缓存单元的缓存行,则把大缓存单元中的数据返回,如大缓存单元和小缓存单元都未命中且加速标识有效,则从后端存储集群读取大缓存单元的缓存行对应大小的数据并装载到大缓存单元的缓存行,再把数据返回给前端数据申请单元,如大缓存单元和小缓存单元都未命中且加速标识无效但数据暂存标识有效,则从后端存储集群读取对应小缓存单元的缓存行数据并装载到小缓存单元的缓存行,再把数据返回给前端数据申请单元,否则从后端存储集群读取的数据不经过闪存存储资源而直接送给前端前端数据申请单元。
[0029]优选地,本发明的装置还可以具有如下技术特征:
[0030]所述大缓存单元、小缓存单元和写镜像单元的大小满足如下公式(Little_Size+Mirror_size)/Li 111e_granu1ar i ty+B i g_S i z e/B i g_granu1ar i ty< = available—DRAM_Size/entry_size,其中,Big_Size为大缓存单元的大小,Little_Size为小缓存单元的大小,Mirror_size为写镜像单元的大小,Little_granularity为小缓存单元缓存行的大小,Big_granularity为大缓存单元缓存行的大小,avai 1 ab 1 e_DRAM_Size是可用的存储缓存状态表的DRAM的大小,entry_size是缓存每个表项的大小。
[0031 ] 所述写镜像单元可由多个逻辑写镜像子单元构成。
[0032]所述物理的闪存存储资源包括两个以上物理托盘,所述大缓存单元、小缓存单元和写镜像单元均可以横跨所述两个以上物理托盘。
[0033]所述数据写入单元在将数据写入所述大缓存单元、小缓存单元和写镜像单元时,所述大缓存单元的写入物理位置与所述写镜像单元的写入物理位置处于不同的物理托盘上,所述小缓存单元的写入物理位置与所述写镜像单元的写入物理位置亦处于不同的物理托盘上。
[0034]所述小缓存单元和写镜像单元的单个缓存行位于同一个物理托盘内或横跨两个以上物理托盘,所述大缓存单元的单个缓存行位于同一个物理托盘内或横跨两个以上物理托盘。
[0035]所述数据写入单元和数据读取单元的操作落到哪个物理托盘按以下原则:当某个物理托盘损坏时,仅仅将原来映射到该物理托盘上的操作转移到其他的物理托盘上,而原来就映射到其他物理托盘上的读写操作维持映射关系不变。
[0036]所述大缓存单元的缓存行至少包括脏状态、干净状态和无效状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中无有效数据;当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态;当缓存处于脏状态时,只有收到缓存行清除请求时跳转为干净状态;当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到失效请求时跳转到无效状态。
[0037]所述小缓存单元的缓存行至少包括脏状态、干净状态、无效状态和冻结状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中没有有效数据,所述冻结状态表示当前缓存行处于冻结状态,只能被读取,不能被写入;当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态;当缓存处于脏状态时,收到缓存行清除请求时跳转为无效状态,收到移动请求时跳转为冻结状态;当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到读请求时跳转到无效状态;当缓存行处于冻结状态时,只有收到移动完成的返回时缓存行跳转到无效状态。
[0038]还包括守护单元,该守护单元用于在后台将写镜像单元中的脏数据清除到后端存储集群,以限制所述闪存存储资源中需做冗余备份的脏数据在预定的范围内。
[0039]所述冗余备份采用写镜像方式。
[0040]本发明与现有技术对比的有益效果包括:通过将物理的闪存存储资源虚拟化为闪存存储池,并在所述存储池上创建三种逻辑存储单元,以及所采用的数据写入和读取方法,本发明的非易失性缓存实现方法避免了产生巨大的缓存状态表问题,也避免了严重影响写性能的冗余备份方式,能够做到超大容量和超高性能,从而显著提高了集中控制设备的读写性能,并能够做到不间断提供存储服务。

【专利附图】

【附图说明】
[0041]图1是实施例1的闪存缓存的整体逻辑结构示意图;
[0042]图2是实施例1的集中分布式存储架构示意图;
[0043]图3是实施例1中闪存缓存的整体物理结构示意图;
[0044]图4是实施例1中大缓存单元的缓存行简化状态转换表;
[0045]图5是实施例1中小缓存单元的缓存行简化状态转换表;
[0046]图6是实施例1中闪存缓存写入操作流程图;
[0047]图7是实施例1中闪存缓存读取操作的一个流程图;
[0048]图8是实施例1中闪存缓存读取操作的又一个流程图;
[0049]图9是实施例1中闪存缓存逻辑模块和物理模块对应例图。

【具体实施方式】
[0050]本发明公开的缓存实现方法中的非易失性存储器件(即闪存存储资源)包括但不限于闪存、相位存储器等。本发明后端所接的存储系统包括但不限于图2中203给出的集中分布式存储系统(集群),以下仅是以集中分布式存储系统架构为例对本发明进行说明。
[0051]图2所示的集中分布式存储系统架构中,集中控制设备中的闪存缓存需要具备超大容量、超高性能(是指提供高1PS以及低延迟)的特点这是因为:集中控制设备连接的分布存储集群的存储容量为PB级别,相对应的缓存容量为上百TB级别的。但是,超大容量的闪存缓存在两个难题,即缓存行表项管理问题和数据一致性问题。
[0052]闪存作为缓存使用时,需要将整个存储资源按照一定的颗粒度分解为很多缓存行(cache line),针对每个缓存行,都需要记录这个缓存行的相关信息,如缓存行存放的数据来自哪里,缓存行当前的状态等,当闪存缓存的容量达到上百TB byte,例如200T Byte时,如果按照4K Byte的颗粒度来划分缓存行,则一共有200TB/4KB = 50 X 109个缓存行,假设每个缓存行需要16Byte来记录其状态,那么就一共需要800GByte的表来标识记录整个闪存缓存的状态,这是一个巨大的并且是不可承受的表。而4KByte的颗粒度是由虚拟机201决定的,即作为虚拟机201的块存储设备,存储数据的块访问单元就是4KByte的。这就会产生巨大的缓存状态表即缓存行表项管理问题。
[0053]闪存作为缓存使用时,还需要保证缓存中的数据和后端分布存储集群203数据的一致性,当缓存中的数据和分布存储集群203中的数据不一致时,需要对缓存中的数据做备份保护。目前被采用最多的保护方式就是RAID5/6,但是RAID5/6是以巨大的写性能牺牲为代价的。另外一种方式就是仅作为读缓存使用,任何的写操作都直接写入后端分布存储集群203,并且将闪存缓存中的相关数据置为无效状态,从而保证缓存中的数据永远和后端存储集群数据保持一致,避免对缓存中的数据进行备份保护,但是这样的实现方式只能针对部分读操作进行加速,并且不能对写操作进行加速。这就是数据一致性问题,及其带来的不利影响。
[0054]下面结合【具体实施方式】并对照附图对本发明作进一步详细说明。应该强调的是,下述说明仅仅是示例性的,而不是为了限制本发明的范围及其应用。
[0055]参照以下附图1-9,将描述非限制性和非排他性的实施例,其中相同的附图标记表示相同的部件,除非另外特别说明。
[0056]实施例一:
[0057]一种非易失性缓存实现方法,首先将物理的闪存存储资源虚拟化为闪存存储池,然后在所述存储池上创建三种逻辑存储单元,大缓存单元101、小缓存单元102和写镜像单元103,如图1所示。所述大缓存单元101用于提供常规的缓存服务,所述小缓存单元102用于提供随机写操作的加速服务和读操作的数据暂存服务,所述写镜像单元103用于为大缓存单元101和小缓存单元102中的脏数据提供冗余备份保护功能;数据写入时,如该写操作命中了小缓存单元102的缓存行,则把数据写入小缓存单元102,如未命中小缓存单元102但命中了大缓存单元101的缓存行,则把数据写入大缓存单元101,如大缓存单元101和小缓存单元102都未命中且加速标识有效,则将数据写入小缓存单元102,否则数据不写入闪存存储资源而直接写入后端存储集群203 ;数据读取时,如该读操作命中了小缓存单元102的缓存行,则把小缓存单元102中的数据返回,如未命中小缓存单元102但是命中了大缓存单元101的缓存行,则把大缓存单元101中的数据返回,如大缓存单元101和小缓存单元102都未命中且加速标识有效,则从后端存储集群读取大缓存单元101的缓存行对应大小的数据并装载到大缓存单元101的缓存行,再把数据返回给虚拟机201,如大缓存单元101和小缓存单元102都未命中且加速标识无效但数据暂存标识有效,则从后端存储集群读取对应小缓存单元102的缓存行数据并装载到小缓存单元102的缓存行,再把数据返回给虚拟机201,否则从后端存储集群读取的数据不经过闪存缓存100而直接送给前端虚拟机201。其中,所述虚拟机201作为前端数据申请单元的一种,仅为举例,本发明中的前端数据申请单元并不局限于此。
[0058]本实施例中,所述物理的闪存存储资源(或称闪存缓存100)的结构示意图如图3所示,每个托盘提供物理的闪存存储资源,并且内部采用相应的技术保证托盘内部的可靠性和稳定性。将物理闪存存储资源划分为大缓存单元101和小缓存单元102,可以有效的解决超大容量闪存缓存状态表过大的问题。
[0059]如图4所示,为大缓存单元的缓存行状态表举例,即大缓存单元的缓存行的状态包括但不限于图4中列出的状态。大缓存单元的缓存行简化后的基本状态有三个:脏状态,即缓存行中的数据和后端存储系统203中的数据不一致;干净状态,即缓存行中的数据和后端存储系统203中的数据一致;无效状态,即缓存行中没有有效数据。状态跳转过程为:当缓存行处于无效状态时,如果收到缓存行大小的数据写入请求时(例如来自虚拟机201的写入请求),缓存行跳转到脏状态,如果收到干净数据装载请求时(例如来自存储系统203的写入请求),缓存行跳转到干净状态;当缓存处于脏状态时,只有收到缓存行清除请求时,状态跳转为干净状态;当缓存行处于干净状态时,如果收到数据写入请求,缓存行跳转到脏状态,如果收到失效请求,缓存行跳转到无效状态。
[0060]如图5所示,为小缓存单元的缓存行状态表举例,即小缓存单元缓存行的状态包括但不限于图5中列出的状态。小缓存单元的缓存行简化后的基本状态有四个:脏状态,即缓存行中的数据和后端存储系统203中的数据不一致;干净状态,即缓存行中的数据和后端存储系统203中的数据一致;无效状态,即缓存行中没有有效数据;冻结状态,即当前缓存行处于冻结状态,只能被读取,不能被写入。状态跳转过程为:当缓存行处于无效状态时,如果收到数据写入请求时(例如来自虚拟机201的写入请求),缓存行跳转到脏状态,如果收到干净数据装载请求时(例如来自存储系统203的写入请求),缓存行跳转到干净状态;当缓存处于脏状态时,如果收到缓存行清除请求时,状态跳转为无效状态,如果收到移动请求,状态跳转为冻结状态;当缓存行处于干净状态时,如果收到数据写入请求,缓存行跳转到脏状态,如果收到读请求,缓存行跳转到无效状态;当缓存行处于冻结状态时,只有收到移动完成的返回,缓存行跳转到无效状态。
[0061 ] 大/小缓存单元不同的状态及跳转实现了加速读操作和写操作。本例中,大缓存单元和小缓存单元状态以及跳转的不同是因为它们的服务目的不同,对读写访问进行缓存加速时使用大缓存单兀还是小缓存单兀,取决于策略提不?目息以及大缓存单兀和小缓存单元的状态信息。策略提示信息包括但不限于服务等级、命中概率预测等。策略提示信息可以直接来自于集中控制设备202,也可以来自于虚拟机201。状态信息包括但不限于是否命中。本例中,大缓存单元用于提供常规的缓存服务,并可根据服务等级对不同的缓存行采用不同的老化策略;小缓存单元为首次没有命中大缓存单元的写操作提供缓存加速功能,并为没有命中大缓存单元的读操作提供数据暂存功能。
[0062]小缓存单元102的缓存行是小的,譬如是4KByte ;大缓存单元101的缓存行是大的,譬如是4Mbytes ;写镜像单元103的缓存行和小缓存单元102的缓存行可保持一致。具体的缓存行的大小可以根据实际情况进行调整,例如根据虚拟机201存储请求情况决定小缓存单元102的缓存行大小,根据后端分布存储集群203的实现情况决定大缓存单元101的缓存行大小。
[0063]而小缓存单元102、大缓存单元101和写镜像单元103的大小及相互关系,可以根据集中控制设备202中的DRAM资源确定。例如,需要将所有记录缓存状态的表都放入到集中控制设备202相应的DRAM资源中,那么就要满足(Little_Size+Mirror_size)/Little_granularity+Big_Size/Big_granularity< = available_DRAM_Size/entry_size。其中,Little_Size就是小缓存单元102的大小,Mirror_size是写镜像单元103的大小,Little_granularity是小缓存单元102的缓存行的大小,本实施例中小缓存单元102的缓存行大小与虚拟机201数据访问的块大小保持一致,Big_Size是大缓存单元101的大小,Big_granularity是大缓存单元101缓存行的大小,available_DRAM_Size是可用的存储缓存状态表的DRAM的大小,entry_size是缓存每个表项的大小。
[0064]写镜像单元103为大缓存单元101和小缓存单元102中的脏数据提供冗余备份保护功能。来自虚拟机201的数据在写入大缓存单元101或者小缓存单元102的同时,也被写入写镜像单元103中。
[0065]一个较佳的做法是,还进一步包括一个守护单元,其负责在后台将写镜像单元103中的脏数据清除到后端存储集群203。因为写镜像单元103仅备份大缓存单元101和小缓存单元102中的脏数据,并且有守护单元不断的将脏数据按预定的规则清除到后端存储集群203中,所以闪存缓存100中的脏数据是有限的,不需要对整个闪存缓存100中的所有数据做冗余备份。同时,备份策略采用写镜像的方式,一方面降低了冗余备份对性能的要求,另一方面实现了对所有写操作进行加速的效果。
[0066]如图8所示,为守护单元的处理流程,首先检测写镜像单元103的情况,当写镜像单元103为非空,守护单元从写镜像中取出一个脏数据及相关信息(例如地址信息),根据相关?目息查询闪存缓存状态表,获得闪存缓存状态。如果缓存状态显不命中小缓存单兀102的缓存行,没有命中大缓存单元101的缓存行,则直接将小缓存单元102的缓存行中的数据清除到后端存储集群203中。如果缓存状态显示既命中小缓存单元102的缓存行也命中大缓存单元101的缓存行,则首先将小缓存单元102的缓存行中的数据搬移到大缓存单元101的缓存行中,然后再将大缓存单元101的缓存行中的数据清除到后端存储集群203中。如果缓存状态显示没有命中小缓存单元102的缓存行,命中大缓存单元101的缓存行,并且大缓存单元101的缓存行含有脏数据,则将大缓存单元101的缓存行中的数据清除到后端存储集群203中。如果缓存状态显示没有命中小缓存单元102的缓存行,命中大缓存单元101的缓存行,并且大缓存单元101的缓存行中没有脏数据,则不需要对大/小缓存单元做任何操作。值得说明的是,此处所述仅为举例,本流程还可以根据状态信息的变化进行相应的修改。同时,写镜像单元103可由多个逻辑写镜像子单元构成,每个小写镜像子单元都有自己的守护程序。
[0067]缓存逻辑单元与物理单元(物理托盘)的对应关系示意如图9所示,每个逻辑单元、大缓存单元101、小缓存单元102、写镜像单元103都可以横跨所有物理托盘,这样做的好处是可提高各个物理托盘的并发程度,提高性能。写镜像逻辑单元可以被分割为多个小的写镜像逻辑子单元,例如每个托盘上有一个逻辑写镜像子单元,分割为多个小的逻辑写镜像子单元的好处是可以并发多个写镜像守护单元,提高将脏数据清除到后端存储集群的速度。
[0068]如图9所示,来自虚拟机201的新写入数据在写入大缓存单元101、小缓存单元102和写镜像单元103时,可按以下原则:写入大缓存单元或者小缓存单元的物理位置和写入写镜像单元103的物理位置不处于同一个物理托盘上。例如写入写镜像单元103的物理托盘序号可以是写入大缓存单元101或者小缓存单元102的物理托盘序号加一这样一个简单规则(不局限于此)。这样做的好处是可保证冗余备份和原数据处于不同的物理托盘上,在单个物理托盘损坏时,闪存缓存100仍然有可用的数据提供。图9中给出的大缓存的缓存行的大小为4MByte,但实际使用中,可以根据实际情况进行调整。
[0069]所述小缓存单元102和写镜像单元103的单个缓存行均可位于同一个物理托盘内或横跨两个以上物理托盘,所述大缓存单元的单个缓存行既可以横跨多个物理托盘,也可以位于同一个物理托盘内。本例中以大缓存单元的单个缓存行位于同一个物理托盘内为例进行说明,该方式更加便于实现单个物理托盘损坏时,仍然能够提供不间断服务的技术效果Ο
[0070]基于大缓存单元、小缓存单元及写镜像单元分割模式下,在其中一个物理托盘损坏的情况下,不间断服务提供方式如下例所示。
[0071]假如图9中托盘1损坏,不能提供服务,并且托盘1上的写镜像备份的是在托盘0上的脏数据,数据恢复及不间断服务提供过程如下:
[0072]第一步:首先将托盘0和托盘1标志为不可提供空闲缓存行状态。
[0073]第二步:遍历清除脏数据,线程如下:
[0074]线程1:遍历托盘0的缓存行状态表,处于干净状态的就将其失效,处于脏状态的就将数据清除到后端存储集群,再将其失效。
[0075]线程2:遍历托盘1的缓存行状态表,处于干净状态的就将其失效,处于脏状态就等待至状态变为干净状态。
[0076]线程3:提高托盘2上写镜像守护单元的运行优先级为最高级。
[0077]线程1、2和3是并发执行的。
[0078]第三步:等待托盘0和1遍历都结束后,再将托盘0置为可以提供空闲缓存行的状态。因为新的情况下,托盘0要用托盘2上的写镜像单元做双备份。
[0079]来自虚拟机的读写操作落到哪个物理托盘可选择的算法按照以下原则确定:当某个物理托盘损坏时,仅仅将原来映射到这个物理托盘上的操作转移到其他的物理托盘上,而原来就映射到其他物理托盘上的读写操作维持映射关系不变。满足这个要求的算法目前有很多,例如CRUSH算法等。
[0080]在解决了本发明的基本技术问题即缓存行表项管理问题和数据一致性问题外,发明人还发现,由于来自虚拟机201的读写操作的颗粒度和小缓存单元102的缓存行大小一致,但大缓存单元101的缓存行的大小较大,因此会出现同时命中大/小缓存单元的情况。可通过以下描述的方法予以解决:
[0081]如图2和图6所示,当来自虚拟机201的写操作被送到闪存缓存100时,如果这个写操作命中了小缓存单元102的缓存行,则把数据写入小缓存单元102,如果没有命中小缓存单元102的缓存行,但是命中了大缓存单元101的缓存行,则把数据写入大缓存单元101,如果大/小缓存单元都没有命中,则查询加速标识是否有效,如果有效,则将数据写入小缓存单元102,否则数据不写入闪存缓存100,直接经过集中控制设备202写入后端存储集群203。这样的写操作流程保证了,在写操作命中小缓存单元102的缓存行的情况下,那么小缓存单元102中的数据永远是最新的。
[0082]如图2和图7所示,当来自虚拟机201的读操作被送到闪存缓存100时,如果这个读操作命中了小缓存单元102的缓存行,则把小缓存单元102中的数据返回,如果没有命中小缓存单元102的缓存行,但是命中了大缓存单元101的缓存行,则把大缓存单元101中的数据返回,如果大/小缓存的缓存行都没有命中,则查询加速标识是否有效,如果有效,则从后端存储集群203读取大缓存行大小的数据,装载到大缓存单元101的缓存行,让后再把数据返回给虚拟机201,如果无效,则查询数据暂存标识是否有效,如果有效,则从后端存储集群203读取小缓存单元102的缓存行数据,装载到小缓存单元102的缓存行,然后再把数据返回给虚拟机201,否则从后端存储集群读取的数据不经过闪存缓存100,直接经过集中控制设备202送给前端虚拟机201。
[0083]本实施例的非易失性缓存实现方法,可将记录缓存状态的状态表的大小控制在一定范围内,除了可以对读取操作进行加速外,还能够对全部写操作进行加速。此外,备份时只对部分数据进行备份,备份数据量有限且备份操作对性能影响小。再者,还没有热备盘,能够提供不间断服务。
[0084]实施例二:
[0085]本实施例的装置与前述实施例中的非易失性缓存实现方法对应一致。
[0086]一种非易失性缓存实现装置,包括闪存存储资源虚拟化单元,逻辑存储单元创建单元,数据写入单元和数据读取单元。
[0087]所述闪存存储资源虚拟化单元用于将物理的闪存存储资源虚拟化为闪存存储池。
[0088]所述逻辑存储单元创建单元用于在所述存储池上创建三种逻辑存储单元,大缓存单元、小缓存单元和写镜像单元,所述大缓存单元用于提供常规的缓存服务,所述小缓存单元用于提供随机写操作的加速服务和读操作的数据暂存服务,所述写镜像单元用于为大缓存和小缓存中的脏数据提供冗余备份保护功能。
[0089]所述物理的闪存存储资源优选可包括两个以上物理托盘,所述大缓存单元、小缓存单元和写镜像单元均横跨所述两个以上物理托盘。且优选:所述小缓存单元和写镜像单元的单个缓存行位于同一个物理托盘内,所述大缓存单元的单个缓存行位于同一个物理托盘内或横跨两个以上物理托盘。
[0090]所述数据写入单元进行数据写入时,如该写操作命中了小缓存单元的缓存行,则把数据写入小缓存单元,如未命中小缓存单元但命中了大缓存单元的缓存行,则把数据写入大缓存单元,如大缓存单元和小缓存单元都未命中且加速标识有效,则将数据写入小缓存单元,否则数据不写入闪存存储资源而直接写入后端存储集群。
[0091]所述数据写入单元在将数据写入所述大缓存单元、小缓存单元和写镜像单元时,所述大缓存单元的写入物理位置优选与所述写镜像单元的写入物理位置处于不同的物理托盘上,所述小缓存单元的写入物理位置优选与所述写镜像单元的写入物理位置亦处于不同的物理托盘上。
[0092]所述数据读取单元进行数据读取时,如该读操作命中了小缓存单元的缓存行,则把小缓存单元中的数据返回,如未命中小缓存单元但命中了大缓存单元的缓存行,则把大缓存单元中的数据返回,如大缓存单元和小缓存单元都未命中且加速标识有效,则从后端存储集群读取大缓存单元的缓存行对应大小的数据并装载到大缓存单元的缓存行,再把数据返回给虚拟机,如大缓存单元和小缓存单元都未命中且加速标识无效但数据暂存标识有效,则从后端存储集群读取对应小缓存单元的缓存行数据并装载到小缓存单元的缓存行,再把数据返回给虚拟机,否则从后端存储集群读取的数据不经过闪存存储资源而直接送给前端虚拟机。
[0093]所述大缓存单元、小缓存单元和写镜像单元的大小划分可由多种方式,优选采用满足如下公式
[0094](Little_Size+Mirror_size)/Little_granularity+Big_ Size/Bi g_granularity< = available_DRAM_Size/entry_size,其中,
[0095]Big_Size为大缓存单元的大小,
[0096]Little_Size为小缓存单元的大小,
[0097]Mirror_size为写镜像单元的大小,
[0098]Little_granularity为小缓存单元缓存行的大小,
[0099]Big_granularity为大缓存单元缓存行的大小,
[0100]available_DRAM_Size是可用的存储缓存状态表的DRAM的大小,
[0101]entry_size是缓存每个表项的大小。
[0102]此外,所述写镜像单元可由多个逻辑写镜像子单元构成。
[0103]所述数据写入单元和数据读取单元的操作落到哪个物理托盘优选按以下原则:当某个物理托盘损坏时,仅仅将原来映射到该物理托盘上的操作转移到其他的物理托盘上,而原来就映射到其他物理托盘上的读写操作维持映射关系不变。
[0104]所述大缓存单元的缓存行至少包括脏状态、干净状态和无效状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中无有效数据;当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态;当缓存处于脏状态时,只有收到缓存行清除请求时跳转为干净状态;当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到失效请求时跳转到无效状态。
[0105]所述小缓存单元的缓存行至少包括脏状态、干净状态、无效状态和冻结状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中没有有效数据,所述冻结状态表示当前缓存行处于冻结状态,只能被读取,不能被写入;当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态;当缓存处于脏状态时,收到缓存行清除请求时跳转为无效状态,收到移动请求时跳转为冻结状态;当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到读请求时跳转到无效状态;当缓存行处于冻结状态时,只有收到移动完成的返回时缓存行跳转到无效状态。
[0106]本实施例中,还优选包括守护单元,该守护单元用于在后台将写镜像单元中的脏数据清除到后端存储集群,以限制所述闪存存储资源中需做冗余备份的脏数据在预定的范围内。所述冗余备份优选采用写镜像方式。
[0107]本领域技术人员将认识到,对以上描述做出众多变通是可能的,所以实施例仅是用来描述一个或多个特定实施方式。
[0108]尽管已经描述和叙述了被看作本发明的示范实施例,本领域技术人员将会明白,可以对其作出各种改变和替换,而不会脱离本发明的精神。另外,可以做出许多修改以将特定情况适配到本发明的教义,而不会脱离在此描述的本发明中心概念。所以,本发明不受限于在此披露的特定实施例,但本发明可能还包括属于本发明范围的所有实施例及其等同物。
【权利要求】
1.一种非易失性缓存实现方法,其特征在于:首先将物理的闪存存储资源虚拟化为闪存存储池,然后在所述存储池上创建三种逻辑存储单元,大缓存单元、小缓存单元和写镜像单元,所述大缓存单元用于提供常规的缓存服务,所述小缓存单元用于提供随机写操作的加速服务和读操作的数据暂存服务,所述写镜像单元用于为大缓存单元和小缓存单元中的脏数据提供冗余备份保护功能; 数据写入时,如该写操作命中了小缓存单元的缓存行,则把数据写入小缓存单元,如未命中小缓存单元但命中了大缓存单元的缓存行,则把数据写入大缓存单元,如大缓存单元和小缓存单元都未命中且加速标识有效,则将数据写入小缓存单元,否则数据不写入闪存存储资源而直接写入后端存储集群; 数据读取时,如该读操作命中了小缓存单元的缓存行,则把小缓存单元中的数据返回,如未命中小缓存单元但命中了大缓存单元的缓存行,则把大缓存单元中的数据返回,如大缓存单元和小缓存单元都未命中且加速标识有效,则从后端存储集群读取大缓存单元的缓存行对应大小的数据并装载到大缓存单元的缓存行,再把数据返回给前端数据申请单元,如大缓存单元和小缓存单元都未命中且加速标识无效但数据暂存标识有效,则从后端存储集群读取对应小缓存单元的缓存行数据并装载到小缓存单元的缓存行,再把数据返回给前端数据申请单元,否则从后端存储集群读取的数据不经过闪存存储资源而直接送给前端数据申请单元。
2.如权利要求1所述的非易失性缓存实现方法,其特征在于:所述大缓存单元、小缓存单元和写镜像单元的大小满足如下公式
(Little_Size+Mirror_size)/Little_granularity+Big_Size/Big_granularity< =
avaiIabIe_DRAM_Size/entry_size,其中, Big_Size为大缓存单元的大小, Little_Size为小缓存单元的大小, Mirror_size为写镜像单元的大小, Little_granularity为小缓存单元缓存行的大小, Big_granuIarity为大缓存单元缓存行的大小, available_DRAM_Size是可用的存储缓存状态表的DRAM的大小, entry_size是缓存每个表项的大小。
3.如权利要求1所述的非易失性缓存实现方法,其特征在于:所述写镜像单元由至少一个逻辑写镜像子单元组成,所述大缓存单元、小缓存单元分别由至少一个逻辑大缓存子单元、至少一个逻辑小缓存子单元组成。
4.如权利要求1所述的非易失性缓存实现方法,其特征在于:所述物理的闪存存储资源包括两个以上物理托盘,所述大缓存单元、小缓存单元和写镜像单元均横跨所述两个以上物理托盘。
5.如权利要求4所述的非易失性缓存实现方法,其特征在于:数据在写入所述大缓存单元、小缓存单元和写镜像单元时,所述大缓存单元的写入物理位置与所述写镜像单元的写入物理位置处于不同的所述物理托盘上,所述小缓存单元的写入物理位置与所述写镜像单元的写入物理位置亦处于不同的所述物理托盘上。
6.如权利要求4所述的非易失性缓存实现方法,其特征在于:所述小缓存单元和写镜像单元的单个缓存行位于同一个物理托盘内或横跨两个以上物理托盘,所述大缓存单元的单个缓存行位于同一个物理托盘内或横跨两个以上物理托盘。
7.如权利要求4所述的非易失性缓存实现方法,其特征在于,数据写入操作和数据读取操作落到哪个物理托盘按以下原则:当某个物理托盘损坏时,仅仅将原来映射到该物理托盘上的操作转移到其他的物理托盘上,而原来就映射到其他物理托盘上的读写操作维持映射关系不变。
8.如权利要求1所述的非易失性缓存实现方法,其特征在于:所述大缓存单元的缓存行至少包括脏状态、干净状态和无效状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中无有效数据; 当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态; 当缓存行处于脏状态时,只有收到缓存行清除请求时跳转为干净状态; 当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到失效请求时跳转到无效状态。
9.如权利要求1所述的非易失性缓存实现方法,其特征在于:所述小缓存单元的缓存行至少包括脏状态、干净状态、无效状态和冻结状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中没有有效数据,所述冻结状态表示当前缓存行处于冻结状态,只能被读取,不能被写入; 当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态; 当缓存行处于脏状态时,收到缓存行清除请求时跳转为无效状态,收到移动请求时跳转为冻结状态; 当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到读请求时跳转到无效状态; 当缓存行处于冻结状态时,只有收到移动完成的返回时缓存行跳转到无效状态。
10.如权利要求1所述的非易失性缓存实现方法,其特征在于:还包括守护单元,该守护单元用于在后台将写镜像单元中的脏数据清除到后端存储集群,以限制所述闪存存储资源中需做冗余备份的脏数据在预定的范围内。
11.如权利要求10所述的非易失性缓存实现方法,其特征在于:所述冗余备份采用写镜像方式。
12.如权利要求1-11任一项所述的非易失性缓存实现方法,其特征在于:所述物理的闪存存储资源是闪存或相位存储器。
13.一种非易失性缓存实现装置,其特征在于包括: 闪存存储资源虚拟化单元,用于将物理的闪存存储资源虚拟化为闪存存储池; 逻辑存储单元创建单元,用于在所述存储池上创建三种逻辑存储单元,大缓存单元、小缓存单元和写镜像单元,所述大缓存单元用于提供常规的缓存服务,所述小缓存单元用于提供随机写操作的加速服务和读操作的数据暂存服务,所述写镜像单元用于为大缓存和小缓存中的脏数据提供冗余备份保护功能; 数据写入单元和数据读取单元; 所述数据写入单元进行数据写入时,如该写操作命中了小缓存单元的缓存行,则把数据写入小缓存单元,如未命中小缓存单元但命中了大缓存单元的缓存行,则把数据写入大缓存单元,如大缓存单元和小缓存单元都未命中且加速标识有效,则将数据写入小缓存单元,否则数据不写入闪存存储资源而直接写入后端存储集群; 所述数据读取单元进行数据读取时,如该读操作命中了小缓存单元的缓存行,则把小缓存单元中的数据返回,如未命中小缓存单元但是命中了大缓存单元的缓存行,则把大缓存单元中的数据返回,如大缓存单元和小缓存单元都未命中且加速标识有效,则从后端存储集群读取大缓存单元的缓存行对应大小的数据并装载到大缓存单元的缓存行,再把数据返回给前端数据申请单元,如大缓存单元和小缓存单元都未命中且加速标识无效但数据暂存标识有效,则从后端存储集群读取对应小缓存单元的缓存行数据并装载到小缓存单元的缓存行,再把数据返回给前端数据申请单元,否则从后端存储集群读取的数据不经过闪存存储资源而直接送给前端前端数据申请单元。
14.如权利要求13所述的非易失性缓存实现装置,其特征在于:所述大缓存单元、小缓存单元和写镜像单元的大小满足如下公式
(Little_Size+Mirror_size)/Little_granularity+Big_Size/Big_granularity< =
ava i I ab I e_DRAM_S i z e/entry_size,其中, Big_Size为大缓存单元的大小, Little_Size为小缓存单元的大小, Mirror_size为写镜像单元的大小, Little_granularity为小缓存单元缓存行的大小, Big_granuIarity为大缓存单元缓存行的大小, available_DRAM_Size是可用的存储缓存状态表的DRAM的大小, entry_size是缓存每个表项的大小。
15.如权利要求13所述的非易失性缓存实现装置,其特征在于:所述写镜像单元由至少一个逻辑写镜像子单元构成,所述大缓存单元、小缓存单元可由一个或者多个逻辑大缓存子单元、逻辑小缓存子单元组成。
16.如权利要求13所述的非易失性缓存实现装置,其特征在于:所述物理的闪存存储资源包括两个以上物理托盘,所述大缓存单元、小缓存单元和写镜像单元均横跨所述两个以上物理托盘。
17.如权利要求16所述的非易失性缓存实现装置,其特征在于:所述数据写入单元在将数据写入所述大缓存单元、小缓存单元和写镜像单元时,所述大缓存单元的写入物理位置与所述写镜像单元的写入物理位置处于不同的物理托盘上,所述小缓存单元的写入物理位置与所述写镜像单元的写入物理位置亦处于不同的物理托盘上。
18.如权利要求16所述的非易失性缓存实现装置,其特征在于:所述小缓存单元和写镜像单元的单个缓存行位于同一个物理托盘内或横跨两个以上物理托盘,所述大缓存单元的单个缓存行位于同一个物理托盘内或横跨两个以上物理托盘。
19.如权利要求16所述的非易失性缓存实现装置,其特征在于,所述数据写入单元和数据读取单元的操作落到哪个物理托盘按以下原则:当某个物理托盘损坏时,仅仅将原来映射到该物理托盘上的操作转移到其他的物理托盘上,而原来就映射到其他物理托盘上的读写操作维持映射关系不变。
20.如权利要求13所述的非易失性缓存实现装置,其特征在于:所述大缓存单元的缓存行至少包括脏状态、干净状态和无效状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中无有效数据; 当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态; 当缓存行处于脏状态时,只有收到缓存行清除请求时跳转为干净状态; 当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到失效请求时跳转到无效状态。
21.如权利要求13所述的非易失性缓存实现装置,其特征在于:所述小缓存单元的缓存行至少包括脏状态、干净状态、无效状态和冻结状态,所述脏状态表示缓存行中的数据和后端存储系统中的数据不一致,所述干净状态表示缓存行中的数据和后端存储系统中的数据一致,所述无效状态表示缓存行中没有有效数据,所述冻结状态表示当前缓存行处于冻结状态,只能被读取,不能被写入; 当缓存行处于无效状态时,收到数据写入请求时跳转到脏状态,收到干净数据装载请求时跳转到干净状态; 当缓存行处于脏状态时,收到缓存行清除请求时跳转为无效状态,收到移动请求时跳转为冻结状态; 当缓存行处于干净状态时,收到数据写入请求时跳转到脏状态,收到读请求时跳转到无效状态; 当缓存行处于冻结状态时,只有收到移动完成的返回时缓存行跳转到无效状态。
22.如权利要求13所述的非易失性缓存实现装置,其特征在于:还包括守护单元,该守护单元用于在后台将写镜像单元中的脏数据清除到后端存储集群,以限制所述闪存存储资源中需做冗余备份的脏数据在预定的范围内。
23.如权利要求22所述的非易失性缓存实现装置,其特征在于:所述冗余备份采用写镜像方式。
24.如权利要求13-23任一项所述的非易失性缓存实现装置,其特征在于:所述物理的闪存存储资源是闪存或相位存储器。
【文档编号】G06F12/08GK104484287SQ201410806036
【公开日】2015年4月1日 申请日期:2014年12月19日 优先权日:2014年12月19日
【发明者】刘建伟, 丁杰, 刘乐乐, 周文 申请人:北京麓柏科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1