CN109739780A - 基于页级映射的动态二级缓存闪存转换层地址映射方法 - Google Patents
基于页级映射的动态二级缓存闪存转换层地址映射方法 Download PDFInfo
- Publication number
- CN109739780A CN109739780A CN201811374675.7A CN201811374675A CN109739780A CN 109739780 A CN109739780 A CN 109739780A CN 201811374675 A CN201811374675 A CN 201811374675A CN 109739780 A CN109739780 A CN 109739780A
- Authority
- CN
- China
- Prior art keywords
- cache
- mapping
- page
- address
- request
- 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.)
- Pending
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提出一种基于页级映射的动态二级缓存闪存转换层地址映射方法,解决了目前页级地址映射未能充分利用顺序I/O局部性的问题以及在随机I/O较多时I/O性能下降的问题。本发明的方法利用顺序I/O的时间局部性和空间局部性,分别设置一级缓存L1Cache,二级缓存L2Cache,在两级缓存上采用不同的缓存管理策略,一级缓存L1Cache用来缓存单个地址映射项,二级缓存L2Cache用来缓存整个映射页;在二级缓存上采用空间局部性检测法,对当前一定数量的I/O请求进行检测,如果检测到当前的I/O请求具有较强的空间局部性,则提取相应的映射页到二级缓存L2Cache中;同时一级缓存L1Cache根据缓存命中率来动态调整一级缓存大小,保证随机I/O模式下的I/O性能。
Description
技术领域
本发明属于计算机科学技术领域,尤其涉及一种基于页级映射的动态二级缓存闪存转换层地址映射方法。
背景技术
NAND Flash因为其低功耗、非易失性以及出色的IOPS等特点在很多领域被大量使用,比如嵌入式设备,高性能服务器。其I/O性能远远高于传统的机械硬盘,在一定程度上弥补了计算机***中CPU和I/O的速度差距,其容量目前每年以成倍的速度增长。与传统机械硬盘的结构截然不同,NAND Flash支持随机寻址,以页为读写的基本单位,以块作为擦除的基本单位,并且只能进行异地更新,不能直接对数据进行重写,所以目前的操作***支持NAND Flash存储设备有两种普遍的做法,一种是为NAND Flash定制专用的文件***,另一种是在NAND Flash内部增加一层闪存转换层,负责地址翻译以及其他管理工作,闪存转换层使得NAND Flash可以当做机械硬盘来使用而不用对现有的文件***做任何修改。
NAND Flash内部存储是由块(block)和页(page)组成的,典型的NAND Flash每个page的大小为4KB,一个块包含64个page。NAND Flash读写的基本单位为page,当上层请求数据时,请求的地址为逻辑地址,NAND Flash因为异地更新的特性,当同一逻辑地址的数据被修改后实际的物理存储地址也会相应改变,因此需要一张地址映射表来完成上层逻辑地址到NAND Flash物理地址的转换。地址映射方法可以分为三类:基于页映射,基于块映射,以及混合映射。页级映射主要的优点是转换效率较高,因为映射单位和读写单位一致,所以一次转换就可以得到页面的物理地址,但是由于目前NAND Flash容量越来越大,所以映射项所占的空间大小也越来越大,以512GB NAND Flash为例,page大小为4KB,每一个地址映射项大小为10Byte,则地址映射表的大小会为1280MB,超过1GB,这对于NAND Flash中的SRAM空间占用是非常严重的。针对这个问题目前的页级映射采用的解决方式是使用缓存,将部分映射表缓存在SRAM中,减小了映射表对SRAM的占用,但是这些方法没有很好地利用顺序I/O的局部性,并且在随机I/O较多的情况下,缓存命中率很不理想,从而导致I/O性能下降。
发明内容
为了解决上述提出的问题,本发明提出一种基于页级映射的动态二级缓存闪存转换层地址映射方法,针对目前页级地址映射未能充分利用顺序I/O局部性的问题以及在随机I/O较多时I/O性能下降的问题,采用两级缓存,并在两级缓存上采用不同的缓存管理策略,充分利用了顺序I/O的时间局部性和空间局部性,同时我们结合了动态缓存调整来应对随机I/O较多的场景,既减少了对SRAM的占用,也提高了随机I/O模式下的缓存命中率及性能。
本发明的技术方案是:
1.基于页级映射的动态二级缓存闪存转换层地址映射方法,其特征在于,利用顺序I/O的时间局部性和空间局部性,分别设置一级缓存L1Cache,二级缓存L2Cache,在两级缓存上采用不同的缓存管理策略,一级缓存L1Cache用来缓存单个地址映射项,二级缓存L2Cache用来缓存整个映射页;在二级缓存上采用空间局部性检测法,对当前一定数量的I/O请求进行检测,如果检测到当前的I/O请求具有较强的空间局部性,则提取相应的映射页到二级缓存L2Cache中;同时一级缓存L1Cache根据缓存命中率来动态调整一级缓存大小,保证随机I/O模式下的I/O性能。
2.所述方法包括以下步骤:
步骤1:接收上层I/O请求并在一级缓存L1Cache中查找请求对应的地址映射项,如果命中缓存,则根据目前缓存命中率的高低决定是否需要减小一级缓存L1Cache的大小,如果需要减小,则将脏缓存项以及不常用的缓存项打包写回全局映射表GMT中,然后跳到步骤7,如果未命中则进行下一步;
步骤2:根据I/O请求的逻辑地址LPN计算逻辑映射页号LMP,通过LMP查询映射表目录GTD,查看二级缓存L2Cache中是否缓存了该请求地址映射项对应的映射页,如果已经缓存,跳到步骤7,否则进行下一步;
步骤3:在映射表目录GTD中查找该请求地址映射项在全局映射表GMT中的物理页地址PMP,并根据目前缓存命中率的高低决定是否需要增大一级缓存L1Cache的大小,如果需要增大,则将一级缓存L1Cache增加一个映射页的大小;
步骤4:根据空间局部性检测法判断目前的请求是否有较强的空间局部性,如果没有则直接进行下一步,否则将请求的地址映射项所在的映射页从全局映射表GMT中提取出来;此时如果二级缓存L2Cache已满,则需要根据“请求距离”找出要进行替换的映射页,然后将新的映射页放入二级缓存L2Cache中,如果未满则直接将新的映射页放入二级缓存L2Cache;
步骤5:如果一级缓存L1Cache未满,则直接将该请求的地址映射项放入一级缓存L1Cache中,然后跳到步骤7,如果已满,则根据Segment LRU策略找出需要换出的缓存项进行替换;
步骤6:如果一级缓存L1Cache的替换项未被修改过则直接进行下一步,如果修改过则查看该映射项对应的映射页在二级缓存L2Cache中是否存在,如果存在则修改二级缓存对应的映射项并将该映射页标记为脏,否则直接写回全局映射表GMT中;
步骤7:根据请求的地址映射项对NAND Flash进行I/O操作。
3.其中,步骤1中动态减小一级缓存L1Cache的具体步骤如下:
步骤1.1:在一级缓存L1Cache的任意段中收集k个脏缓存项以及最不常用的缓存项,其中k为每个映射页可以存储的地址映射项个数;
步骤1.2:将收集的k个缓存项写入到全局映射表GMT中;
步骤1.3:回收这k个缓存项占用的空间,然后调整任意段中剩余缓存项的位置。
4.其中,步骤3中动态增大一级缓存L1Cache的具体步骤如下:
步骤3.1:在闪存的SRAM中分配新的缓冲区,大小为L1Cache中原来任意段的大小加上k,其中k为每个映射页可以存储的地址映射项个数;
步骤3.2:将原来任意段中缓存的地址映射项拷贝到新分配的空间中;
步骤3.3:回收原来的任意段占用的空间。
5.其中,步骤4中的空间局部性检测法的具体步骤如下:
步骤4.1:设置空间局部性阈值t,代表目前一段时间的请求落在同一映射页的比例;
步骤4.2:保存最近k个请求(r1,r2,r3,…,rk)的地址映射项所在的映射页号(r1/k,r2/k,…,rk/k),k为一个映射页可以存储的地址映射项的数量;
步骤4.3:在这些映射页号中找出出现频率最高的映射页号,计算此映射页号出现的比例r,与阈值t比较,如果比例r高于阈值t,则认为请求具有较强的空间局部性,否则目前的请求不具有空间局部性;
6.其中,步骤4中使用了“请求距离”来寻找二级缓存中的替换页,“请求距离”的含义如下:
定义当前请求的逻辑地址为Lp,每个映射页可以存储的地址映射项个数为k,二级缓存L2Cache可以存储的映射页数量为n,目前二级缓存L2Cache中缓存的映射页的页号为(p1,p2,p3,…,pn),则目前二级缓存L2Cache中各个映射页和当前请求的“请求距离”disi表示为:
根据空间局部性的特点,页号相差最大的可以看做距离最远的,即未来最不可能访问,假设换出页为victimpage,则换出页的计算公式为:
本发明的技术效果是:
本发明提出的一种基于页级映射的动态二级缓存闪存转换层地址映射方法,该算法基于页级地址映射的思想,提出了多级缓存以及动态缓存调整的优化方法。为了充分利用顺序I/O的时间局部性和空间局部性,本发明采用二级缓存,在二级缓存上使用了不同的缓存管理策略,在二级缓存上提出了空间局部性检测算法,同时根据缓存命中率来动态调整缓存大小以提高随机I/O的性能。最后我们实现了提出的闪存转换层地址映射算法并验证了算法对映射表缓存命中率以及I/O响应时间的优化。
与现有的技术相比,其主要优点是:
1、改进的缓存结构:设计了二级缓存用来充分利用其时间局部性和空间局部性,考虑到随机I/O对缓存命中率的影响,将一级缓存设计成动态可调整的,保证随机I/O较多时的缓存命中率。
2、优化的缓存回写策略:传统的地址映射方法会因为写操作而频繁修改映射页,增加了I/O响应时间。在本发明中,可以利用二级缓存来暂存一部分换出的脏缓存项,并且在缓存缩容时,可以将脏缓存项打包回写,降低了映射页的修改次数,提高了I/O性能。
与传统的页级地址映射方法区别在于:
(1)缓存结构及管理策略不同:传统的页级地址映射方法采用单一的缓存,难以保证多种负载下的缓存命中率。我们采用动态二级缓存的方法可以在保证多种I/O模式下的缓存命中率,在不同的缓存上采用不同的管理策略,保证了I/O请求局部性的充分利用。
(2)优化的I/O场景更复杂:传统的页级地址映射方法主要能够保证在顺序I/O场景下有较好的转换效率,但在随机I/O较多的环境下性能会严重下降。我们采用的方法不仅在顺序I/O模式下有好的性能,在随机I/O较多的场景下也能保持良好的性能,因此可以应用在复杂的I/O环境中。
附图说明
图1是本发明基于页级映射的动态二级缓存闪存转换层地址映射方法的结构示意图。
图2是本发明基于页级映射的动态二级缓存闪存转换层地址映射方法的流程图。
图3是L2Cache暂存L1Cache换出项的过程示意图。
图4是脏缓存项及不常用缓存项打包回写过程示意图。
图5是映射表目录GTD的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点表达地更加清楚明白,以下结合附图和具体实施步骤对本发明的实施例进行详细描述,但不作为对本发明的限定。
图1是本发明基于页级映射的动态二级缓存闪存转换层地址映射方法的结构示意图。
本发明利用顺序I/O的时间局部性和空间局部性,分别设置一级缓存L1Cache,二级缓存L2Cache,在两级缓存上采用不同的缓存管理策略,一级缓存L1Cache用来缓存单个地址映射项,二级缓存L2Cache用来缓存整个映射页;在二级缓存上采用空间局部性检测法,对当前一定数量的I/O请求进行检测,如果检测到当前的I/O请求具有较强的空间局部性,则提取相应的映射页到二级缓存L2Cache中;同时一级缓存L1Cache根据缓存命中率来动态调整一级缓存大小,保证随机I/O模式下的I/O性能。
主要包含4个部分,分别是一级缓存L1Cache,二级缓存L2Cache,映射表目录GTD以及全局映射表GMT。其中一级缓存L1Cache、二级缓存L2Cache和映射表目录GTD在NAND Flash的SRAM区域中存储,全局映射表在NAND Flash的Flash区域中存储。整个NAND Flash的块划分为数据块和映射块,映射块用来存储所有的映射表项,数据块用来存储应用数据。一级映射缓存用来缓存单个地址映射项;为了利用I/O请求的空间局部性,所以我们引入了二级缓存,用来缓存整个映射页,我们会对当前一定数量的I/O请求进行观察,如果观察到请求具有较强的空间局部性,则提取相应的映射页提取到二级缓存中;映射表目录用于查找地址映射页在NAND Flash映射块中存储的位置,当两级缓存均未命中时,需要在映射表目录中查找该映射项在NAND Flash中存储页面的物理地址;全局映射表存储在NAND Flash的映射页中,它存储所有的地址映射项。
图2是本发明基于页级映射的动态二级缓存闪存转换层地址映射方法的流程图。
包括以下步骤:
步骤1:接收上层I/O请求并在一级缓存L1Cache中查找请求对应的地址映射项,如果命中缓存,则根据目前缓存命中率的高低决定是否需要减小一级缓存L1Cache的大小,如果需要减小,则将脏缓存项以及不常用的缓存项打包写回全局映射表GMT中,然后跳到步骤7,如果未命中则进行下一步;
步骤2:根据I/O请求的逻辑地址LPN计算逻辑映射页号LMP,通过LMP查询映射表目录GTD,查看二级缓存L2Cache中是否缓存了该请求地址映射项对应的映射页,如果已经缓存,跳到步骤7,否则进行下一步;
步骤3:在映射表目录GTD中查找该请求地址映射项在全局映射表GMT中的物理页地址PMP,并根据目前缓存命中率的高低决定是否需要增大一级缓存L1Cache的大小,如果需要增大,则将一级缓存L1Cache增加一个映射页的大小;
步骤4:根据空间局部性检测法判断目前的请求是否有较强的空间局部性,如果没有则直接进行下一步,否则将请求的地址映射项所在的映射页从全局映射表GMT中提取出来;此时如果二级缓存L2Cache已满,则需要根据“请求距离”找出要进行替换的映射页,然后将新的映射页放入二级缓存L2Cache中,如果未满则直接将新的映射页放入二级缓存L2Cache;
步骤5:如果一级缓存L1Cache未满,则直接将该请求的地址映射项放入一级缓存L1Cache中,然后跳到步骤7,如果已满,则根据Segment LRU策略找出需要换出的缓存项进行替换;
步骤6:如果一级缓存L1Cache的替换项未被修改过则直接进行下一步,如果修改过则查看该映射项对应的映射页在二级缓存L2Cache中是否存在,如果存在则修改二级缓存对应的映射项并将该映射页标记为脏,否则直接写回全局映射表GMT中;
步骤7:根据请求的地址映射项对NAND Flash进行I/O操作。
1.动态一级缓存设计
为了充分利用I/O请求的时间局部性,一级缓存L1Cache中的替换方法采用Segment LRU策略。但是这样在随机I/O较多的环境下的性能表现不太好,随机读写因为不具备局部性所以会导致请求频繁miss,从而频繁地读写Flash。针对这种情况,我们采用了动态调整缓存大小的方法,当请求命中率较低时,增大缓存的大小,当请求命中率较高时,适当减小缓存大小。这样既提高了随机I/O较多时的缓存命中率,减少了对Flash的读取次数,也保证了一般情况下映射表不会占用过多的SRAM空间。
因为Segment LRU策略将缓冲区分为了两个部分,因此动态增减缓存大小时需要考虑对那一部分进行扩缩容。因为动态缓存调整面向的是随机I/O较多的环境,随机I/O模式不具有局部性,大多数数据只会被访问一次。我们的缓存分段中保护段用于存储近期访问多次的数据,如果动态扩展保护段的大小,因为大多数数据都只访问一次,因此不会进入到保护段中,所以动态调整保护段的作用不大;如果动态扩展任意段,在随机I/O较多时,提取出的缓存项能更多地存储在任意段中。因此我们针对任意段进行动态扩展。
动态调整缓存的具体方法如下:对于每一次I/O请求记录是否命中,当请求次数到达一定数值后,计算缓存命中率p,设置一个命中率阈值T,如果缓存命中率p<T,则说明最近一段时间请求的缓存命中率比较低。同时为了避免频繁调整缓存大小,造成缓存数据频繁转移及SRAM空间分配,还设置了一个阈值M,当连续有M次统计满足p<T时,便说明此时缓存命中率不佳,随机I/O较多,需要增加缓存的大小,此时将一级缓存的任意段增加一个映射页所能容纳的地址映射项数目的大小。如果当出现连续M次的p>T时并且缓存大小大于初始值大小,则收集目前已经的脏缓存项,然后将脏缓存项以及不常用的缓存项所占用的空间回收,同时将脏缓存项回写到全局映射表中,减小以后替换缓存项时需要的回写次数。
2.二级缓存设计
一级缓存主要利用I/O请求的时间局部性以及保证随机I/O环境下的性能,二级缓存的设计主要是为了充分利用I/O的空间局部性,更全面地提升复杂负载下的I/O性能。二级缓存为了利用I/O的空间局部性,用于保存逻辑地址相邻的映射项,因此二级缓存以映射页而不是一个地址映射项作为存储单位。当请求未命中,需要从全局映射表中提取映射项时,根据目前一段时间的I/O请求是否具有较明显的空间局部性,决定是否提取相应的映射页。如果当前的请求模式具有较强的空间局部性,则将这个地址映射项所在的映射页都提取到二级缓存中,因为一个映射页中存储的都是逻辑地址相邻的映射项,所以根据空间局部性,这些相邻的地址项也很有可能会被访问。二级缓存映射页具体的提取方法如下:
当请求地址的映射项不在缓存中时,需要查找映射表目录GTD将对应的缓存项从Flash中提取出来,此时如果一级缓存L1Cache没有满则直接将对应的映射项放入一级缓存L1Cache中;如果一级缓存L1Cache已满,则根据segment LRU策略选择一个换出项并查找这一项是否在二级缓存L2Cache中,如果换出项在二级缓存L2Cache中并且此项已经修改过,则仅修改二级缓存L2Cache即可,等到将二级缓存L2Cache的页面换出时,再根据页面中的地址项是否修改过决定是否需要更新Flash中的映射页。如果换出项不在二级缓存L2Cache中,则写回Flash中。如果没有二级缓存L2Cache,则每一次换出脏缓存项时都会额外造成一次映射页的写操作,进而导致无效页的增加及空间的浪费。因此二级缓存L2Cache不仅利用了I/O的空间局部性,还减少了更新的地址映射项从缓存中造成的次数。
如果二级缓存L2Cache已满,则需要将已有的缓存页换出,换出页是根据离当前“请求距离”选出的。“请求距离”的含义如下:
定义当前请求的逻辑地址为Lp,每个映射页可以存储的地址映射项个数为k,二级缓存L2Cache可以存储的映射页数量为n,目前二级缓存L2Cache中缓存的映射页的页号为(p1,p2,p3,…,pn),则目前二级缓存L2Cache中各个映射页和当前请求的“请求距离”disi表示为:
根据空间局部性的特点,页号相差最大的可以看做距离最远的,即未来最不可能访问,假设换出页为victimpage,则换出页的计算公式为:
3.缓存回写机制
在NAND Flash中,写操作是比较耗时的,大约是读操作的20倍左右。我们的地址映射方法基于缓存,不能忽视缓存的回写对I/O请求的影响,因为缓存的回写会对NAND Flash产生额外的写操作,因此针对缓存回写的优化也是十分必要的。传统的基于缓存的页级映射方法在每一次脏缓存地址映射项换出时,都会对NAND Flash的映射块进行写入,因此当写请求较多且缓存命中率较低时,I/O请求会伴随着大量额外的映射页修改,这对I/O性能产生比较严重的影响。本发明采用二级缓存针对缓存回写进行了一些优化。首先,如图3所示,是L2Cache暂存L1Cache换出项的过程示意图。当一级缓存L1Cache发生脏缓存项的换出时,会检查二级缓存L2Cache中是否包含该缓存项对应的映射页,如果包含,则直接更新二级缓存L2Cache中的该地址映射项即可,等到需要二级缓存L2Cache发生映射页的换出时,根据映射页是否为脏,进行整个脏页的写入,因此比较明显地减少了地址映射区域的写入次数;其次,如图4所示,是脏缓存项及不常用缓存项打包回写过程示意图。在本发明设计的一级缓存进行动态减小时,会优先收集修改过的地址映射缓存项以及不常用的缓存项,然后一并打包进行映射块的写入,在一定程度上减少了地址映射区域的写入次数。两种针对缓存回写的优化减少了对映射页的写操作,减小了因额外写操作对I/O性能的影响。
4.请求处理流程
为了更清晰地介绍本发明的地址转换流程,首先对映射表目录具体结构进行说明,图5为映射表目录GMT的结构示意图。图5中LMP代表I/O请求地址映射项所在的逻辑映射页索引,PMP代表此逻辑映射页在NAND Flash映射页的物理地址,当请求的地址映射项不在缓存中时,可以首先由请求的逻辑地址LPN求出所处的逻辑映射页的编号,然后根据此编号查询映射表目录便可以得到实际存储此请求地址映射项的物理映射页号。
InRAM表示对应的地址映射页是否被提取到二级缓存中,Dirty表示提取到二级缓存之后其中的地址映射项是否被修改过,如果因为写操作被修改过,或者因为一级缓存缓存项换出而修改过,则Dirty标志生效。
因为闪存转换层在处理读请求和写请求时的流程不同,因此下面分别针对两种请求进行流程的说明:
1)读请求
读请求到达闪存转换层,首先查询一级缓存,如果命中缓存,则直接根据缓存的物理地址对NAND Flash进行读操作,然后根据预设条件决定是否要进行动态调整缓存;如果未命中缓存,根据请求的逻辑地址LPN计算出逻辑映射页号LMP,查询映射表目录GMT的InRAM标志位该映射页是否提取到二级缓存中,如果位于二级缓存中,则查询二级缓存得到地址映射项的物理页地址,进行读操作,否则根据GMT得到该请求地址映射项所在的物理页地址PMP,随后读取该地址映射页。根据空间局部性检测方法检测目前的请求是否具有较强的空间局部性,如果具有较强的空间局部性,则需要将映射页提取到二级缓存中,随后检查二级缓存是否已满,如果已满,则根据“请求距离”决定出要换出的地址映射页,随后进行替换,如果未满则直接提取到二级缓存中,如果不具有空间局部性,则不需要将此映射页提取到二级缓存中。完成二级缓存的相关操作后,需要将该请求的地址映射项放入到一级缓存中,如果一级缓存未满则直接将地址映射项放入到一级缓存中,如果一级缓存已满,则需要根据Segment LRU策略决定需要换出的缓存项,然后将请求的地址映射项放入一级缓存。然后根据预设条件决定是否要进行动态调整缓存,完成之后根据提取出的地址映射项进行数据读操作。
2)写请求
写请求大体流程和读操作一致,但由于NAND Flash异地更新的特性,因此要比读请求的处理流程更加复杂。
写请求到达闪存转换层,首先查询一级缓存,如果命中缓存,则直接寻找空闲页对NAND Flash进行写操作,随后更改缓存地址映射项的物理地址,如果二级缓存也缓存了该写请求对应的映射页,则也要修改二级缓存中请求对应的地址映射项,并将该映射页的Dirty标识为有效,然后根据预设条件决定是否要进行一级缓存的动态调整;如果未命中一级缓存,则根据请求的逻辑地址LPN计算出逻辑映射页号LMP,查询映射表目录GMT的InRAM标志位得到该请求对应的映射页是否提取到二级缓存中,如果位于二级缓存中,寻找空闲页进行写操作,随后根据新的写入地址更新二级缓存的地址映射页,并将映射表目录GMT该地址对应的映射页的Dirty置为有效;如果未命中二级缓存,则直接寻找空闲页写入数据,因为写入后,该请求逻辑地址对应的物理地址也发生了改变,因此更新NAND Flash中的全局映射表,即写入修改后的映射页,该映射页对应的物理地址发生了变化,因此修改映射表目录中该映射页对应的物理地址PMP。之后将该请求的地址映射项放入到一级缓存中,如果一级缓存未满则直接将地址映射项放入到一级缓存中,如果一级缓存已满,则需要根据Segment LRU策略决定需要换出的缓存项,然后将请求的地址映射项放入一级缓存。然后根据预设条件决定是否要进行动态调整缓存。
Claims (6)
1.一种基于页级映射的动态二级缓存闪存转换层地址映射方法,其特征在于,利用顺序I/O的时间局部性和空间局部性,分别设置一级缓存L1Cache,二级缓存L2Cache,在两级缓存上采用不同的缓存管理策略,一级缓存L1Cache用来缓存单个地址映射项,二级缓存L2Cache用来缓存整个映射页;在二级缓存上采用空间局部性检测法,对当前一定数量的I/O请求进行检测,如果检测到当前的I/O请求具有较强的空间局部性,则提取相应的映射页到二级缓存L2Cache中;同时一级缓存L1Cache根据缓存命中率来动态调整一级缓存大小,保证随机I/O模式下的I/O性能。
2.根据权利要求1所述的方法,其特征在于,包括以下步骤:
步骤1:接收上层I/O请求并在一级缓存L1Cache中查找请求对应的地址映射项,如果命中缓存,则根据目前缓存命中率的高低决定是否需要减小一级缓存L1Cache的大小,如果需要减小,则将脏缓存项以及不常用的缓存项打包写回全局映射表GMT中,减小L1Cache,然后跳到步骤7,如果未命中则进行下一步;
步骤2:根据I/O请求的逻辑地址LPN计算逻辑映射页号LMP,通过LMP查询映射表目录GTD,查看二级缓存L2Cache中是否缓存了该请求地址映射项对应的映射页,如果已经缓存,跳到步骤7,否则进行下一步;
步骤3:在映射表目录GTD中查找该请求地址映射项在全局映射表GMT中的物理页地址PMP,并根据目前缓存命中率的高低决定是否需要增大一级缓存L1Cache的大小,如果需要增大,则将一级缓存L1Cache增加一个映射页的大小;
步骤4:根据空间局部性检测法判断目前的请求是否有较强的空间局部性,如果没有则直接进行下一步,否则将请求的地址映射项所在的映射页从全局映射表GMT中提取出来;此时如果二级缓存L2Cache已满,则需要根据“请求距离”找出要进行替换的映射页,然后将新的映射页放入二级缓存L2Cache中,如果未满则直接将新的映射页放入二级缓存L2Cache;
步骤5:如果一级缓存L1Cache未满,则直接将该请求的地址映射项放入一级缓存L1Cache中,然后跳到步骤7,如果已满,则根据Segment LRU算法找出需要换出的缓存项进行替换;
步骤6:如果一级缓存L1Cache的替换项未被修改过则直接进行下一步,如果修改过则查看该映射项对应的映射页在二级缓存L2Cache中是否存在,如果存在则修改二级缓存对应的映射项并将该映射页标记为脏,否则直接写回全局映射表GMT中;
步骤7:根据请求的地址映射项对NAND Flash进行I/O操作。
3.根据权利要求2所述方法,其特征在于,所述步骤1中,动态减小一级缓存L1Cache的步骤如下:
步骤1.1:在一级缓存L1Cache的任意段中收集k个脏缓存项以及最不常用的缓存项,其中k为每个映射页可以存储的地址映射项个数;
步骤1.2:将收集的k个缓存项写入到全局映射表GMT中;
步骤1.3:回收这k个缓存项占用的空间,然后调整任意段中剩余缓存项的位置。
4.根据权利要求2所述方法,其特征在于,所述步骤3中,动态增大一级缓存L1Cache的步骤如下:
步骤3.1:在闪存的SRAM中分配新的缓冲区,大小为L1Cache中原来任意段的大小加上k,其中k为每个映射页可以存储的地址映射项个数;
步骤3.2:将原来任意段中缓存的地址映射项拷贝到新分配的空间中;
步骤3.3:回收原来的任意段占用的空间。
5.根据权利要求2所述方法,其特征在于,所述步骤4中的空间局部性检测法的具体步骤如下:
步骤4.1:设置空间局部性阈值t,代表目前一段时间的请求落在同一映射页的比例;
步骤4.2:保存最近k个请求(r1,r2,r3,…,rk)的地址映射项所在的映射页号(r1/k,r2/k,…,rk/k),k为一个映射页可以存储的地址映射项的数量;
步骤4.3:在这些映射页号中找出出现频率最高的映射页号,计算此映射页号出现的比例r,与阈值t比较,如果比例r高于阈值t,则认为请求具有较强的空间局部性,否则目前的请求不具有空间局部性。
6.根据权利要求2所述的方法,其特征在于,所述步骤4中使用了“请求距离”来寻找二级缓存中的替换页,“请求距离”的含义如下:
定义当前请求的逻辑地址为Lp,每个映射页可以存储的地址映射项个数为k,二级缓存L2Cache可以存储的映射页数量为n,目前二级缓存L2Cache中缓存的映射页的页号为(p1,p2,p3,…,pn),则目前二级缓存L2Cache中各个映射页和当前请求的“请求距离”disi表示为:
根据空间局部性的特点,页号相差最大的可以看做距离最远的,即未来最不可能访问,假设换出页为victimpage,则换出页的计算公式为:
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811374675.7A CN109739780A (zh) | 2018-11-20 | 2018-11-20 | 基于页级映射的动态二级缓存闪存转换层地址映射方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811374675.7A CN109739780A (zh) | 2018-11-20 | 2018-11-20 | 基于页级映射的动态二级缓存闪存转换层地址映射方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109739780A true CN109739780A (zh) | 2019-05-10 |
Family
ID=66355726
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811374675.7A Pending CN109739780A (zh) | 2018-11-20 | 2018-11-20 | 基于页级映射的动态二级缓存闪存转换层地址映射方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109739780A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110413228A (zh) * | 2019-07-09 | 2019-11-05 | 江苏芯盛智能科技有限公司 | 一种映射表管理方法、***及电子设备和存储介质 |
CN110413537A (zh) * | 2019-07-25 | 2019-11-05 | 杭州电子科技大学 | 一种面向混合固态硬盘的闪存转换层及转换方法 |
CN111258924A (zh) * | 2020-01-17 | 2020-06-09 | 中国科学院国家空间科学中心 | 一种基于星载固态存储***自适应闪存转换层的映射方法 |
CN111506517A (zh) * | 2020-03-05 | 2020-08-07 | 杭州电子科技大学 | 一种基于访问局部性的闪存页级地址映射方法及其*** |
CN111813709A (zh) * | 2020-07-21 | 2020-10-23 | 北京计算机技术及应用研究所 | 一种基于fpga存算一体架构的高速并行存储方法 |
CN112685337A (zh) * | 2021-01-15 | 2021-04-20 | 浪潮云信息技术股份公司 | 一种存储集群中分级缓存读写数据的方法 |
CN113377690A (zh) * | 2021-06-28 | 2021-09-10 | 福建师范大学 | 一种适应不同大小的用户请求的固态硬盘处理方法 |
CN113419976A (zh) * | 2021-06-29 | 2021-09-21 | 华中科技大学 | 一种基于分类预测的自适应分段缓存方法及*** |
CN117708000A (zh) * | 2024-02-05 | 2024-03-15 | 成都佰维存储科技有限公司 | 数据的随机写入方法、装置、电子设备及存储介质 |
CN118170327A (zh) * | 2024-05-14 | 2024-06-11 | 苏州元脑智能科技有限公司 | 一种固态硬盘地址映射方法、装置以及产品 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1499382A (zh) * | 2002-11-05 | 2004-05-26 | 华为技术有限公司 | 廉价冗余磁盘阵列***中高效高速缓存的实现方法 |
CN1820257A (zh) * | 2002-11-26 | 2006-08-16 | 先进微装置公司 | 包括具有不同缓存线大小的第一级高速缓存及第二级高速缓存的微处理器 |
US7366829B1 (en) * | 2004-06-30 | 2008-04-29 | Sun Microsystems, Inc. | TLB tag parity checking without CAM read |
US20140223118A1 (en) * | 2013-02-01 | 2014-08-07 | Brian Ignomirello | Bit Markers and Frequency Converters |
CN104268094A (zh) * | 2014-09-23 | 2015-01-07 | 浪潮电子信息产业股份有限公司 | 一种优化的闪存地址映射方法 |
CN104809076A (zh) * | 2014-01-23 | 2015-07-29 | 华为技术有限公司 | Cache的管理方法及装置 |
-
2018
- 2018-11-20 CN CN201811374675.7A patent/CN109739780A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1499382A (zh) * | 2002-11-05 | 2004-05-26 | 华为技术有限公司 | 廉价冗余磁盘阵列***中高效高速缓存的实现方法 |
CN1820257A (zh) * | 2002-11-26 | 2006-08-16 | 先进微装置公司 | 包括具有不同缓存线大小的第一级高速缓存及第二级高速缓存的微处理器 |
US7366829B1 (en) * | 2004-06-30 | 2008-04-29 | Sun Microsystems, Inc. | TLB tag parity checking without CAM read |
US20140223118A1 (en) * | 2013-02-01 | 2014-08-07 | Brian Ignomirello | Bit Markers and Frequency Converters |
CN104809076A (zh) * | 2014-01-23 | 2015-07-29 | 华为技术有限公司 | Cache的管理方法及装置 |
CN104268094A (zh) * | 2014-09-23 | 2015-01-07 | 浪潮电子信息产业股份有限公司 | 一种优化的闪存地址映射方法 |
Non-Patent Citations (1)
Title |
---|
XIUQIAO LI ET AL.: "HCCache: A hybrid client-side cache management scheme for I/O-intensive", 《2012 13TH INTERNATIONAL CONFERENCE ON PARALLEL AND DISTRIBUTED COMPUTING, APPLICATIONS AND TECHNOLOGIES》 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110413228A (zh) * | 2019-07-09 | 2019-11-05 | 江苏芯盛智能科技有限公司 | 一种映射表管理方法、***及电子设备和存储介质 |
CN110413228B (zh) * | 2019-07-09 | 2022-10-14 | 江苏芯盛智能科技有限公司 | 一种映射表管理方法、***及电子设备和存储介质 |
CN110413537A (zh) * | 2019-07-25 | 2019-11-05 | 杭州电子科技大学 | 一种面向混合固态硬盘的闪存转换层及转换方法 |
CN111258924A (zh) * | 2020-01-17 | 2020-06-09 | 中国科学院国家空间科学中心 | 一种基于星载固态存储***自适应闪存转换层的映射方法 |
CN111506517A (zh) * | 2020-03-05 | 2020-08-07 | 杭州电子科技大学 | 一种基于访问局部性的闪存页级地址映射方法及其*** |
CN111813709A (zh) * | 2020-07-21 | 2020-10-23 | 北京计算机技术及应用研究所 | 一种基于fpga存算一体架构的高速并行存储方法 |
CN111813709B (zh) * | 2020-07-21 | 2023-08-08 | 北京计算机技术及应用研究所 | 一种基于fpga存算一体架构的高速并行存储方法 |
CN112685337B (zh) * | 2021-01-15 | 2022-05-31 | 浪潮云信息技术股份公司 | 一种存储集群中分级缓存读写数据的方法 |
CN112685337A (zh) * | 2021-01-15 | 2021-04-20 | 浪潮云信息技术股份公司 | 一种存储集群中分级缓存读写数据的方法 |
CN113377690A (zh) * | 2021-06-28 | 2021-09-10 | 福建师范大学 | 一种适应不同大小的用户请求的固态硬盘处理方法 |
CN113377690B (zh) * | 2021-06-28 | 2023-06-27 | 福建师范大学 | 一种适应不同大小的用户请求的固态硬盘处理方法 |
CN113419976A (zh) * | 2021-06-29 | 2021-09-21 | 华中科技大学 | 一种基于分类预测的自适应分段缓存方法及*** |
CN113419976B (zh) * | 2021-06-29 | 2024-04-26 | 华中科技大学 | 一种基于分类预测的自适应分段缓存方法及*** |
CN117708000A (zh) * | 2024-02-05 | 2024-03-15 | 成都佰维存储科技有限公司 | 数据的随机写入方法、装置、电子设备及存储介质 |
CN117708000B (zh) * | 2024-02-05 | 2024-05-07 | 成都佰维存储科技有限公司 | 数据的随机写入方法、装置、电子设备及存储介质 |
CN118170327A (zh) * | 2024-05-14 | 2024-06-11 | 苏州元脑智能科技有限公司 | 一种固态硬盘地址映射方法、装置以及产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739780A (zh) | 基于页级映射的动态二级缓存闪存转换层地址映射方法 | |
CN103885728B (zh) | 一种基于固态盘的磁盘缓存*** | |
CN104268094B (zh) | 一种优化的闪存地址映射方法 | |
US7143240B2 (en) | System and method for providing a cost-adaptive cache | |
US10740251B2 (en) | Hybrid drive translation layer | |
US9582282B2 (en) | Prefetching using a prefetch lookup table identifying previously accessed cache lines | |
CN107066393A (zh) | 提高地址映射表中映射信息密度的方法 | |
EP3486786B1 (en) | System and methods for efficient virtually-tagged cache implementation | |
CN104102591A (zh) | 计算机子***及在其中实现闪存转换层的方法 | |
CN104166634A (zh) | 一种固态盘***中的映射表缓存管理方法 | |
US9176856B2 (en) | Data store and method of allocating data to the data store | |
CN109446117B (zh) | 一种固态硬盘页级闪存转换层设计方法 | |
CN109154912B (zh) | 根据另一个高速缓存中条目的可用性替换高速缓存条目 | |
US10564871B2 (en) | Memory system having multiple different type memories with various data granularities | |
US10423534B2 (en) | Cache memory | |
CN111580754B (zh) | 一种写友好的闪存固态盘缓存管理方法 | |
CN110888600A (zh) | 一种面向nand闪存的缓冲区管理方法 | |
CN110262982A (zh) | 一种固态硬盘地址映射的方法 | |
US7356650B1 (en) | Cache apparatus and method for accesses lacking locality | |
CN108845957A (zh) | 一种置换和回写自适应的缓冲区管理方法 | |
CN109815168A (zh) | 用于少标记缓冲器实现的***和方法 | |
US7472226B1 (en) | Methods involving memory caches | |
CN109478164A (zh) | 用于存储用于高速缓存条目传输的高速缓存位置信息的***和方法 | |
CN111506517B (zh) | 一种基于访问局部性的闪存页级地址映射方法及其*** | |
CN115562592A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190510 |
|
RJ01 | Rejection of invention patent application after publication |