一种基于Ondemand算法的STL映射表管理方法

文档序号:10612553阅读:205来源:国知局
一种基于Ondemand算法的STL映射表管理方法【专利摘要】本发明公开了一种基于Ondemand算法的STL映射表管理方法,当需要进行读操作时,通过LBA查询缓存表LPT_stack,若缓存表中存在相应的映射表项,则获取相应的PBA,并通过查询BMT表获得实际物理块号后直接读取数据即可;若缓存中未找到对应的映射项,则需要通过查找磁盘中映射表将与该映射表项所在扇区的所有映射表项放入缓存中;当需要进行写操作时,先计算LBA所在的LBN,以LBN为索引查找BMT表后获得PBN;若没有PBN,则直接分配数据条带;否则,查看对应数据条带是否有空间写入数据块,若有,则直接写入;否则,对该数据条带进行擦除操作,释放无效数据块,并将数据写入对应条带中;当写入数据后,修改相应的映射表项。【专利说明】_种基于Ondemand算法的STL映射表管理方法
技术领域
[0001]本发明属于计算机领域,更具体地,涉及一种基于Ondemand算法的STL(shingledmagneticrecordtranslationlayer叠瓦式磁质存储翻译层)映射表管理方法。【
背景技术
】[0002]对于采用盘块映射表技术,来管理逻辑与物理空间映射关系的SMR(ShingledMagneticRecording)磁盘,在每次操作系统向磁盘申请读写操作时,需要查询映射表,将逻辑盘块号映射成物理盘块号。[0003]现有技术直接将映射表导入内存中,导致空间、时间性能较低,具体局限性有如下两个方面:(1)内存与磁盘交换数据较慢,将映射表直接从磁盘导入内存,或将内存数据写入磁盘,延迟时间较长。(2)-方面相对于维护管理磁盘空间的映射表,内存容量较小;另一方面,磁盘上数据访问具有空间局部性和时间局部性。一次性将映射表导入内存,严重影响内存空间利用率和计算机的整体性能。【
发明内容】[0004]针对现有技术的缺陷,本发明提供了一种基于Ondemand算法的STL映射表管理方法,其目的在于通过降低映射表对内存的占用率,提高对映射表的整体访问性能,来提高系统对磁盘数据的访问性能,旨在解决现有技术中一次性将映射表导入内存,严重影响内存空间利用率和计算机的整体性能的问题。[0005]本发明提供了一种基于Ondemand算法的STL映射表管理方法,当需要进行读操作时,通过LBA查询缓存表LPT_stack,若缓存表中存在相应的映射表项,则获取相应的PBA,并通过查询BMT表获得实际物理块号后直接读取数据即可;若缓存中未找到对应的映射项,则需要通过查找磁盘中映射表将与该映射表项所在扇区的所有映射表项放入缓存中;当需要进行写操作时,先计算LBA所在的LBN,以LBN为索引查找BMT表后获得TON;若没有TON,则直接分配数据条带;否则,查看对应数据条带是否有空间写入数据块,若有,则直接写入;否贝1J,对该数据条带进行擦除操作,释放无效数据块,并将数据写入对应条带中;当写入数据后,修改相应的映射表项。[0006]更进一步地,所述查找磁盘中映射表的过程具体为:计算LBA-WBA映射项存放的条带号band_num,在存储映射表的对应条带中查找相应的映射项,并以扇区为单位将磁盘中的一个扇区大小的映射表项以LPT_stack表节点的形式压入栈顶中。[0007]更进一步地,在所述将与该映射表项所在扇区的所有映射表项放入缓存步骤之前还包括如下步骤:在将从磁盘中读取的映射表项压入栈顶之前,若缓存中的映射表没有足够空间容纳新的映射表项,则将LPT_stack表中的映射表项移出。[0008]更进一步地,采用LRU(leastrecentlyused,最近最少使用算法)算法;该算法通过"栈"形式对数据进行组织,在"栈"中,栈顶元素为最近使用的元素,栈底元素为当前最久未被使用的元素。因此,本算法将栈底元素从内存移动到磁盘中,若节点"修改标志"为"1",则写入磁盘;否则,直接移出节点。[0009]更进一步地,在所述将与该映射表项所在扇区的所有映射表项放入缓存步骤之后还包括将映射表项写回磁盘步骤:计算LPT_stack表的节点对应的磁盘上的条带号band_num,根据条带号找到相应条带,并判断该条带是否有空间,若有空间,则直接将节点上存储的一个扇区大小的映射表项存入磁盘中;否则,先对该条带进行擦除操作,将缓存中节点存储的映射表项写回该条带。[0010]更进一步地,在完成写操作之后还包括条带擦除步骤:[0011](1)从条带上最后一个存储映射表项的扇区开始,向前扫描条带,扫描到的映射表项存入擦除缓存中进行暂存;[0012](2)对于每个扫描到的映射表项的LBA,若该LBA在擦除缓存中已存在,则该表项不存入擦除缓存中;否则存入擦除缓存中;[0013](3)重复步骤(2),直到扫描完该条带的第一个扇区;[0014](4)从该条带第一个扇区开始,将暂存在擦除缓存中的表项写回磁盘条带中。[0015]更进一步地,所述修改相应的映射表项的过程具体为:查看缓存中的LPT_stack表是否有对应表项,若有,则修改映射表项;否则,直接添加新的映射表项到对应的节点。[0016]更进一步地,所述对该数据条带进行擦除操作的过程具体为:将该数据条带对应的逻辑地址到物理地址的映射表项读入内存,然后根据映射表项读取数据条带的有效数据块到擦除缓存中;当读完有效数据后,再将数据从原数据条带的第一个扇区开始,顺次写入原数据条带,并修改相应的映射表项;再修改BMT表相应表项的tail字段。[0017]本发明根据数据访问的局部性特点,通过引入了映射表缓冲层,将最近经常访问的映射表项缓存,一方面提高了对常用映射表的查找速度,减少内存与磁盘数据的交换时间,另一方面,减小了映射表对内存的占用,从而提高系统的整体性能。另外,在映射表逻辑存储及其操作方面,根据逻辑块号LBA,直接计算得出存储其对应的映射表项的条带号和存储数据的逻辑数据条带号,再根据BMT表中的映射找到实际数据条带号,通过两个映射表的管理,使对映射表和数据的管理更加灵活。同时,存放映射表和数据的条带利用率均未达到100%,这样做可以有效防止因为对磁盘数据频繁修改,而导致磁盘做频繁擦除操作,减少了访问磁盘数据的响应时间。磁盘与映射表缓存之间的数据交换基本单位为扇区,一方面符合磁盘读写特性,另一方面,根据局部性特点,在下一次访问中,系统访问上次被访问映射表项所在扇区的映射表项可能性较大,加速了映射表访问速度。【附图说明】[0018]图1是本发明实施例提供的基于Ondemand算法的STL映射表管理方法中读操作实现流程图;[0019]图2是本发明实施例提供的基于Ondemand算法的STL映射表管理方法中磁盘查找LBA->PBA映射项实现流程图;[0020]图3是本发明实施例提供的基于Ondemand算法的STL映射表管理方法中换入、换出LBA->PBA映射项实现流程图;[0021]图4是本发明实施例提供的基于Ondemand算法的STL映射表管理方法中将LPT_stack表中的映射表项写入磁盘实现流程图;[0022]图5是本发明实施例提供的基于Ondemand算法的STL映射表管理方法中写操作实现流程图;[0023]图6是本发明实施例提供的基于Ondemand算法的STL映射表管理方法中修改映射表项实现流程图;[0024]图7是本发明实施例提供的基于Ondemand算法的STL映射表管理方法中擦除回收数据实现流程图。【具体实施方式】[0025]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。[0026]本发明主要采用了以下两个方面对映射表的管理进行了改进:(1)对物理结构进行修改,一方面减少磁盘映射表对内存空间的占用,另一方面,提尚对尚频访问数据对应映射表项的访问速度。(2)修改映射表逻辑存储结构,方便映射表项读写操作,加速映射表访问。[0027]本发明在原技术的基础上,基于ondemand算法改变了存储的物理层结构,在内存和磁盘之间加入映射表缓冲层,将最近经常访问的映射表存入缓存中,采用LRU算法,将最近使用频度最小的映射表项写回至磁盘中。[0028]另外,在映射表的逻辑存储结构及其操作上,本发明分别对缓存和磁盘中的映射表进行管理,两种存储介质以"扇区"为单位进行映射表项的数据交换。具体地:(1)缓存中的映射表以"栈"的逻辑形式组织,每个节点存储一个扇区大小的若干映射表项。最近访问的映射表项位于栈顶,栈底为最近最少访问的映射表项节点。(2)磁盘以log-structure方式对映射表项进行更新,即当映射表项更新时,只需在对应的条带尾部不断添加即可,而无需在原存储映射表项位置进行修改。(3)使用BMT表对存储数据的逻辑空间和物理空间进行映射,同时使用tail字段对空闲块进行管理。[0029]本发明主要目的在于降低映射表对内存的占用率,提高对映射表的整体访问性能,从而提高系统对磁盘数据的访问性能。[0030]表1:逻辑块号到物理块号的映射表项[0031][0032]表2:LPT_stack中每个节点的结构[0033][0034]表3:BMT表项[0035][0036]本发明在原有技术的基础上,主要将原有技术中存储设备的物理层次、映射表的逻辑存储结构以及对应的操作方式两个方面分别进行改进。以下将详细介绍这两个方面及其相关内容。[0037]本发明修改物理存储结构,具体地,针对存储设备,本发明在SMR磁盘与内存之间增加小容量、可进行快速访问的非易失性存储器,来存储块映射表。其中高速缓存作为中间缓冲存储,其存储的块映射表一方面为上层操作系统提供逻辑块与物理块的映射关系;另一方面,记录对块映射表的修改情况。[0038]本发明还修改磁盘上映射表的存储结构。[0039]为了对SMR磁盘上的物理空间进行管理,设置以下逻辑结构,并对相应操作进行说明:[0040]1、在磁盘中,逻辑块地址到物理块地址的映射表为LPT_band(logicalphysicalmappingtable),该表中每个表项存储两个数--逻辑块号和物理块号,从而记录映射关系。如表1所不。以下将描述对该表的存储方式和操作:[0041](1)由于映射表需要进行频繁修改,为了减少对存储映射表的条带的擦除操作频度,本发明规定每个条带(band)的利用率为50%,即每个条带空间中,只使用50%的空间存储有效的映射表项,剩余50%的空间用来存储更新后的表项。[0042](2)为了加速对映射表的访问,映射表将存储在固定条带上。设如下参数:[0043]每个条带中有Amount_Track_per_Band条轨迹;[0044]每条轨迹上有Amount_Sector_per_Track个扇区;[0045]每个扇区的大小为Sector_size;[0046]每个逻辑块到物理块映射项所占大小为Item_size;[0047]逻辑块地址为LBA(logicalblockaddress);[0048]物理块地址为PBA(physicalblockaddress);[0049]根据(式一),可算出存储某个LBA到PBA表项的条带号bandnum:[0050][0051]确定LBA对应的记录其映射项的条带后,进行如下操作:[0052]A、若写入的是LBA到PBA的映射,则按照log-structure方式将映射项写入该条带中,即顺序向后写入;[0053]B、若需要读取LBA到PBA的映射,则从对应条带上最后一个映射项向前读取,直到第一次遇到相同的LBA项结束。[0054]2、在缓存中,逻辑块地址到物理块地址的映射表为LPT_stack。该表逻辑存储结构以及相应操作具体描述如下:[0055](1)该表以链表形式存储于缓存中,链表上节点存储的信息如表2所示,其中,"存储表项的数组"大小与磁盘上一个扇区大小相同,其作为缓存与磁盘的数据交换的基本单位,映射表项写入磁盘,或从磁盘中读取映射表项;"条带号"为该扇区所在的逻辑条带位置,按照(式一)计算得出,其中,逻辑条带号与物理条带号相同;"修改标志"表示该节点中的映射表项是否被修改,为〇,则表示未修改,为1,则表示修改。"上一个节点指针"、"下一个节点指针"分别指向当前节点的前后两个节点。[0056](2)当缓存中节点存储的映射表项需要写入磁盘中时,若"修改标志"为1,表示该节点存储的映射表项发生改变,则写回磁盘;否则,直接废弃当前节点存储的映射表项,不写入磁盘。[0057]3、记录逻辑条带到物理条带的映射表:BMT(bandmappingtable)。该表的每个表项如表3所示,PBN表示存储数据某个物理条带号,其对应某个LBA相应的PBA所在的条带号。tail表示在该PBN号条带上,最后一个有效的物理块的块号。由于该表占用空间较小,故该表常驻缓存中。[0058]LBN=LBA/Logical_Sector_per_band(式二)[0059][0060]当获得某个(LBA,PBA)映射关系时,首先按照(式二)和(式三)算出LBA对应LBN(logicalbandnumber数据逻辑条带号),其中,为了防止存储数据的条带频繁擦除,规定其存储的有效数据占实际条带总容量的3/4;以LBN为索弓丨,查找BMT表,找到对应PBN(physicalbandnumber数据物理条带号),再根据PBA和PBN两个值,得到所要访问的实际PBA,即实际的物理块号。[0061]在原技术的基础上,本发明在对映射表的如下操作上进行相应改进。[0062]1、读操作。[0063]如图1为读操作的总流程。系统首先通过LBA查询缓存表LPT_stack,若缓存表中存在相应的映射表项,则获取相应的PBA,并查BMT表,获得实际物理块号,直接读取数据即可;若缓存中未找到对应的映射项,则需要查找磁盘中映射表,并将与该映射表项所在扇区的所有映射表项放入缓存中,如图2和图3。[0064]如图2为从磁盘中搜索映射表项的过程。系统首先计算出LBA-WBA映射项存放的条带号band_num,然后到存储映射表的对应条带中查找相应的映射项,并以扇区为单位,将磁盘中的一个扇区大小的映射表项以LPT_stack表节点的形式压入栈顶中。[0065]如图3为将磁盘中的映射表项存入缓存,将缓存中的映射表项写回磁盘的过程。在将新的、从磁盘中读取的映射表项压入栈顶之前,需要检查缓存中的映射表是否有足够空间容纳新的映射表项。若没有空间,需要将LPT_stack表中的映射表项移出。此处采用LRU(LeatRecentlyUsed)算法,将栈底节点移出至磁盘中,若节点"修改标志"为"Γ,表示该节点存储的映射表项已经修改,则写入磁盘;否则,该节点存储的映射表项未修改,直接移出节点即可。[0066]条带擦除的具体操作为:[0067](1)从条带上最后一个存储映射表项的扇区开始,向前扫描条带,扫描到的映射表项存入擦除缓存中进行暂存。[0068](2)对于每个扫描到的映射表项的LBA,若该LBA在擦除缓存中已存在,则该表项不存入擦除缓存中;否则存入擦除缓存中。[0069](3)重复步骤(2),直到扫描完该条带的第一个扇区。[0070](4)从该条带第一个扇区开始,将暂存在擦除缓存中的表项写回磁盘条带中。[0071]2、写操作[0072]如图5,为写操作的总流程。系统首先计算LBA所在的LBN,以LBN为索引查找BMT表,获得PBN。若没有PBN,则直接分配数据条带;否则,查看对应数据条带是否有空间写入数据块,若有,则直接写入;否则,对该数据条带进行擦除操作,释放无效数据块,将数据写入对应条带中。写入数据后,修改相应的映射表项。[0073]如图6,为修改映射表项流程。系统仅查看缓存中的LPT_stack表是否有对应表项,若有,则修改映射表项;否则,直接添加新的映射表项到对应的节点。[0074]如图7,为擦除回收数据条带操作的流程。系统首先将该数据条带对应的逻辑地址到物理地址的映射表项读入内存,然后根据映射表项读取数据条带的有效数据块到擦除缓存中。当读完有效数据后,再将数据从原数据条带的第一个扇区开始,顺次写入原数据条带,并修改相应的映射表项。最后修改BMT表相应表项的tai1字段。[0075]技术效果:[0076]1、在物理存储层方面,根据数据访问的局部性特点,本发明由于引入了映射表缓冲层,将最近经常访问的映射表项缓存,一方面提高了对常用映射表的查找速度,减少内存与磁盘数据的交换时间,另一方面,减小了映射表对内存的占用,从而提高系统的整体性能。[0077]2、在映射表逻辑存储及其操作方面,本发明有以下优点:[0078](1)根据逻辑块号LBA,直接计算得出存储其对应的映射表项的条带号和存储数据的逻辑数据条带号,再根据BMT表中的映射找到实际数据条带号,通过两个映射表的管理,使对映射表和数据的管理更加灵活。[0079](2)本发明中,存放映射表和数据的条带利用率均未达到100%,这样做可以有效防止因为对磁盘数据频繁修改,而导致磁盘做频繁擦除操作,减少了访问磁盘数据的响应时间。[0080](3)磁盘与映射表缓存之间的数据交换基本单位为扇区,一方面符合磁盘读写特性,另一方面,根据局部性特点,在下一次访问中,系统访问上次被访问映射表项所在扇区的映射表项可能性较大,加速了映射表访问速度。[0081]本发明主要应用在采用映射表管理机制的SMR磁盘上,SMR磁盘容量较大,且存储的基本单位较小,需要较多空间存储映射表;同时,内存容量较小,存储映射表将占用大量内存空间。该技术使用范围有:存储集群,数据服务器,个人电脑等方面的SMR磁盘存储介质。[0082]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。【主权项】1.一种基于Ondemand算法的STL映射表管理方法,其特征在于,当需要进行读操作时,通过LBA查询缓存表LPT_stack,若缓存表中存在相应的映射表项,则获取相应的TOA,并通过查询BMT表获得实际物理块号后直接读取数据即可;若缓存中未找到对应的映射项,则需要通过查找磁盘中映射表将与该映射表项所在扇区的所有映射表项放入缓存中;当需要进行写操作时,先计算LBA所在的LBN,以LBN为索引查找BMT表后获得PBN;若没有PBN,则直接分配数据条带;否则,查看对应数据条带是否有空间写入数据块,若有,则直接写入;否则,对该数据条带进行擦除操作,释放无效数据块,并将数据写入对应条带中;当写入数据后,修改相应的映射表项。2.如权利要求1所述的STL映射表管理方法,其特征在于,所述查找磁盘中映射表的过程具体为:计算LBA->PBA映射项存放的条带号band_num,在存储映射表的对应条带中查找相应的映射项,并以扇区为单位将磁盘中的一个扇区大小的映射表项以LPT_stack表节点的形式压入栈顶中。3.如权利要求2所述的STL映射表管理方法,其特征在于,在所述将与该映射表项所在扇区的所有映射表项放入缓存步骤之前还包括如下步骤:在将从磁盘中读取的映射表项压入栈顶之前,若缓存中的映射表没有足够空间容纳新的映射表项,则将LPT_stack表中的映射表项移出。4.如权利要求3所述的STL映射表管理方法,其特征在于,采用LRU算法将栈底节点移出至磁盘中,若节点"修改标志"为T,则写入磁盘;否则,直接移出节点。5.如权利要求3所述的STL映射表管理方法,其特征在于,在所述将与该映射表项所在扇区的所有映射表项放入缓存步骤之后还包括将映射表项写回磁盘步骤:计算LPT_stack表的节点对应的磁盘上的条带号band_num,根据条带号找到相应条带,并判断该条带是否有空间,若有空间,则直接将节点上存储的一个扇区大小的映射表项存入磁盘中;否则,先对该条带进行擦除操作,将缓存中节点存储的映射表项写回该条带。6.如权利要求1-5任一项所述的STL映射表管理方法,其特征在于,在完成写操作之后还包括条带擦除步骤:(1)从条带上最后一个存储映射表项的扇区开始,向前扫描条带,扫描到的映射表项存入擦除缓存中进行暂存;(2)对于每个扫描到的映射表项的LBA,若该LBA在擦除缓存中已存在,则该表项不存入擦除缓存中;否则存入擦除缓存中;(3)重复步骤(2),直到扫描完该条带的第一个扇区;(4)从该条带第一个扇区开始,将暂存在擦除缓存中的表项写回磁盘条带中。7.如权利要求1所述的STL映射表管理方法,其特征在于,所述修改相应的映射表项的过程具体为:查看缓存中的LPT_stack表是否有对应表项,若有,则修改映射表项;否则,直接添加新的映射表项到对应的节点。8.如权利要求1所述的STL映射表管理方法,其特征在于,所述对该数据条带进行擦除操作的过程具体为:将该数据条带对应的逻辑地址到物理地址的映射表项读入内存,然后根据映射表项读取数据条带的有效数据块到擦除缓存中;当读完有效数据后,再将数据从原数据条带的第一个扇区开始,顺次写入原数据条带,并修改相应的映射表项;再修改BMT表相应表项的tail字段。9.如权利要求1所述的STL映射表管理方法,其特征在于,每个条带只使用50%的空间存储有效的映射表项,剩余50%的空间用来存储更新后的表项。10.如权利要求9所述的STL映射表管理方法,其特征在于,每个条带存储的有效数据占实际条带总容量的3/4。【文档编号】G06F12/1009GK105975215SQ201610354964【公开日】2016年9月28日【申请日】2016年5月25日【发明人】王毅,张明旭,杨烜,董丽莎,毛睿,李荣华,廖好【申请人】深圳大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1