一种基于段结构的瓦记录转换层的读写方法

文档序号:10593779阅读:386来源:国知局
一种基于段结构的瓦记录转换层的读写方法
【专利摘要】本发明公开了一种基于段结构的瓦记录转换层的读写方法,将瓦记录磁盘直接应用到现有的存储系统中,基于段结构的瓦记录转换层进行读写处理;对于地址映射表,采用段内动态块映射的方法,有效的减少了瓦记录磁盘的写放大倍数,提高了磁盘性能;同时,SSTL使用了一种基于最近最久未被访问段的写缓存替换算法来管理瓦记录磁盘中的非易失性缓存NVRAM;本发明提供的这种基于段结构的瓦记录转换层的读写方法,有效的减少了数据写入操作和段整理操作的次数,降低了瓦记录磁盘的写放大倍数,显著的提高了瓦记录磁盘的性能。
【专利说明】
一种基于段结构的瓦记录转换层的读写方法
技术领域
[0001 ]本发明属于数据存储技术领域,更具体地,涉及一种基于段结构的瓦记录转换层的读写方法。【背景技术】
[0002]磁盘作为计算机系统最主要的数据存储设备,发展至今已经有60余年的历史。但是,超顺磁效应阻碍了磁记录面密度的提升。当前,使用垂直磁记录技术的磁盘的面密度已经达到了上限值1 Tb = in2。瓦记录技术通过部分重叠磁道的方式来提升磁道密度。
[0003]磁记录磁盘存在一个固有的缺点:写入数据到当前磁道会覆盖后续磁道的数据, 导致后续磁道数据的丢失;瓦记录技术采用部分重叠磁道的方式来记录数据;瓦记录磁盘不能直接替代传统磁盘应用到现有的存储系统中。为了克服瓦记录技术写入操作的物理限制,现在有两种解决方案,一是采用瓦记录转换层STL(ShingleTranslat1nLayer)来掩盖写入操作上的差异;二是设计瓦记录磁盘专用的文件系统或对象存储系统;上述两种方案, 均需解决瓦记录磁盘不能覆盖写引入的写放大问题。
[0004]现有技术中,采用基于段结构的数据布局管理方法读写,将磁盘的整个盘面分成多个瓦记录区,每个区包含了多个连续的磁道;在径向方向上,每个瓦记录区分割成大小相同的段,每个段有唯一逻辑段号;在每个段中,同一磁道上的扇区组成一个块;由此,整个磁盘按照“区-段-块-扇区”的形式组织起来;该方案将写放大从区降到了段大小,但基于段结构的瓦记录磁盘的就地更新模式和段级写放大仍需要进一步优化。
【发明内容】

[0005]针对现有技术的以上缺陷或改进需求,本发明提供一种基于段结构的瓦记录转换层的读写方法,其目的在于对段结构瓦记录磁盘的存储地址映射和非易失缓存区管理进行优化,解决段结构瓦记录磁盘就地更新带来的写放大问题。
[0006]为实现上述目的,按照本发明的一个方面,提供了一种基于段结构的瓦记录转换层的读写方法,包括如下步骤:
[0007](1)当SSTL(基于段结构的瓦记录转换层,Segment based Shingle Translat1n Layer)接收到上层请求,判断请求类型,若为读请求,进入步骤(2),若为写请求,则进入步骤(7);
[0008](2)由SSTL查找读、写缓存,判断读、写缓存中是否存在与请求匹配的内容,若是, 则获取请求的数据,并向请求方反馈所述数据;若否,则进入步骤(3);
[0009](3)由SSTL获取逻辑段号(LSN)、逻辑块索引(LCI)和逻辑区号(LRN);[〇〇1〇] (4)以逻辑段号作为索引,在地址映射表中获取段转换页;
[0011](5)采用逻辑块索引从所述段转换页中获取实际的块索引值;
[0012](6)获取请求的物理地址PBA = LRN*Sreg+LCI*ST+(LBA mod Sreg)/Sseg*Schk+ Noff set;从所述物理地址获取数据,并向请求方反馈所述数据;[0〇13]其中,Sreg是指区大小,ST是指磁道大小,Sseg是指段大小,Schk是指块大小;LBA mod Sreg是指逻辑块地址对Sreg取余操作;Noffset是指块内偏移地址;
[0014](7)由SSTL查找写缓存,判断写缓存中是否存在与请求匹配的内容,若是,由SSTL 用拟写入的数据替换缓存中的旧数据;若否,则进入步骤(8);
[0015](8)由SSTL查找读缓存,判断读缓存中是否存在与请求匹配的内容,若是,则删除读缓存中的旧数据,并进入步骤(9);若否,则将写请求的数据写入写缓存中,并进入步骤 (9);[〇〇16]其中,旧数据是指缓存中与写请求对应的地址上存储的数据;
[0017](9)判断写缓存是否足够空闲空间,若是,则由SSTL将写请求的数据写入写缓存中;若否,则进入步骤(10);
[0018](10)由SSTL采用最近最久未被访问段的写缓存替换算法,选择拟替换出缓存的段;
[0019](11)判断磁盘是否有足够的空间容纳拟写入的数据,若是,则将所述拟替换出缓存的段按照动态块映射方法写入磁盘;若否,则进入步骤(12);
[0020](12)由SSTL将磁盘上整个段的内容存储到内存,并与从缓存中替换出来的段进行合并,将合并获得的数据写到磁盘。
[0021]优选地,上述基于段结构的瓦记录转换层的读写方法,地址映射表按照如下方法进行管理:
[0022](a)地址映射表包含多个段转换页,每个段转换页记录一个段的地址映射信息;
[0023](b)将经动态块映射的每个数据块的索引值作为地址映射信息保存在段转换页中;
[0024](c)将段转换页按照逻辑段号顺序存储在地址映射表中;
[0025](d)当SSTL接收到逻辑段号,将所述逻辑段号作为索引值顺次查找,从地址映射表中获取段转换页。
[0026]优选地,上述基于段结构的瓦记录转换层的读写方法,其段内动态块映射方法具体如下:
[0027](I)以段作为数据管理单位;段内的数据块可以存放在段内任意位置;
[0028](II)对于数据的写入或修改操作,将拟写入或修改的数据顺序追加到数据段的尾部;[〇〇29](III)对于数据段段尾数据的更新操作,则采用拟写入数据直接覆盖段尾的旧版本数据。
[0030]优选地,上述基于段结构的瓦记录转换层的读写方法,其步骤(10)中所述最近最久未被访问段的写缓存替换算法,具体如下:
[0031](10-1)由LRU_S(Least Recently Used—Segment,最近最久未访问段)将LRU (Least Recently Used)链表划分为LRU工作链表和LRU替换链表;[〇〇32]其中,LRU工作链表采用块的形式组织数据,替换单元为块;LRU替换链表采用段的形式组织数据,替换单元为段所包含的数据块组;[〇〇33](10-2)当收到数据写入请求,而写入请求所对应的数据块不在缓存中时,则将该数据块直接插入到LRU工作链表中;
[0034](10-3)当LRU链表中的数据块被再次访问,将该数据块插入到LRU工作链表的头部;[〇〇35](10-4)当LRU工作链表已满,而有新的数据插入时,采用新的数据替换LRU工作链表尾部的数据块;将被替换出的数据块插入到LRU替换链表中;
[0036](10-5)将LRU替换链表中的段按照各段所包含的块的数目由少到多依次排序;[〇〇37](10-6)当LRU替换链表已满,则由LRU-S把LRU替换链表中包含数据块最多的段写到磁盘。
[0038]优选地,上述基于段结构的瓦记录转换层的读写方法,其步骤(10-6)具体如下: [〇〇39]由LRU-S从指针数组的第N个指针开始,往第(N+i)个指针方向顺序查找;当遇到包含数据段的指针,则将所述指针包含的数据段从缓存中替换出来,将替换出的数据段写到磁盘;i大于等于1。
[0040]总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0041](1)本发明提供的基于段结构的瓦记录转换层的读写方法,由于采用了段内动态块映射方法和地址映射管理算法,更新的数据块总是追加在段尾,不需要重写数据块所在段的后续所有数据块,充分利用数据局部性原理和磁盘空间的利用率状态,更新操作不带来额外的磁盘读写操作;具有减少基于段结构的瓦记录磁盘的写放大倍数的有益效果;
[0042](2)本发明提供的基于段结构的瓦记录转换层的读写方法,采用了最近最久未被访问段的写缓存替换方法来管理瓦记录磁盘中的非易失性缓存NVRAM,在LRU工作链表中命中了大量的热写数据,把冷数据聚集在LRU替换链表中;替换时,最近最久未被访问且包含数据块最多的段才会被替换出缓存,减少了瓦记录磁盘的写操作次数,且每次写回操作都能带来最大的收益;
[0043](3)本发明提供的基于段结构的瓦记录转换层的读写方法,将需要频繁更新的地址映射元数据和热数据都存储在高速缓存介质中,具有提高瓦记录磁盘的读写性能的效果。【附图说明】
[0044]图1是段结构瓦记录磁盘的数据布局示意图;
[0045]图2是瓦记录转换层SSTL在系统中的位置示意图;
[0046]图3是基于段结构的瓦记录转换层SSTL的架构图;
[0047]图4是实施例中的地址映射表结构示意图;
[0048]图5是实施例中LRU-S缓存的双链表结构示意图;
[0049]图6是实施例中动态映射块数据与传统段结构块数据的比较图。【具体实施方式】
[0050]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0051]图1所示,是现有技术中基于段结构的数据布局管理方法HWSR,该方法把磁盘分成多个瓦记录区,每个区包含了多个连续的磁道;在径向方向上,把每个瓦记录区分割成大小相同的段,每个段有一个独一无二的逻辑段号;在每一个段中,同一磁道上的扇区组成一个块;整个磁盘划分为“区-段-块-扇区”的形式。[〇〇52]当段结构的瓦记录磁盘收到一个逻辑地址为LBA的请求时,该请求的物理地址PBA 通过下式计算得到;该方法中,段结构的瓦记录磁盘将写放大从区降到了段大小,但基于段结构的瓦记录磁盘的就地更新模式和段级写放大仍需要进一步优化。
[0053]LRN=LBA = Sreg (1)
[0054]LSN=LBA = Sseg (2)
[0055]LCI = (LBA mod Sseg) =Schk (3)
[0056]Noffset = LBA mod Schk (4)
[0057]PBA = LRN*Sreg+LCI*ST+(LBAmodSreg)/Sseg*Schk+Noffset (5);[〇〇58] 上述式1到5中的各个参数的意义如下:LRN表示逻辑区号;LSN表示逻辑段号;LCI 表示一个块在一个段中的逻辑块索引;Noff set表示块内偏移地址;ST,Sreg,Sseg和Schk分别表示磁道大小,区大小,段大小和块大小。[0〇59]图2所示,是瓦记录转换层在整个SSTL系统中的位置示意图,瓦记录转换层是在设备层掩饰瓦记录磁盘随机写性能缺陷的一种方式。本发明在瓦记录存储介质上对瓦记录转换层进行优化,同时在瓦记录转换层上的增加非易失性缓存提升系统整体性能。
[0060]图3所示,是基于段结构的瓦记录转换层SSTL的架构;SSTL系统的整体结构包括设备层和SSTL地址转换层,本发明提供的改进策略在地址转换层实现。
[0061]结合实施例和附图,具体阐述本发明提供的基于段结构的瓦记录转换层的读写方法,具体包括如下步骤:
[0062](1)当SSTL接收到上层请求,判断请求类型,若为读请求,进入步骤(2),若为写请求,则进入步骤(7);
[0063](2)由SSTL查找读、写缓存,判断读、写缓存中是否存在与请求匹配的内容,若是, 则获取请求的数据,并向请求方反馈所述数据;若否,则进入步骤(3);
[0064](3)由SSTL获取逻辑段号(LSN)、逻辑块索引(LCI)和逻辑区号(LRN);
[0065](4)以逻辑段号作为索引,在地址映射表中获取段转换页;
[0066]实施例中,SSTL地址映射表管理方法,其地址映射表结构如图4所示,将请求定位到物理地址所采用的地址管理策略,具体如下:
[0067]SSTL采用的段内动态块映射的方式,地址映射表只需记录段中每一个块的实际块索引值;每一个段在地址映射表都存在一个段转换页,所有的段转换页按照逻辑段号顺序的存储在地址映射表中;每一个段包含的块数据都是相等的,所以每一个段转换页的大小也相等,SSTL使用逻辑段号作为索引值在地址映射表中取得段转换页。[〇〇68] 如图4所示,段35(LSN = 35)和段36(LSN = 36)的段转换页存储在地址映射表中的相邻位置,段转换页一次记录了块C0-C8的实际块索引值;如图4中虚线箭头所指示,逻辑段 36的逻辑块C3的实际块索引值为O(IdxO),即段36的块C3实际存储在虚线箭头所指示的位置;图中每个段包含8个块,每一个块索引值的大小为一个字节,因此每一个段转换页为8个字节;为了取得段36的段转换页,只需要往地址映射表的起始位置向后偏移368个字节。
[0069](5)采用逻辑块索引从所述段转换页中获取实际的块索引值;
[0070](6)获取请求的物理地址PBA = LRN*Sreg+LCI*ST+(LBA mod Sreg)/Sseg*Schk+ Noff set;从所述物理地址获取数据,并向请求方反馈所述数据;
[0071](7)由SSTL查找写缓存,判断写缓存中是否存在与请求匹配的内容,若是,由SSTL 用拟写入的数据替换缓存中的旧数据,若否,则进入步骤(8);
[0072](8)由SSTL查找读缓存,判断读缓存中是否存在与请求匹配的内容,若是,则删除读缓存中的旧数据,将写请求数据写入写缓存中,进入步骤(9);若否,则直接将写请求的数据写入写缓存中,进入步骤(9);
[0073](9)数据写入写缓存时,判定写缓存空闲空间是否足够,若是,则由SSTL将写请求的数据写入写缓存中;若否,则进入步骤(10);[〇〇74](10)由SSTL采用最近最久未被访问段(LRU-S)的写缓存替换算法,选择需要替换出缓存的段;[〇〇75]实施例提供的NVRAM写缓存管理算法LRU-S,其双链表结构如图5所示,是缓存空间不足情况下的缓存淘汰策略,具体如下:[〇〇76] LRU-S把整个LRU链表分为两部分:LRU工作链表和LRU替换链表。LRU工作链表采用块的形式组织数据,替换的单元也是块,图5中S2C1表示逻辑段S1中的数据块C1。当一个数据被写入到缓存,而这个数据块本身又不存在缓存中时,这个数据块将被插入到LRU工作链表中。无论何时,整个LRU链表中的某一个数据块被再次访问,这个数据块都会被插入到LRU 工作链表的头部。当LRU工作链表已满,而又有新的数据插入时,LRU工作链表尾部的数据块将被替换出LRU工作链表,插入到LRU替换链表中。LRU工作链表用于保存负载中当前的热数据,大多数的缓存命中率也将产生在LRU工作链表中。[〇〇77] LRU替换链表采用段的形式组织数据,替换的单元是某个段所包含的数据块组。图 5中的N表示段结构的瓦记录磁盘每个段所包含的块的数目。LRU替换链表中的段按照每个段所包含的块的数目来排序;譬如:对于一个包含了 3个数据块的段,该段被链接在图5中指针数组的第3个指针中。图5中,每个带有LSN字样的方块表示一个段,它也是一个链表,它把这个段内的属于LRU替换链表的数据块链起来。当一个数据块从LRU工作链表替换出来时, 该数据块会被插入LRU替换链表中相应段的链表中。当LRU替换链表满了,LRU-S就会把LRU 替换链表中包含数据块最多的段写回到磁盘;LRU-S从指针数组的第N个指针开始,往第(N+ i)个指针方向顺序查找;当遇到包含数据段的指针,则将所述指针包含的数据段从缓存中替换出来,将替换出的数据段写回磁盘;i大于等于1。[〇〇78] LRU-S把热数据块集中在LRU工作链表中,把冷数据聚集在LRU替换链表中。替换的时候,最近最久未被访问的段,并且包含数据块最多的段才会被替换出缓存,LRU-S不仅利用了数据的时间局部性原理来增加缓存的命中率,而且像FAB—样能够减少数据写入操作的次数,同时减少了数据的写放大;LRU-S不仅能够把热数据存储在缓存中,还能减少数据写入的次数。
[0079](11)判断磁盘是否有足够的空间容纳拟写入的数据,若是,则将替换出缓存的数据按照动态块映射方法写入磁盘;若否,则进入步骤(12);
[0080]实施例中采用的动态块映射方法,如图6所示意的,将其与现有HSWR技术进行对比,具体如下:
[0081]使用动态块映射方法进一步减少基于段结构的瓦记录磁盘的写放大倍数,如图6 中段36中数据块C0-C8存储的方式,数据块可以存储在段中任意位置,而且数据被修改后, 只要以追加的形式写在段尾部。而在HWSR瓦记录磁盘系统中,一个段内的数据块严格按照顺序的方式存储,如图6中段35 (LSN= 35)中数据块C0-C8所示,数据块C0-C8中任何一个数据块被修改了,都要被写回到原来的位置,导致段中后续的数据被覆盖。[〇〇82]下面结合实施例来比较SSTL和HWSR的写放大情况;根据NVRAM写缓存管理算法 LRU-S,LRU-S总是把同一个段中的多个数据块同时替换出缓存,HWSR也采用类似的算法;如图6中4个缓存刷新操作,图中F{SI,(C5,C4,C3)}表示把段S1中的数据块C5,C4,C3刷新到磁盘,其中F表示Flush,表示刷新操作。[〇〇83]刷新操作①F{S1,(C5,C4,C3)}:开始的时候段S1是空的,但是HWSR要把数据块C5、 C4和C3写到对应的位置,没有覆盖数据块,而SSTL总是以追加的形式把数据写入到段的尾部,也没有覆盖数据块。[〇〇84]刷新操作②?{51,(02,(:1,0))}:服51?在写入数据块02、(:1和0)时,会覆盖数据块 C3-C5 ; S卩,在写入数据块C0-C2之前,HWSR要把数据块C3-C5先读出来,并写入到磁盘,而 SSTL仍然没有覆盖数据块。[〇〇85]刷新操作③F {S1,( C1’,C0 ’)}:数据块CO,C1被修改了,同样,HWSR在写入C0 ’和C1’ 时会覆盖后面的C2-C5的数据块,而SSTL仅仅是把C0 ’和C1’追加到段S1的尾部。
[0086]刷新操作④F{S1,(Cl”,C0”)}:数据块C0和C1又被修改了,HWSR的写入过程如同刷新操作③一样,SSTL不覆盖任何数据块,因为段S1尾部存储的就是C0和C1的旧数据,SSTL只需要覆盖原来的cr和co’。
[0087]上述的实施例中,HWSR覆盖了11个数据块而SSTL没有覆盖任何的数据块;HWSR就地更新数据的方式,导致每一次写数据都可能需要重写整个段;而SSTL仅在一个段被写满了才需要重写整个段,减少了额外的写操作,从而减少了写放大倍数。
[0088](12)由SSTL将磁盘上整个段的内容读到内存,与从缓存中替换出来的数据块进行合并,将合并后的数据写回到磁盘。[〇〇89]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种基于段结构的瓦记录转换层的读写方法,其特征在于,包括如下步骤:(1)当SSTL接收到读写请求,判断请求类型,若为读请求,进入步骤(2),若为写请求,贝1J 进入步骤(7);(2)由SSTL判断读、写缓存中是否存在与请求匹配的内容,若是,则获取请求的数据,并 向请求方反馈所述数据;若否,则进入步骤(3);(3)由SSTL获取逻辑段号、逻辑块索引和逻辑区号;(4)以所述逻辑段号作为索引,在地址映射表中获取段转换页;(5)采用所述逻辑块索引从所述段转换页中获取块索引值;(6)获取请求的物理地址PBA = LRN*Sreg+LCI*ST+(LBA mod Sreg)/Sseg*Schk+ Noff set;从所述物理地址获取数据,并向请求方反馈所述数据;其中,LRN是指逻辑区号,LCI是指逻辑块索引,Sreg是指区大小,ST是指磁道大小,Sseg 是指段大小,Schk是指块大小;LBA mod Sreg是指逻辑块地址对Sreg取余操作;Noffset是 指块内偏移地址;(7)由SSTL查找写缓存,判断写缓存中是否存在与请求匹配的内容,若是,由SSTL用拟 写入的数据替换缓存中的旧数据;若否,则进入步骤(8);(8)由SSTL查找读缓存,判断读缓存中是否存在与请求匹配的内容,若是,则删除读缓 存中的旧数据,并进入步骤(9);若否,则将写请求的数据写入写缓存中,并进入步骤(9);其中,旧数据是指缓存中与写请求对应的地址上存储的数据;(9)判断写缓存是否足够空闲空间,若是,则由SSTL将写请求的数据写入写缓存中;若 否,则进入步骤(10);(10)由SSTL采用最近最久未被访问段的写缓存替换算法,选择拟替换出缓存的段;(11)判断磁盘是否有足够的空间容纳拟写入的数据,若是,则将所述拟替换出缓存的 段按照动态块映射方法写入磁盘;若否,则进入步骤(12);(12)由SSTL将磁盘上整个段的内容存储到内存,并与从缓存中替换出来的段进行合 并,将合并获得的数据写到磁盘。2.如权利要求1所述的读写方法,其特征在于,按照如下方法管理所述地址映射表:(a)地址映射表包含多个段转换页,每个段转换页记录一个段的地址映射信息;(b)将经动态块映射的每个数据块的索引值作为地址映射信息保存在段转换页中;(c)将段转换页按照逻辑段号顺序存储在地址映射表中;(d)当SSTL接收到逻辑段号,将所述逻辑段号作为索引值在地址映射表中顺次查找,获 取段转换页。3.如权利要求1所述的读写方法,其特征在于,所述动态块映射方法具体如下:(I)以段作为数据管理单位;段内的数据块可以存放在段内任意位置;(II)对于数据的写入或修改操作,将拟写入或修改的数据顺序追加到数据段的尾部;(III)对于数据段段尾数据的更新操作,则采用拟写入数据直接覆盖段尾的旧版本数据。4.如权利要求1至3任一项所述的读写方法,其特征在于,所述最近最久未被访问段的 写缓存替换算法,具体如下:(10-1)由LRU-S将LRU链表划分为LRU工作链表和LRU替换链表;(10-2)当收到数据写入请求,而写入请求所对应的数据块不在缓存中时,则将该数据 块直接插入到LRU工作链表中;(10-3)当LRU链表中的数据块被再次访问,将该数据块插入到LRU工作链表的头部; (10-4)当LRU工作链表已满,而有新的数据插入时,采用新的数据替换LRU工作链表尾 部的数据块;将被替换出的数据块插入到LRU替换链表中;(10-5)将LRU替换链表中的段按照各段所包含的块的数目由少到多依次排序;(10-6)当LRU替换链表已满,则由LRU-S把LRU替换链表中包含数据块最多的段写到磁 盘。5.如权利要求4所述的读写方法,其特征在于,所述步骤(10-6)具体为:由LRU-S从指针 数组的第N个指针开始,往第(N+i)个指针方向顺序查找;当遇到包含数据段的指针,则将所 述指针包含的数据段从缓存中替换出来,将替换出的数据段写到磁盘;i大于等于1。
【文档编号】G06F12/123GK105955664SQ201610279310
【公开日】2016年9月21日
【申请日】2016年4月29日
【发明人】万继光, 姚婷, 罗旦, 谭志虎, 谢长生
【申请人】华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1