DRAM-less固态硬盘的映射表双重更新实现方法和装置
文献发布时间:2024-04-18 20:01:30
技术领域
本发明涉及固态硬盘技术领域,特别是涉及一种DRAM-less固态硬盘的映射表双重更新实现方法、装置、计算机设备和存储介质。
背景技术
DRAM-less SSD能够缓存的映射表较小,当脏的映射表缓存超过阈值就需要将脏映射写入NAND以保障系统有足够的干净映射缓存可用。对于大范围随机写场景,需要访问的映射表不能全部加载到RAM,对于映射表没有加载的情形,通常会将写入过程新生成映射做临时缓存,然后批量从NAND加载映射分片并与临时映射缓存合并后回写到NAND,以减少映射表写入量,来提升大范围随机写性能。
然而,在现有技术中对于大范围随机读写混合场景,读命令会提前触发映射表的合并并生成脏的映射表,进而导致期望通过批量合映射回写NAND,以降低映射表写入量的策略失效。
发明内容
基于此,有必要针对上述技术问题,提供一种DRAM-less固态硬盘的映射表双重更新实现方法、装置、计算机设备和存储介质。
一种DRAM-less固态硬盘的映射表双重更新实现方法,所述方法包括:
获取写请求并为所述写请求分配物理地址,判断所述写请求对应的映射表是否已加载;
若已加载则新生成的映射既会记录到映射临时缓存也会更新到映射表,但不会将映射表标记为脏,若未加载则记录映射表到临时映射缓存并判断临时映射缓存是否已满;
若所述临时映射缓存已满则触发临时映射缓存合并再将数据写入NAND,若所述临时映射缓存未满则直接将数据写入NAND;
获取读请求,判断所述读请求对应的映射表是否已加载;
若未加载则从NAND加载映射表分片并检查临时映射缓存是否为空;
若临时映射缓存为空则遍历临时映射,将属于当前映射表分片的临时映射进行合并,同时并不删除临时映射也不标记映射分片为脏。
在其中一个实施例中,在所述若临时映射缓存为空则遍历临时映射,将属于当前映射表分片的临时映射进行合并,同时并不删除临时映射也不标记映射分片为脏的步骤之后还包括:
查询映射表获取物理地址,从NAND读取数据。
在其中一个实施例中,所述方法还包括:
遍历全部临时映射,判断临时映射对应的映射分片是否已加载;
若对应的映射分片已加载,则标记映射分片为脏,同时删除所述映射分片对应的全部临时映射;
若对应的映射分片未加载,则从NAND加载对应的映射分片,将属于所述映射分片的临时映射全部合并到映射分片,待合并完成后删除所述映射分片的临时映射并标记所述映射分片为脏。
在其中一个实施例中,所述方法还包括:
若全部映射分片都为脏,则需要先将脏映射分片存储到NAND释放出干净映射分片。
一种DRAM-less固态硬盘的映射表双重更新实现装置,所述装置包括:
写请求处理模块,所述写请求处理模块用于获取写请求并为所述写请求分配物理地址,判断所述写请求对应的映射表是否已加载;若已加载则新生成的映射既会记录到映射临时缓存也会更新到映射表,但不会将映射表标记为脏;若未加载则记录映射表到临时映射缓存并判断临时映射缓存是否已满;若所述临时映射缓存已满则触发临时映射缓存合并再将数据写入NAND,若所述临时映射缓存未满则直接将数据写入NAND;
读请求处理模块,所述读请求处理模块用于获取读请求,判断所述读请求对应的映射表是否已加载;若未加载则从NAND加载映射表分片并检查临时映射缓存是否为空;若临时映射缓存为空则遍历临时映射,将属于当前映射表分片的临时映射进行合并,同时并不删除临时映射也不标记映射分片为脏。
在其中一个实施例中,所述读请求处理模块还用于:
查询映射表获取物理地址,从NAND读取数据。
在其中一个实施例中,所述装置还包括映射合并模块,所述映射合并模块用于:
遍历全部临时映射,判断临时映射对应的映射分片是否已加载;
若对应的映射分片已加载,则标记映射分片为脏,同时删除所述映射分片对应的全部临时映射;
若对应的映射分片未加载,则从NAND加载对应的映射分片,将属于所述映射分片的临时映射全部合并到映射分片,待合并完成后删除所述映射分片的临时映射并标记所述映射分片为脏。
在其中一个实施例中,所述装置还包括映射释放模块,所述映射释放模块用于:
若全部映射分片都为脏,则需要先将脏映射分片存储到NAND释放出干净映射分片。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意一项方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项方法的步骤。
上述DRAM-less固态硬盘的映射表双重更新实现方法、装置、计算机设备和存储介质,可以有效地避免在读写混合场景中,映射表提前与临时映射合并生成脏映射表的情形。对于映射表已加载的场景,新生成的映射既会记录到临时缓存,也会更新到映射表,但不会将映射表标记为脏;只有当临时映射缓存满了之后,才进行一次完整映射表合并操作,在此次合并过程才会生成脏的映射表分片,并在合并完成后删除全部临时映射。如此可以极大减少映射表的存储,大幅提升大范围随机读写混合性能。
附图说明
图1为一个实施例中DRAM-less固态硬盘的映射表双重更新实现方法的流程示意图;
图2为一个实施例中大范围随机写处理流程的流程示意图;
图3为一个实施例中大范围随机读处理流程的流程示意图;
图4为一个实施例中临时映射合并流程的流程示意图;
图5为一个实施例中DRAM-less固态硬盘的映射表双重更新实现装置的结构框图;
图6为另一个实施例中DRAM-less固态硬盘的映射表双重更新实现装置的结构框图;
图7为再一个实施例中DRAM-less固态硬盘的映射表双重更新实现装置的结构框图;
图8为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
目前,DRAM-less SSD能够缓存的映射表较小,对于大范围随机写场景,需要访问的映射表不能全部加载到RAM,对于映射表没有加载的情形,通常会将写入过程新生成映射做临时缓存,然后批量从NAND加载映射表分片并与临时映射合并后回写到NAND,以减少映射表写入量,来提升大范围随机写性能。但对于大范围随机读写混合场景,读命令会提前触发临时映射的合并并生成脏的映射表分片,导致期望通过批量合并映射分片回写NAND,以降低映射表写入量的策略失效。
基于此,本发明提出一种DRAM-less固态硬盘的映射表双重更新实现方法,旨在可以提升DRAM-less SSD大范围随机混合读写性能。
在一个实施例中,如图1所示,提供了一种DRAM-less固态硬盘的映射表双重更新实现方法,该方法包括:
步骤102,获取写请求并为所述写请求分配物理地址,判断所述写请求对应的映射表是否已加载;
步骤104,若已加载则新生成的映射既会记录到映射临时缓存也会更新到映射表,但不会将映射表标记为脏,若未加载则记录映射表到临时映射缓存并判断临时映射缓存是否已满;
步骤106,若所述临时映射缓存已满则触发临时映射缓存合并再将数据写入NAND,若所述临时映射缓存未满则直接将数据写入NAND;
步骤108,获取读请求,判断所述读请求对应的映射表是否已加载;
步骤110,若未加载则从NAND加载映射表分片并检查临时映射缓存是否为空;
步骤112,若临时映射缓存为空则遍历临时映射,将属于当前映射表分片的临时映射进行合并,同时并不删除临时映射也不标记映射分片为脏。
在本实施例中,提出了一种DRAM-less固态硬盘的映射表双重更新实现方法,在大范围随机混合读写场景,对于映射表已加载的场景,新生成的映射既会记录到映射临时缓存,也会更新到映射表,但不会将映射表标记为脏。
对于需要加载映射表场景,待映射表加载并与临时缓存合并后,并不删除映射临时缓存,也不标记合并的映射分片为脏。
此外,对于提前与临时映射合并的映射表分片,因临时映射中也存储了一份映射信息,因此这些映射表分片可以保持干净状态,无需写入NAND就直接被重新分配使用。
只有当临时映射缓存满了之后,才进行一次完整映射表合并操作,在此次合并才会生成脏的映射表分片并写入NAND,并在合并完成后删除全部临时映射。在对于大范围随机读写混合场景,在临时映射缓存写满前,不会出现因脏映射表过多而导致映射表频繁写入NAND情形,从而大幅提升大范围随机读写混合性能。
具体地,该方法中包括大范围随机写处理流程以及大范围随机读处理流程:参考图2所示的大范围随机写处理流程的流程示意图,包括如下步骤:
步骤2.1、分配物理地址。
步骤2.2、检查逻辑地址对应的映射分片是否加载,若未加载goto步骤2.4。
步骤2.3、更新映射表(不标记脏)。
步骤2.4、记录映射到临时映射缓存。
步骤2.5、若临时映射缓存满则触发临时映射缓存合并。
步骤2.6、将数据写入NAND。
在一个实施例中,在若临时映射缓存为空则遍历临时映射,将属于当前映射表分片的临时映射进行合并,同时并不删除临时映射也不标记映射分片为脏的步骤之后还包括:查询映射表获取物理地址,从NAND读取数据。
具体地,参考图3所示的大范围随机读处理流程的流程示意图,包括如下步骤:
步骤3.1、检查逻辑地址对应的映射分片是否加载,若已加载goto步骤3.5。
步骤3.2、从NAND加载映射分片。
步骤3.3、检查临时映射缓存是否为空,若为空,goto步骤3.5。
步骤3.4、合并属于该映射分片的临时映射(但不删除临时映射,也不标记映射分片为脏)。
步骤3.5、查询映射表获取NAND地址。
步骤3.6、从NAND读取数据。
在上述实施例中,可以有效地避免在读写混合场景中,映射表提前与临时映射合并生成脏映射表的情形。对于映射表已加载的场景,新生成的映射既会记录到临时缓存,也会更新到映射表,但不会将映射表标记为脏;只有当临时映射缓存满了之后,才进行一次完整映射表合并操作,在此次合并过程才会生成脏的映射表分片,并在合并完成后删除全部临时映射。如此可以极大减少映射表的存储,大幅提升大范围随机读写混合性能。
在一个实施例中,提供了一种DRAM-less固态硬盘的映射表双重更新实现方法,该方法还包括:
遍历全部临时映射,判断临时映射对应的映射分片是否已加载;
若对应的映射分片已加载,则标记映射分片为脏,同时删除所述映射分片对应的全部临时映射;
若对应的映射分片未加载,则从NAND加载对应的映射分片,将属于所述映射分片的临时映射全部合并到映射分片,待合并完成后删除所述映射分片的临时映射并标记所述映射分片为脏;
若全部映射分片都为脏,则需要先将脏映射分片存储到NAND释放出干净映射分片。
具体地,可参考图4所示的临时映射合并流程的流程示意图,包括如下实现步骤:
遍历全部临时映射,若对应的映射分片已加载,则标记映射分片为脏,同时删除该映射分片对应的全部临时映射;否则加载对应映射分片,并在与属于它的全部临时映射合并后,删除对应的临时映射,并标记映射分片为脏。
过程中若全部映射分片都为脏,则需要先将脏映射保持到NAND,释放出干净的映射分片。
在本实施例中,只有当临时映射缓存满了之后,才进行一次完整映射表合并操作,在此次合并过程才会生成脏的映射表分片,并在合并完成后删除全部临时映射,进而提升了DRAM-less SSD大范围随机混合读写性能。
应该理解的是,虽然图1-图4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-图4中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图5所示,提供了一种DRAM-less固态硬盘的映射表双重更新实现装置500,该装置包括:
写请求处理模块501,所述写请求处理模块用于获取写请求并为所述写请求分配物理地址,判断所述写请求对应的映射表是否已加载;若已加载则新生成的映射既会记录到映射临时缓存也会更新到映射表,但不会将映射表标记为脏;若未加载则记录映射表到临时映射缓存并判断临时映射缓存是否已满;若所述临时映射缓存已满则触发临时映射缓存合并再将数据写入NAND,若所述临时映射缓存未满则直接将数据写入NAND;
读请求处理模块502,所述读请求处理模块用于获取读请求,判断所述读请求对应的映射表是否已加载;若未加载则从NAND加载映射表分片并检查临时映射缓存是否为空;若临时映射缓存为空则遍历临时映射,将属于当前映射表分片的临时映射进行合并,同时并不删除临时映射也不标记映射分片为脏。
在一个实施例中,读请求处理模块502还用于:
查询映射表获取物理地址,从NAND读取数据。
在一个实施例中,如图6所示,提供了一种DRAM-less固态硬盘的映射表双重更新实现装置500,该装置还包括映射合并模块503,用于:
遍历全部临时映射,判断临时映射对应的映射分片是否已加载;
若对应的映射分片已加载,则标记映射分片为脏,同时删除所述映射分片对应的全部临时映射;
若对应的映射分片未加载,则从NAND加载对应的映射分片,将属于所述映射分片的临时映射全部合并到映射分片,待合并完成后删除所述映射分片的临时映射并标记所述映射分片为脏。
在一个实施例中,如图7所示,提供了一种DRAM-less固态硬盘的映射表双重更新实现装置500,该装置还包括映射释放模块504,用于:
若全部映射分片都为脏,则需要先将脏映射分片存储到NAND释放出干净映射分片。
关于DRAM-less固态硬盘的映射表双重更新实现装置的具体限定可以参见上文中对于DRAM-less固态硬盘的映射表双重更新实现方法的限定,在此不再赘述。
在一个实施例中,提供了一种计算机设备,其内部结构图可以如图8所示。该计算机设备包括通过装置总线连接的处理器、存储器以及网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作装置、计算机程序和数据库。该内存储器为非易失性存储介质中的操作装置和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种DRAM-less固态硬盘的映射表双重更新实现方法。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以上各个方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以上各个方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一种非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
- 一种二氧化碳全捕集的超临界二氧化碳发电系统及方法
- 一种用于中低浓度二氧化碳的高效捕集方法与装置
- 一种用于高浓度二氧化碳的高效捕集方法与装置