CN106776361A - 一种面向大规模非易失性存储介质的缓存方法和*** - Google Patents
一种面向大规模非易失性存储介质的缓存方法和*** Download PDFInfo
- Publication number
- CN106776361A CN106776361A CN201710141173.9A CN201710141173A CN106776361A CN 106776361 A CN106776361 A CN 106776361A CN 201710141173 A CN201710141173 A CN 201710141173A CN 106776361 A CN106776361 A CN 106776361A
- Authority
- CN
- China
- Prior art keywords
- item
- mapping
- block
- logical address
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种面向大规模非易失性存储介质的缓存方法和***,包括:获取命令请求,当命令请求为写命令请求时,将目标映射项根据逻辑地址前缀存入H‑Cache,当H‑Cache内剩余空间小于A时,将H‑Cache中最长时间没被访问的映射项迁移到C‑Cache,当C‑Cache内剩余空间小于B时,将C‑Cache中Block按照访问次数排序,检查访问次数最少Block中映射项标志位,若为0,将映射项写到Mapping中,将映射项标志位置为1,若为1,删除映射项;当命令请求为读命令请求时,获取目标映射项逻辑地址并在H‑Cache中检索逻辑地址对应的目标映射项,若有,输出目标映射项的物理地址;若无,在C‑Cache中搜索逻辑地址对应的目标映射项,若有,输出目标映射项的物理地址,若无,在Mapping区中检索并输出逻辑地址的对应的物理地址。
Description
技术领域
本发明涉及数据存储检索技术领域,尤其涉及一种面向大规模非易失性存储介质的缓存方法和***。
背景技术
相比于传统的磁盘,基于非易失性存储介质(Non-Volatile Memory,NVM)的固态硬盘呈现出许多低功耗、读写速度快、防震较好等优点,在一些存储性能要求的较高的场所(如数据中心),NVM(Non-Volatile Memory)介质设备使用比例已超过磁盘。
大数据时代,国际数据公司预测,从2016年开始的五年内,全球每年产生的数据总量均将增加40%,到2020年全球数据总量将达到44ZB。基于NVM介质的固态盘***中,传统的数据组织和管理形式的弊端开始显现。首先,随着存储数据量增长,一方面,管理逻辑数据与物理数据映射的元数据量较大,这些元数据所需的缓存空间和存储空间较大;另一方面,基于这些元数据的缓存和索引管理的实现难度较复杂,尤其随着大容量三维NVM介质被应用到固态盘***中,传统缓存和索引管理的方法逐渐不能完成满足高性能存储访问的需求,这将成为数据存储访问性能的瓶颈之一。
现有固态盘结构中,为了兼容传统主机端文件***对块设备的访问模式,通常在固态盘软件栈设计一种NVM设备转换层(Non-Volatile Memory Translation Layer,NVMTL),其主要包括地址映射、磨损平衡和垃圾回收等模块,其中地址映射是NVMTL最核心的功能,它负责将来自文件***的逻辑地址转换为NVM设备中的物理地址。根据逻辑地址与物理地址映射粒度的大小,NVMTL地址映射可以分为页映射、块映射以及混合映射。
大多数NVMTL地址映射管理中,逻辑地址与物理地址的关系条目均采用二维表的形式组织管理。在基于NVM介质的大容量存储***中,首先,当数据量较大时,数据检索性能较低;此外,NVM介质现有部分解决方案采用采用二级映射的方法来缓存全体映射项中的一部分经常被访问的映射条目,这在访问不命中条件下的检索性能较差,存储访问管理上较难实现。
发明内容
基于背景技术存在的技术问题,本发明提出了一种面向大规模非易失性存储介质的缓存方法和***;
本发明提出的一种面向大规模非易失性存储介质的缓存方法,该方法包括以下步骤:
S1、根据用户命令请求判断其为目标映射项写命令请求或目标映射项读命令请求,当判断所述命令请求为目标映射项写命令请求时执行S2;当判断所述命令请求为目标映射项读命令请求时执行S3;
S2、将目标映射项末尾标志位置为0,再将目标映射项根据其逻辑地址前缀存入H-Cache区中;
S3、获取目标映射项读命令请求中的逻辑地址,判断H-Cache中是否有所述逻辑地址对应的目标映射项,当判断结果为是时,输出所述目标映射项对应的物理地址;当判断结果为否时,检索C-Cache中是否有所述逻辑地址对应的目标映射项,
当检索结果为是时,输出所述目标映射项对应的物理地址,当检索结果为否时,在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址。
2、根据权利要求1所述的面向大规模非易失性存储介质的缓存方法,其特征在于,步骤S2,具体包括:
S20、将目标映射项末尾标志位置为0;
S21、将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树中,判断H-Cache区内剩余空间是否小于预设阈值A,当判断结果为是时,对H-Cache区中的原有映射项进行迁移,执行S22;当判断结果为否时,不进行操作;
S22、将H-Cache区中最长时间没被访问的映射项迁移到C-Cache区的压缩前缀完全二叉树中,判断C-Cache区内剩余空间是否小于预设阈值B,当判断结果为是时,将C-Cache区中的Block块按照访问次数排序,并逐项检查访问次数最少的Block块中映射项的标志位为0或1,若标志位为0,将该映射项迁移到Mapping区中,再将该映射项标志位置为1,若标志位为1,删除该映射项;当判断结果为否时,不进行操作。
3、根据权利要求2所述的面向大规模非易失性存储介质的缓存方法,其特征在于,在步骤S21中,所述将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树之前,还包括:通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
S200、建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
S201、将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
S202、再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
S203、重复步骤S202操作,直至H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树。
4、根据权利要求1所述的面向大规模非易失性存储介质的缓存方法,其特征在于,在步骤S3中,在判断H-Cache中是否有所述逻辑地址对应的目标映射项之前,包括:通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
S210、建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
S211、将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
S212、再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
S213、重复步骤S212操作,直至H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树;
在步骤S3中,通过非压缩前缀完全二叉树检索算法判断H-Cache中是否有所述逻辑地址对应的目标映射项,其中,所述非压缩前缀完全二叉树检索算法具体包括:
S300、接收目标映射项的逻辑地址;
S301、根据H-Cache区前缀完全二叉树的高度k,取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S302、检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,执行S303;
S303、令k=k-1,执行S301、S302操作,直至K=1,执行S304;
S304、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述非压缩前缀完全二叉树中不存在;
在步骤S3中,所述检索C-Cache中是否有所述逻辑地址对应的目标映射项之前,还包括:通过压缩前缀完全二叉树构建方法建立C-Cache区的压缩前缀完全二叉树;所述在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址之前,还包括:通过压缩前缀完全二叉树构建方法建立Mapping区的压缩前缀完全二叉树;其中,所述压缩前缀完全二叉树构建方法,具体包括:
S310、建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为M,其中,1<M;
S311、将需要存入树中的映射项的逻辑地址首位设置为0,将第一个映射项存入所述Block块中并执行数据压缩;
S312、解压缩所述Block块,再逐项存入新的映射项到所述Block块中,当所述Block块中的映射项数目已达设定阈值M时,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
S313、重复步骤S312操作,直至需要存入树中的映射项全部存入树后,通过虚拟节点补全所述树,得到压缩前缀完全二叉树;
在步骤S3中,通过压缩前缀完全二叉树检索算法检索C-Cache中是否有所述逻辑地址对应的目标映射项,且通过压缩前缀完全二叉树检索算法检索Mapping区中是否有所述逻辑地址对应的目标映射项,其中,所述压缩前缀完全二叉树检索算法具体包括:
S320、接收目标映射项的逻辑地址;
S321、根据C-Cache区或Mapping区中压缩前缀完全二叉树的高度k取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S322、检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,解压缩所述Block块并返回目标映射项的逻辑地址对应的物理地址,再压缩所述Block块;当检索结果为否时,执行S323;
S323、令k=k-1,执行S321、S322操作,直至K=1,执行S324;
S324、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述压缩前缀完全二叉树中不存在。
5、根据权利要求1所述的面向大规模非易失性存储介质的缓存方法,其特征在于,在步骤S3中,所述检索C-Cache中是否有所述逻辑地址对应的目标映射项,当检索结果为是时,输出所述目标映射项对应的物理地址过程中,具体包括:记录此次检索时间,当预设时间内所述逻辑地址对应的目标映射项被再次被检索到时,将所述目标映射项转移到H-Cache区;
在步骤S3中,所述在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址过程中,还包括:在Mapping区中检索所述逻辑地址对应的目标映射项所在的Block块,并将所述Block块中目标映射项备份到H-Cache区,将所述Block块中其他映射项备份到C-Cache区。
6、一种面向大规模非易失性存储介质的缓存***,其特征在于,包括:
判断模块,用于根据用户命令请求判断其为目标映射项写命令请求或目标映射项读命令请求;
写命令模块,用于当判断模块判断所述命令请求为目标映射项写命令请求时,将目标映射项末尾标志位置为0,再将目标映射项根据其逻辑地址前缀存入H-Cache区中;
读命令模块,用于当判断模块判断所述命令请求为目标映射项读命令请求时,获取目标映射项读命令请求中的逻辑地址,判断H-Cache中是否有所述逻辑地址对应的目标映射项,当判断结果为是时,输出所述目标映射项对应的物理地址;当判断结果为否时,检索C-Cache中是否有所述逻辑地址对应的目标映射项,
当检索结果为是时,输出所述目标映射项对应的物理地址,当检索结果为否时,在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址。
7、根据权利要求6所述的面向大规模非易失性存储介质的缓存***,其特征在于,所述写命令模块包括:标志子模块、判断子模块、处理子模块、写入子模块;
标志子模块,用于将目标映射项末尾标志位置为0;
判断子模块,用于判断H-Cache区内剩余空间是否小于预设阈值A;
处理子模块,用于当判断子模块的判断结果为是时,将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树中,对H-Cache区中的原有映射项进行迁移,将最长时间没被访问的原有映射项迁移到C-Cache区中,再判断C-Cache区内剩余空间是否小于预设阈值B,当判断结果为是时,将C-Cache区中的Block块按照访问次数排序,并检查访问次数最少的Block块中映射项的标志位为0或1,若标志位为0,将该映射项写到Mapping区中,再将该映射项标志位置为1,若标志位为1,删除该映射项;当判断结果为否时,不进行任何操作;
写入子模块,用于当判断子模块的判断结果为否时,将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树中。
8、根据权利要求7所述的面向大规模非易失性存储介质的缓存***,其特征在于,所述写命令模块,还用于:在判断H-Cache中是否有所述逻辑地址对应的目标映射项之前,通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
将H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树。
9、根据权利要求6所述的面向大规模非易失性存储介质的缓存***,其特征在于,所述读命令模块,具体用于:在判断H-Cache中是否有所述逻辑地址对应的目标映射项之前,通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
将H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树;
通过非压缩前缀完全二叉树检索算法判断H-Cache中是否有所述逻辑地址对应的目标映射项,其中,所述非压缩前缀完全二叉树检索算法具体包括:
S400、接收目标映射项的逻辑地址;
S401、根据H-Cache区前缀完全二叉树的高度k,取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S402、检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,执行S403;
S403、令k=k-1,执行S401、S402操作,直至K=1,执行S404;
S404、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述非压缩前缀完全二叉树中不存在;
在检索C-Cache中是否有所述逻辑地址对应的目标映射项之前,通过压缩前缀完全二叉树构建方法建立C-Cache区的压缩前缀完全二叉树;在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址之前,通过压缩前缀完全二叉树构建方法建立Mapping区的压缩前缀完全二叉树;其中,所述压缩前缀完全二叉树构建方法,包括:
建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为M,其中,1<M;
将需要存入树中的映射项的逻辑地址首位设置为0,将第一个映射项存入所述Block块中并执行数据压缩;
解压缩所述Block块,再逐项存入新的映射项到所述Block块中,当所述Block块中的映射项数目已达设定阈值M时,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
将需要存入树中的映射项全部存入树后,通过虚拟节点补全所述树,得到压缩前缀完全二叉树;
通过压缩前缀完全二叉树检索算法检索C-Cache中是否有所述逻辑地址对应的目标映射项,且通过压缩前缀完全二叉树检索算法检索Mapping区中是否有所述逻辑地址对应的目标映射项,其中,所述压缩前缀完全二叉树检索算法具体包括:
S410、接收目标映射项的逻辑地址;
S411、根据C-Cache区或Mapping区中压缩前缀完全二叉树的高度k取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S412、检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,解压缩所述Block块并返回目标映射项的逻辑地址对应的物理地址,再压缩所述Block块;当检索结果为否时,执行S413;
S413、令k=k-1,执行S411、S412操作,直至K=1,执行S414;
S414、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述压缩前缀完全二叉树中不存在。
10、根据权利要求6所述的面向大规模非易失性存储介质的缓存***,其特征在于,所述读命令模块,还用于:检索C-Cache中是否有所述逻辑地址对应的目标映射项,当检索结果为是时,输出所述目标映射项对应的物理地址过程中,记录此次检索时间,当预设时间内所述逻辑地址对应的目标映射项被再次被检索到时,将所述目标映射项转移到H-Cache区;
在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址过程中,在Mapping区中检索所述逻辑地址对应的目标映射项所在的Block块,并将所述Block块中目标映射项备份到H-Cache区,将所述Block块中其他映射项备份到C-Cache区。
本发明将Cache分为两部分C-Cache和H-Cache。H-Cache部分用以保证***的高速存取访问性能,C-Cache部分通过对映射项数据进行压缩使得有限的存储空间能够存储更多的映射项,提高了映射项的命中率,从而提高了***的运行效率,在C-Cache、H-Cache、Mapping区空间管理分别通过三棵前缀完全二叉树来实现,并利用前缀完全二叉树的检索算法,提高了检索效率;Mapping区空间采用具有本地更新特性的NVM介质来存储,相对于将映射项存储到闪存介质而言,消除了映射项异地更新所带来的写放大问题,降低了异地更新时复制并转移映射项带来的时间开销,与传统闪存设备相比,采用这种NVM介质存储Mapping区的读写速率将会明显提高;由于DRAM设备相对其他存储设备存取速度更快,将数据频繁存取的操作放到DRAM完成,提高了***运行效率,充分考虑到数据访问局部性原理,以Block为单位取出映射项备份到缓存,避免了频繁地到Mapping区中检索映射项,提高了***运行效率,通过部分写回策略,当C-Cache中的某个Block需要迁移出Cache时,只将新生成的和更新的映射项写回Mapping区,在保证数据一致性的减少了写回NVM设备的数据量,提高了写回时间效率。
附图说明
图1为本发明提出的一种面向大规模非易失性存储介质的缓存方法的流程示意图;
图2为缓存管理执行逻辑示意图;
图3为前缀完全二叉树的结构示意图;
图4为映射项结构示意图;
图5为前缀完全二叉树检索算法流程示意图;
图6为地址映射模块图;
图7为***逻辑层次图;
图8为***硬件构架图;
图9为地址映射流程示意图;
图10为本发明提出的一种面向大规模非易失性存储介质的缓存***的模块示意图。
具体实施方式
参照图1,本发明提出的一种面向大规模非易失性存储介质的缓存方法,该方法包括以下步骤:
步骤S1,根据用户命令请求判断其为目标映射项写命令请求或目标映射项读命令请求,当判断所述命令请求为目标映射项写命令请求时执行S2;当判断所述命令请求为目标映射项读命令请求时执行S3;
当用户发出命令请求时,判断命令请求是写命令请求还是读命令请求,根据不同的命令请求进行相应的操作。
步骤S2,将目标映射项末尾标志位置为0,再将目标映射项根据其逻辑地址前缀存入H-Cache区中;
步骤S2,具体包括:
S20、将目标映射项末尾标志位置为0;
S21、将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树中,判断H-Cache区内剩余空间是否小于预设阈值A,当判断结果为是时,对H-Cache区中的原有映射项进行迁移,执行S22;当判断结果为否时,不进行操作;
S22、将H-Cache区中最长时间没被访问的映射项迁移到C-Cache区的压缩前缀完全二叉树中,判断C-Cache区内剩余空间是否小于预设阈值B,当判断结果为是时,将C-Cache区中的Block块按照访问次数排序,并逐项检查访问次数最少的Block块中映射项的标志位为0或1,若标志位为0,将该映射项迁移到Mapping区中,再将该映射项标志位置为1,若标志位为1,删除该映射项;当判断结果为否时,不进行操作;
参考图2,由于新生成的映射项或已更新的映射项存储时会首先存储到H-Cache中,当映射项进入H-Cache时,如图2中1,***将该映射项末尾标志位置为0,方便后续可能的由于数据迁移到C-Cache后,再次向Mapping区中迁移映射项时的鉴别,减少再次写入Mapping区的数据量,再判断H-Cache区内剩余空间是否小于预设阈值,当H-Cache区中的剩余空间小于该阈值时,为准备新写入映射项预留空间,起缓冲作用,使得写入与数据迁移并发运行,提高时间效率,若再有数据传入H-Cache时,则需要在写入新的映射项数据的启动H-Cache区的映射项数据迁移,将最长时间没被访问的映射项迁移到C-Cache区中的合适位置,如图2中2,再判断C-Cache区内剩余空间是否小于预设阈值,当C-Cache区中的剩余空间小于该阈值时,为准备新写入映射项预留空间,起缓冲作用,使得写入与数据迁移并发运行,提高时间效率,若再有数据传入C-Cache,则需要在写入新的映射项数据的同时启动C-Cache区的映射项数据迁移,对C-Cache区中的Block在最近一段时间内的访问次数排序,将访问次数最少的Block作为牺牲项,逐项检索该Block中的所有映射项的标志位,若标志位为0,则将该映射项写回到Mapping区中的合适位置,写回到Mapping区中,如图2中3,然后将该映射项标志位置为1;若标志位为1,则直接将该映射项丢弃,以减少写回Mapping区中的映射项数据量,降低写回时间,提高***效率。
参考图3,在本步骤中,所述将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树之前,还包括:通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
S200、建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
S201、将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
S202、再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
S203、重复步骤S202操作,直至H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树;
H-Cache中的二叉树为非压缩的前缀完全二叉树,可提高检索效率,消除压缩解压缩开销,每个节点存储一个逻辑地址-物理地址映射项。
参考图4,映射项结构中标志位有两种状态,其中,0表示新形成的映射项或已更新映射项,1表示未更新的映射项。
步骤S3,获取目标映射项读命令请求中的逻辑地址,判断H-Cache中是否有所述逻辑地址对应的目标映射项,当判断结果为是时,输出所述目标映射项对应的物理地址;当判断结果为否时,检索C-Cache中是否有所述逻辑地址对应的目标映射项,
当检索结果为是时,输出所述目标映射项对应的物理地址,当检索结果为否时,在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址;
在本步骤中,所述在检索C-Cache中有所述逻辑地址对应的目标映射项时,输出所述目标映射项对应的物理地址过程中,还包括:记录此次检索时间,当预设时间内所述逻辑地址对应的目标映射项被再次被检索到时,将所述目标映射项转移到H-Cache区;在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址过程中,还包括:在Mapping区中检索所述逻辑地址对应的目标映射项所在的Block块,并将所述Block块中目标映射项备份到H-Cache区,将所述Block块中其他映射项备份到C-Cache区。
当获取目标映射项读命令请求中的逻辑地址,寻找其对应的逻辑地址-物理地址映射项时,首先在H-Cache中检索该映射项,若在H-Cache中检索到则直接返回其对应的物理地址结果,若未搜索到,则到C-Cache中检索,当在C-Cache中检索到时,向上层***返回需要的物理地址结果,记录此次在C-Cache中的访问时间,当过一段时间后该逻辑地址对应的映射项在C-Cache中再次命中时,计算该映射项两次访问的时间间隔,若该时间间隔小于一个特定的阈值时,将该映射项转移到H-Cache区中的相应位置,如图2中4,若仍未检索则到Mapping区中检索,如图2中5;找到Mapping区中该映射项所在的Block,然后将该映射项备份到H-Cache的树中的合适位置并返回该映射项的物理地址结果,该Block中的其他映射项逐项备份到C-Cache的树的合适位置,依据局部性原理,该映射项周围的映射项极有可能被再次访问,所以一起备份到Cache中,目的是考虑到访问局部性的特征,如图2中6。
参考图3,在本步骤中,在判断H-Cache中是否有所述逻辑地址对应的目标映射项之前,包括:通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
S210、建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
S211、将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
S212、再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
S213、重复步骤S212操作,直至H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树;
H-Cache中的二叉树为非压缩的前缀完全二叉树,可提高检索效率,消除压缩解压缩开销,每个节点存储一个逻辑地址-物理地址映射项。
参考图5,在本步骤中,通过非压缩前缀完全二叉树检索算法判断H-Cache中是否有所述逻辑地址对应的目标映射项,其中,所述非压缩前缀完全二叉树检索算法具体包括:
S300、接收目标映射项的逻辑地址;
S301、根据H-Cache区前缀完全二叉树的高度k,取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S302、检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,执行S303;
S303、令k=k-1,执行S301、S302操作,直至K=1,执行S304;
S304、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述非压缩前缀完全二叉树中不存在。
在本步骤中,所述检索C-Cache中是否有所述逻辑地址对应的目标映射项之前,还包括:通过压缩前缀完全二叉树构建方法建立C-Cache区的压缩前缀完全二叉树;所述在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址之前,还包括:通过压缩前缀完全二叉树构建方法建立Mapping区的压缩前缀完全二叉树;其中,所述压缩前缀完全二叉树构建方法,具体包括:
S310、建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为M,其中,1<M;
S311、将需要存入树中的映射项的逻辑地址首位设置为0,将第一个映射项存入所述Block块中并执行数据压缩;
S312、解压缩所述Block块,再逐项存入新的映射项到所述Block块中,当所述Block块中的映射项数目已达设定阈值M时,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
S313、重复步骤S312操作,直至需要存入树中的映射项全部存入树后,通过虚拟节点补全所述树,得到压缩前缀完全二叉树;
在本步骤中,通过压缩前缀完全二叉树检索算法检索C-Cache中是否有所述逻辑地址对应的目标映射项,且通过压缩前缀完全二叉树检索算法检索Mapping区中是否有所述逻辑地址对应的目标映射项,其中,所述压缩前缀完全二叉树检索算法具体包括:
S320、接收目标映射项的逻辑地址;
S321、根据C-Cache区或Mapping区中压缩前缀完全二叉树的高度k取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S322、检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,解压缩所述Block块并返回目标映射项的逻辑地址对应的物理地址,再压缩所述Block块;当检索结果为否时,执行S323;
S323、令k=k-1,执行S321、S322操作,直至K=1,执行S324;
S324、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述压缩前缀完全二叉树中不存在;
C-Cache和Mapping区中的二叉树为压缩的前缀完全二叉树,每个节点为一个压缩的Block,每个Block中存储着多个前缀与Block前缀相同的映射项。
参考图6,Cache基于DRAM实现,分为H-Cache和C-Cache两部分。H-Cache主要存储被频繁访问的“活跃”映射项;C-Cache主要存放被从H-Cache中迁移出的“相对不活跃”的映射项,多个映射项根据其逻辑地址前缀存放到合适的Block中进行压缩,通过压缩技术,能够使得有限的Cache空间存储更多的映射项,提高映射项的命中率,提升***运行效率;
Mapping区基于支持本地更新的NVM设备实现,其目标是存放完整的映射项数据,其映射项数据主要来源于C-Cache迁移数据,多个其中的映射项根据其逻辑地址前缀存放到合适的Block中。
参考图7,D-Cache部分基于DRAM介质实现,用于临时存储用户写入或读取的数据;NVM Data Storage部分基于NVM介质实现,其中只存放数据信息,不存储地址映射等其他信息。
参考图8、图9,***往存储***写数据时,主机操作***上层传来数据和逻辑地址、offset、size,数据暂时存放到D-Cache中,控制器根据数据的size为其在数据存储设备上分配合适大小的物理空间,并将该空间首地址物理地址返回组成逻辑地址-物理地址映射项,存入地址映射模块中。
***从存储***读数据时,主机操作***上层将其逻辑地址传入地址映射模块,利用本方案的数据缓存和检索方法,得到该逻辑地址对应的物理地址,然后从该物理地址所对应的存储空间读取数据,经过D-Cache返回给上层***。
参考图10,本发明提出的一种面向大规模非易失性存储介质的缓存***,该***包括:
判断模块,用于获取用户命令请求,并判断所述命令请求为目标映射项写命令请求或目标映射项读命令请求;
当用户发出命令请求时,判断命令请求是写命令请求还是读命令请求,根据不同的命令请求进行相应的操作。
写命令模块,用于当判断模块判断所述命令请求为目标映射项写命令请求时,将目标映射项末尾标志位置为0,再将目标映射项根据其逻辑地址前缀存入H-Cache区中;
写命令模块包括:标志子模块、判断子模块、处理子模块、写入子模块;
标志子模块,用于将目标映射项末尾标志位置为0;
判断子模块,用于判断H-Cache区内剩余空间是否小于预设阈值A;
处理子模块,用于当判断子模块的判断结果为是时,将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树中,对H-Cache区中的原有映射项进行迁移,将最长时间没被访问的原有映射项迁移到C-Cache区中,再判断C-Cache区内剩余空间是否小于预设阈值B,当判断结果为是时,将C-Cache区中的Block块按照访问次数排序,并检查访问次数最少的Block块中映射项的标志位为0或1,若标志位为0,将该映射项写到Mapping区中,再将该映射项标志位置为1,若标志位为1,删除该映射项;当判断结果为否时,不进行任何操作;
写入子模块,用于当判断子模块的判断结果为否时,将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树中。
参考图2,由于新生成的映射项或已更新的映射项存储时会首先存储到H-Cache中,当映射项进入H-Cache时,如图2中1,***将该映射项末尾标志位置为0,方便后续可能的由于数据迁移到C-Cache后,再次向Mapping区中迁移映射项时的鉴别,减少再次写入Mapping区的数据量,再为H-Cache分配一个阈值,当H-Cache区中的剩余空间小于该阈值时,为准备新写入映射项预留空间,起缓冲作用,使得写入与数据迁移并发运行,提高时间效率,若再有数据传入H-Cache时,则需要在写入新的映射项数据的同时启动H-Cache区的映射项数据迁移,将最长时间没被访问的映射项迁移到C-Cache区中的合适位置,如图2中2,再为C-Cache分配一个阈值,当C-Cache区中的剩余空间小于该阈值时,为准备新写入映射项预留空间,起缓冲作用,使得写入与数据迁移并发运行,提高时间效率,若再有数据传入C-Cache,则需要在写入新的映射项数据的同时启动C-Cache区的映射项数据迁移,对C-Cache区中的Block在最近一段时间内的访问次数排序,将访问次数最少的Block作为牺牲项,逐项检索该Block中的所有映射项的标志位,若标志位为0,则将该映射项写回到Mapping区中的合适位置,写回到Mapping区中,如图2中3,然后将该映射项标志位置为1;若标志位为1,则直接将该映射项丢弃,以减少写回Mapping区中的映射项数据量,降低写回时间,提高***效率。
参考图3,写命令模块,还用于:将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树之前,通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
将H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树;
H-Cache中的二叉树为非压缩的前缀完全二叉树,可提高检索效率,消除压缩解压缩开销,每个节点存储一个逻辑地址-物理地址映射项。
读命令模块,用于当判断模块判断所述命令请求为目标映射项读命令请求时,获取目标映射项读命令请求中的逻辑地址,并判断H-Cache中是否有所述逻辑地址对应的目标映射项,当判断结果为是时,输出所述目标映射项对应的物理地址;当判断结果为否时,检索C-Cache中是否有所述逻辑地址对应的目标映射项,当检索结果为是时,输出所述目标映射项对应的物理地址,当检索结果为否时,在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址;
读命令模块,还用于:在检索C-Cache中有所述逻辑地址对应的目标映射项时,输出所述目标映射项对应的物理地址过程中,记录此次检索时间,当预设时间内所述逻辑地址对应的目标映射项被再次被检索到时,将所述目标映射项转移到H-Cache区;
在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址过程中,在Mapping区中检索所述逻辑地址对应的目标映射项所在的Block块,并将所述Block块中目标映射项备份到H-Cache区,将所述Block块中其他映射项备份到C-Cache区。
当获取目标映射项读命令请求中的逻辑地址,寻找其对应的逻辑地址-物理地址映射项时,首先在H-Cache中检索该映射项,若在H-Cache中检索到则直接返回其对应的物理地址结果,若未搜索到,则到C-Cache中检索,当在C-Cache中检索到时,向上层***返回需要的物理地址结果,记录此次在C-Cache中的访问时间,当过一段时间后该逻辑地址对应的映射项在C-Cache中再次命中时,计算该映射项两次访问的时间间隔,若该时间间隔小于一个特定的阈值时,将该映射项转移到H-Cache区中的相应位置,如图2中4,若仍未检索则到Mapping区中检索,如图2中5;找到Mapping区中该映射项所在的Block,然后将该映射项备份到H-Cache的树中的合适位置并返回该映射项的物理地址结果,该Block中的其他映射项逐项备份到C-Cache的树的合适位置,依据局部性原理,该映射项周围的映射项极有可能被再次访问,所以一起备份到Cache中,目的是考虑到访问局部性的特征,如图2中6。
读命令模块,具体用于:在判断H-Cache中是否有所述逻辑地址对应的目标映射项之前,通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
将H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树;
H-Cache中的二叉树为非压缩的前缀完全二叉树,可提高检索效率,消除压缩解压缩开销,每个节点存储一个逻辑地址-物理地址映射项。
参考图5,读命令模块,还用于:通过非压缩前缀完全二叉树检索算法判断H-Cache中是否有所述逻辑地址对应的目标映射项,其中,所述非压缩前缀完全二叉树检索算法具体包括:
S400、接收目标映射项的逻辑地址;
S401、根据H-Cache区前缀完全二叉树的高度k,取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S402、检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,执行S403;
S403、令k=k-1,执行S401、S402操作,直至K=1,执行S404;
S404、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述非压缩前缀完全二叉树中不存在。
读命令模块,还用于:在检索C-Cache中是否有所述逻辑地址对应的目标映射项之前,通过压缩前缀完全二叉树构建方法建立C-Cache区的压缩前缀完全二叉树;在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址之前,通过压缩前缀完全二叉树构建方法建立Mapping区的压缩前缀完全二叉树;其中,所述压缩前缀完全二叉树构建方法,包括:
建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为M,其中,1<M;
将需要存入树中的映射项的逻辑地址首位设置为0,将第一个映射项存入所述Block块中并执行数据压缩;
解压缩所述Block块,再逐项存入新的映射项到所述Block块中,,当所述Block块中的映射项数目已达设定阈值M时,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
将需要存入树中的映射项全部存入树后,通过虚拟节点补全所述树,得到压缩前缀完全二叉树;
读命令模块,还用于:通过压缩前缀完全二叉树检索算法检索C-Cache中是否有所述逻辑地址对应的目标映射项,且通过压缩前缀完全二叉树检索算法检索Mapping区中是否有所述逻辑地址对应的目标映射项,其中,所述压缩前缀完全二叉树检索算法具体包括:
S410、接收目标映射项的逻辑地址;
S411、根据C-Cache区或Mapping区中压缩前缀完全二叉树的高度k取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S412、检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,解压缩所述Block块并返回目标映射项的逻辑地址对应的物理地址,再压缩所述Block块;当检索结果为否时,执行S413;
S413、令k=k-1,执行S411、S412操作,直至K=1,执行S414;
S414、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述压缩前缀完全二叉树中不存在;
C-Cache和Mapping区中的二叉树为压缩的前缀完全二叉树,每个节点为一个压缩的Block,每个Block中存储着多个前缀与Block前缀相同的映射项。
本实施方式将Cache分为两部分C-Cache和H-Cache。H-Cache部分用以保证***的高速存取访问性能,C-Cache部分通过对映射项数据进行压缩使得有限的存储空间能够存储更多的映射项,提高了映射项的命中率,从而提高了***的运行效率,在C-Cache、H-Cache、Mapping区空间管理分别通过三棵前缀完全二叉树来实现,并利用前缀完全二叉树的检索算法,提高了检索效率;Mapping区空间采用具有本地更新特性的NVM介质来存储,相对于将映射项存储到闪存介质而言,消除了映射项异地更新所带来的写放大问题,降低了异地更新时复制并转移映射项带来的时间开销,同时与传统闪存设备相比,采用这种NVM介质存储Mapping区的读写速率将会明显提高;由于DRAM设备相对其他存储设备存取速度更快,将数据频繁存取的操作放到DRAM完成,提高了***运行效率,充分考虑到数据访问局部性原理,以Block为单位取出映射项备份到缓存,避免了频繁地到Mapping区中检索映射项,提高了***运行效率,通过部分写回策略,当C-Cache中的某个Block需要迁移出Cache时,只将新生成的和更新的映射项写回Mapping区,在保证数据一致性的同时减少了写回NVM设备的数据量,提高了写回时间效率。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (10)
1.一种面向大规模非易失性存储介质的缓存方法,其特征在于,所述方法包括以下步骤:
S1、根据用户命令请求判断其为目标映射项写命令请求或目标映射项读命令请求,当判断所述命令请求为目标映射项写命令请求时执行S2;当判断所述命令请求为目标映射项读命令请求时执行S3;
S2、将目标映射项末尾标志位置为0,再将目标映射项根据其逻辑地址前缀存入H-Cache区中;
S3、获取目标映射项读命令请求中的逻辑地址,判断H-Cache中是否有所述逻辑地址对应的目标映射项,当判断结果为是时,输出所述目标映射项对应的物理地址;当判断结果为否时,检索C-Cache中是否有所述逻辑地址对应的目标映射项,
当检索结果为是时,输出所述目标映射项对应的物理地址,当检索结果为否时,在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址。
2.根据权利要求1所述的面向大规模非易失性存储介质的缓存方法,其特征在于,步骤S2,具体包括:
S20、将目标映射项末尾标志位置为0;
S21、将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树中,判断H-Cache区内剩余空间是否小于预设阈值A,当判断结果为是时,对H-Cache区中的原有映射项进行迁移,执行S22;当判断结果为否时,不进行操作;
S22、将H-Cache区中最长时间没被访问的映射项迁移到C-Cache区的压缩前缀完全二叉树中,判断C-Cache区内剩余空间是否小于预设阈值B,当判断结果为是时,将C-Cache区中的Block块按照访问次数排序,并逐项检查访问次数最少的Block块中映射项的标志位为0或1,若标志位为0,将该映射项迁移到Mapping区中,再将该映射项标志位置为1,若标志位为1,删除该映射项;当判断结果为否时,不进行操作。
3.根据权利要求2所述的面向大规模非易失性存储介质的缓存方法,其特征在于,在步骤S21中,所述将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树之前,还包括:通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
S200、建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
S201、将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
S202、再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
S203、重复步骤S202操作,直至H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树。
4.根据权利要求1所述的面向大规模非易失性存储介质的缓存方法,其特征在于,在步骤S3中,在判断H-Cache中是否有所述逻辑地址对应的目标映射项之前,包括:通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
S210、建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
S211、将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
S212、再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
S213、重复步骤S212操作,直至H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树;
在步骤S3中,通过非压缩前缀完全二叉树检索算法判断H-Cache中是否有所述逻辑地址对应的目标映射项,其中,所述非压缩前缀完全二叉树检索算法具体包括:
S300、接收目标映射项的逻辑地址;
S301、根据H-Cache区前缀完全二叉树的高度k,取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S302、检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,执行S303;
S303、令k=k-1,执行S301、S302操作,直至K=1,执行S304;
S304、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述非压缩前缀完全二叉树中不存在;
在步骤S3中,所述检索C-Cache中是否有所述逻辑地址对应的目标映射项之前,还包括:通过压缩前缀完全二叉树构建方法建立C-Cache区的压缩前缀完全二叉树;所述在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址之前,还包括:通过压缩前缀完全二叉树构建方法建立Mapping区的压缩前缀完全二叉树;其中,所述压缩前缀完全二叉树构建方法,具体包括:
S310、建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为M,其中,1<M;
S311、将需要存入树中的映射项的逻辑地址首位设置为0,将第一个映射项存入所述Block块中并执行数据压缩;
S312、解压缩所述Block块,再逐项存入新的映射项到所述Block块中,当所述Block块中的映射项数目已达设定阈值M时,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
S313、重复步骤S312操作,直至需要存入树中的映射项全部存入树后,通过虚拟节点补全所述树,得到压缩前缀完全二叉树;
在步骤S3中,通过压缩前缀完全二叉树检索算法检索C-Cache中是否有所述逻辑地址对应的目标映射项,且通过压缩前缀完全二叉树检索算法检索Mapping区中是否有所述逻辑地址对应的目标映射项,其中,所述压缩前缀完全二叉树检索算法具体包括:
S320、接收目标映射项的逻辑地址;
S321、根据C-Cache区或Mapping区中压缩前缀完全二叉树的高度k取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S322、检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,解压缩所述Block块并返回目标映射项的逻辑地址对应的物理地址,再压缩所述Block块;当检索结果为否时,执行S323;
S323、令k=k-1,执行S321、S322操作,直至K=1,执行S324;
S324、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述压缩前缀完全二叉树中不存在。
5.根据权利要求1所述的面向大规模非易失性存储介质的缓存方法,其特征在于,在步骤S3中,所述检索C-Cache中是否有所述逻辑地址对应的目标映射项,当检索结果为是时,输出所述目标映射项对应的物理地址过程中,具体包括:记录此次检索时间,当预设时间内所述逻辑地址对应的目标映射项被再次被检索到时,将所述目标映射项转移到H-Cache区;
在步骤S3中,所述在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址过程中,还包括:在Mapping区中检索所述逻辑地址对应的目标映射项所在的Block块,并将所述Block块中目标映射项备份到H-Cache区,将所述Block块中其他映射项备份到C-Cache区。
6.一种面向大规模非易失性存储介质的缓存***,其特征在于,包括:
判断模块,用于根据用户命令请求判断其为目标映射项写命令请求或目标映射项读命令请求;
写命令模块,用于当判断模块判断所述命令请求为目标映射项写命令请求时,将目标映射项末尾标志位置为0,再将目标映射项根据其逻辑地址前缀存入H-Cache区中;
读命令模块,用于当判断模块判断所述命令请求为目标映射项读命令请求时,获取目标映射项读命令请求中的逻辑地址,判断H-Cache中是否有所述逻辑地址对应的目标映射项,当判断结果为是时,输出所述目标映射项对应的物理地址;当判断结果为否时,检索C-Cache中是否有所述逻辑地址对应的目标映射项,
当检索结果为是时,输出所述目标映射项对应的物理地址,当检索结果为否时,在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址。
7.根据权利要求6所述的面向大规模非易失性存储介质的缓存***,其特征在于,所述写命令模块包括:标志子模块、判断子模块、处理子模块、写入子模块;
标志子模块,用于将目标映射项末尾标志位置为0;
判断子模块,用于判断H-Cache区内剩余空间是否小于预设阈值A;
处理子模块,用于当判断子模块的判断结果为是时,将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树中,对H-Cache区中的原有映射项进行迁移,将最长时间没被访问的原有映射项迁移到C-Cache区中,再判断C-Cache区内剩余空间是否小于预设阈值B,当判断结果为是时,将C-Cache区中的Block块按照访问次数排序,并检查访问次数最少的Block块中映射项的标志位为0或1,若标志位为0,将该映射项写到Mapping区中,再将该映射项标志位置为1,若标志位为1,删除该映射项;当判断结果为否时,不进行任何操作;
写入子模块,用于当判断子模块的判断结果为否时,将目标映射项根据其逻辑地址前缀存入H-Cache区的非压缩前缀完全二叉树中。
8.根据权利要求7所述的面向大规模非易失性存储介质的缓存***,其特征在于,所述写命令模块,还用于:在判断H-Cache中是否有所述逻辑地址对应的目标映射项之前,通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
将H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树。
9.根据权利要求6所述的面向大规模非易失性存储介质的缓存***,其特征在于,所述读命令模块,具体用于:在判断H-Cache中是否有所述逻辑地址对应的目标映射项之前,通过非压缩前缀完全二叉树构建方法建立H-Cache区的非压缩前缀完全二叉树,其中,所述非压缩前缀完全二叉树构建方法,具体包括:
建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为1;
将H-Cache区中需要存入树中的映射项的逻辑地址首位设置为0,并将第一个映射项存入所述Block块中;
再存入一个新的映射项到所述Block块中,所述Block块存储的映射项数量已满,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
将H-Cache区中需要存入树中的映射项全部存入树中后,通过虚拟节点补全所述树,得到非压缩前缀完全二叉树;
通过非压缩前缀完全二叉树检索算法判断H-Cache中是否有所述逻辑地址对应的目标映射项,其中,所述非压缩前缀完全二叉树检索算法具体包括:
S400、接收目标映射项的逻辑地址;
S401、根据H-Cache区前缀完全二叉树的高度k,取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S402、检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,执行S403;
S403、令k=k-1,执行S401、S402操作,直至K=1,执行S404;
S404、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块中是否存储目标映射项的逻辑地址,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述非压缩前缀完全二叉树中不存在;
在检索C-Cache中是否有所述逻辑地址对应的目标映射项之前,通过压缩前缀完全二叉树构建方法建立C-Cache区的压缩前缀完全二叉树;在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址之前,通过压缩前缀完全二叉树构建方法建立Mapping区的压缩前缀完全二叉树;其中,所述压缩前缀完全二叉树构建方法,包括:
建立一个Block块作为根节点,并设置Block块前缀为0;其中,所述Block块存储的映射项数量为M,其中,1<M;
将需要存入树中的映射项的逻辑地址首位设置为0,将第一个映射项存入所述Block块中并执行数据压缩;
解压缩所述Block块,再逐项存入新的映射项到所述Block块中,当所述Block块中的映射项数目已达设定阈值M时,将所述Block块***出两个子节点,两个子Block块节点的前缀分别设置为00和01,然后将原来前缀为0的Block块节点中的映射项逐项检查其逻辑地址的前两位,将逻辑地址前两位为00的映射项转移到前缀为00的子Block块节点中,将逻辑地址前两位为01的映射项转移到前缀为01的子Block块节点中,最后将新存入的映射项根据其逻辑地址前两位存入相应的子Block块节点中;
将需要存入树中的映射项全部存入树后,通过虚拟节点补全所述树,得到压缩前缀完全二叉树;
通过压缩前缀完全二叉树检索算法检索C-Cache中是否有所述逻辑地址对应的目标映射项,且通过压缩前缀完全二叉树检索算法检索Mapping区中是否有所述逻辑地址对应的目标映射项,其中,所述压缩前缀完全二叉树检索算法具体包括:
S410、接收目标映射项的逻辑地址;
S411、根据C-Cache区或Mapping区中压缩前缀完全二叉树的高度k取目标映射项的逻辑地址前k位,并利用二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号;
S412、检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,解压缩所述Block块并返回目标映射项的逻辑地址对应的物理地址,再压缩所述Block块;当检索结果为否时,执行S413;
S413、令k=k-1,执行S411、S412操作,直至K=1,执行S414;
S414、根据目标映射项的逻辑地址前1位和二叉树Block块序号快速计算算法,计算得到目标映射项可能存在的Block块号,检索所述Block块的Bloom filter中是否含有目标映射项的存储标记,当检索结果为是时,返回目标映射项的逻辑地址对应的物理地址;当检索结果为否时,表示目标映射项的逻辑地址在所述压缩前缀完全二叉树中不存在。
10.根据权利要求6所述的面向大规模非易失性存储介质的缓存***,其特征在于,所述读命令模块,还用于:检索C-Cache中是否有所述逻辑地址对应的目标映射项,当检索结果为是时,输出所述目标映射项对应的物理地址过程中,记录此次检索时间,当预设时间内所述逻辑地址对应的目标映射项被再次被检索到时,将所述目标映射项转移到H-Cache区;
在Mapping区中检索所述逻辑地址对应的目标映射项并输出所述目标映射项对应的物理地址过程中,在Mapping区中检索所述逻辑地址对应的目标映射项所在的Block块,并将所述Block块中目标映射项备份到H-Cache区,将所述Block块中其他映射项备份到C-Cache区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710141173.9A CN106776361B (zh) | 2017-03-10 | 2017-03-10 | 一种面向大规模非易失性存储介质的缓存方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710141173.9A CN106776361B (zh) | 2017-03-10 | 2017-03-10 | 一种面向大规模非易失性存储介质的缓存方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106776361A true CN106776361A (zh) | 2017-05-31 |
CN106776361B CN106776361B (zh) | 2020-07-10 |
Family
ID=58961930
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710141173.9A Active CN106776361B (zh) | 2017-03-10 | 2017-03-10 | 一种面向大规模非易失性存储介质的缓存方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106776361B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019985A (zh) * | 2017-12-29 | 2019-07-16 | 上海全土豆文化传播有限公司 | 索引文件的建立、查询方法及装置 |
CN110377233A (zh) * | 2019-07-22 | 2019-10-25 | 深圳忆联信息***有限公司 | Ssd读性能优化方法、装置、计算机设备及存储介质 |
CN113792171A (zh) * | 2021-11-15 | 2021-12-14 | 西安热工研究院有限公司 | 基于内存管理的图像检索方法、***、设备及存储介质 |
CN116886719A (zh) * | 2023-09-05 | 2023-10-13 | 苏州浪潮智能科技有限公司 | 存储***的数据处理方法、装置、存储***、设备及介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7069390B2 (en) * | 2003-09-04 | 2006-06-27 | International Business Machines Corporation | Implementation of a pseudo-LRU algorithm in a partitioned cache |
CN103019963A (zh) * | 2012-12-31 | 2013-04-03 | 华为技术有限公司 | 一种高速缓存的映射方法及存储设备 |
CN103514249A (zh) * | 2013-06-20 | 2014-01-15 | 易乐天 | 一种数据自精简方法和***及存储装置 |
US20140032818A1 (en) * | 2012-07-30 | 2014-01-30 | Jichuan Chang | Providing a hybrid memory |
US20150205724A1 (en) * | 2014-01-20 | 2015-07-23 | Honeywell International Inc. | System and method of cache partitioning for processors with limited cached memory pools |
WO2016065610A1 (zh) * | 2014-10-31 | 2016-05-06 | 华为技术有限公司 | 访问文件的方法、分布式存储***和存储节点 |
CN105786721A (zh) * | 2014-12-25 | 2016-07-20 | 研祥智能科技股份有限公司 | 一种内存地址映射管理方法及处理器 |
CN105786717A (zh) * | 2016-03-22 | 2016-07-20 | 华中科技大学 | 软硬件协同管理的dram-nvm层次化异构内存访问方法及*** |
US20160224467A1 (en) * | 2012-11-08 | 2016-08-04 | International Business Machines Corporation | Hierarchical cache structure and handling thereof |
CN105930356A (zh) * | 2016-04-08 | 2016-09-07 | 上海交通大学 | 日志型异构混合内存文件***的实现方法 |
CN105975215A (zh) * | 2016-05-25 | 2016-09-28 | 深圳大学 | 一种基于Ondemand算法的STL映射表管理方法 |
CN106055679A (zh) * | 2016-06-02 | 2016-10-26 | 南京航空航天大学 | 一种多层次缓存感知型索引方法 |
-
2017
- 2017-03-10 CN CN201710141173.9A patent/CN106776361B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7069390B2 (en) * | 2003-09-04 | 2006-06-27 | International Business Machines Corporation | Implementation of a pseudo-LRU algorithm in a partitioned cache |
US20140032818A1 (en) * | 2012-07-30 | 2014-01-30 | Jichuan Chang | Providing a hybrid memory |
US20160224467A1 (en) * | 2012-11-08 | 2016-08-04 | International Business Machines Corporation | Hierarchical cache structure and handling thereof |
CN103019963A (zh) * | 2012-12-31 | 2013-04-03 | 华为技术有限公司 | 一种高速缓存的映射方法及存储设备 |
CN103514249A (zh) * | 2013-06-20 | 2014-01-15 | 易乐天 | 一种数据自精简方法和***及存储装置 |
US20150205724A1 (en) * | 2014-01-20 | 2015-07-23 | Honeywell International Inc. | System and method of cache partitioning for processors with limited cached memory pools |
WO2016065610A1 (zh) * | 2014-10-31 | 2016-05-06 | 华为技术有限公司 | 访问文件的方法、分布式存储***和存储节点 |
CN105786721A (zh) * | 2014-12-25 | 2016-07-20 | 研祥智能科技股份有限公司 | 一种内存地址映射管理方法及处理器 |
CN105786717A (zh) * | 2016-03-22 | 2016-07-20 | 华中科技大学 | 软硬件协同管理的dram-nvm层次化异构内存访问方法及*** |
CN105930356A (zh) * | 2016-04-08 | 2016-09-07 | 上海交通大学 | 日志型异构混合内存文件***的实现方法 |
CN105975215A (zh) * | 2016-05-25 | 2016-09-28 | 深圳大学 | 一种基于Ondemand算法的STL映射表管理方法 |
CN106055679A (zh) * | 2016-06-02 | 2016-10-26 | 南京航空航天大学 | 一种多层次缓存感知型索引方法 |
Non-Patent Citations (4)
Title |
---|
HU WEIWU 等: "A Lock-Based Cache Coherence Protocol for Scope Consistency", 《J. OF COMPUT. SCI.&TECHNOL.》 * |
ZHI-FENG YU 等: "Queue Waiting Time Aware Dynamic Workflow Scheduling in Multicluster Environments", 《JOURNAL OF COMPUTER SCIENCE AND TECHNOLOGY》 * |
张琦等: "一种优化的闪存地址映射方法", 《软件学报》 * |
高珂等: "多核***共享内存资源分配和管理研究", 《计算机学报》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019985A (zh) * | 2017-12-29 | 2019-07-16 | 上海全土豆文化传播有限公司 | 索引文件的建立、查询方法及装置 |
CN110019985B (zh) * | 2017-12-29 | 2021-09-24 | 阿里巴巴(中国)有限公司 | 索引文件的建立、查询方法及装置 |
CN110377233A (zh) * | 2019-07-22 | 2019-10-25 | 深圳忆联信息***有限公司 | Ssd读性能优化方法、装置、计算机设备及存储介质 |
CN110377233B (zh) * | 2019-07-22 | 2022-03-29 | 深圳忆联信息***有限公司 | Ssd读性能优化方法、装置、计算机设备及存储介质 |
CN113792171A (zh) * | 2021-11-15 | 2021-12-14 | 西安热工研究院有限公司 | 基于内存管理的图像检索方法、***、设备及存储介质 |
CN113792171B (zh) * | 2021-11-15 | 2022-02-18 | 西安热工研究院有限公司 | 基于内存管理的图像检索方法、***、设备及存储介质 |
CN116886719A (zh) * | 2023-09-05 | 2023-10-13 | 苏州浪潮智能科技有限公司 | 存储***的数据处理方法、装置、存储***、设备及介质 |
CN116886719B (zh) * | 2023-09-05 | 2024-01-23 | 苏州浪潮智能科技有限公司 | 存储***的数据处理方法、装置、存储***、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106776361B (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103019958B (zh) | 使用数据属性来管理固态存储器里的数据的方法 | |
US8225029B2 (en) | Data storage processing method, data searching method and devices thereof | |
CN104298610B (zh) | 资料储存***及其管理方法 | |
CN104268094B (zh) | 一种优化的闪存地址映射方法 | |
CN103458023B (zh) | 分布式闪存存储*** | |
CN106776361A (zh) | 一种面向大规模非易失性存储介质的缓存方法和*** | |
US8037112B2 (en) | Efficient access of flash databases | |
CN105242871B (zh) | 一种数据写入方法及装置 | |
CN102364474B (zh) | 用于机群文件***的元数据存储***和管理方法 | |
CN104969170B (zh) | 层次化存储***、存储控制器以及代替层次间的数据移动的方法 | |
CN103544269B (zh) | 目录的存储方法、查询方法及节点控制器 | |
CN109992530A (zh) | 一种固态驱动器设备及基于该固态驱动器的数据读写方法 | |
CN102147768B (zh) | 存储器、固态缓存***及缓存数据处理方法 | |
CN102682110B (zh) | 面向大规模空间信息的高性能缓存设计方法 | |
CN109062505A (zh) | 一种缓存策略写入分层硬件架构下的写性能优化方法 | |
CN106201916B (zh) | 一种面向ssd的非易失缓存方法 | |
TW201636845A (zh) | 記憶體裝置與其操作方法 | |
CN105955664B (zh) | 一种基于段结构的瓦记录转换层的读写方法 | |
CN107784121A (zh) | 一种基于非易失内存的日志文件***的小写优化方法 | |
CN105938447B (zh) | 数据备份装置及方法 | |
CN113626431A (zh) | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及*** | |
CN107589908A (zh) | 一种基于固态盘缓存***中非对齐更新数据的合并方法 | |
CN106055679A (zh) | 一种多层次缓存感知型索引方法 | |
CN113253926A (zh) | 提升新型存储器的查询和存储性能的存储内索引构建方法 | |
CN109814809A (zh) | 数据压缩方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |