基于映射表动态加载的读请求处理方法及装置与流程

文档序号:25182315发布日期:2021-05-25 14:57阅读:100来源:国知局
基于映射表动态加载的读请求处理方法及装置与流程

本发明涉及固态硬盘技术领域,特别是涉及一种基于映射表动态加载的读请求处理方法、装置、计算机设备及存储介质。



背景技术:

随着固态硬盘价格的下跌,固态硬盘越来越普及,ssd(固态硬盘)已经被广泛应用于各种场合,目前在pc市场,各大电脑厂商纷纷将计算机设备中的硬盘做成ssd替代传统的hdd,从可靠性和性能方面为用户提供更好的体验。

目前,随着主机接口以及nand接口速度的提升,ssd性能要求越来越高。一般而言,传统ssd上均有一个较大的dram空间(如128gbssd上有128mb的dram),用来存储映射表以及读写缓冲区,其中主要部分为用来装载逻辑到物理的映射表。由于成本/功耗等方面的考虑,降低dram容量甚至彻底移除已经成为产品必须具备的特性。在这种场景下,ssd内部只有有限的memory(如10mb左右),只能缓存有限的映射表,而当主机访问范围较广时,则需要动态地加载映射表,由此必然带来性能的损失。

具体地,现有ssd在触发映射表加载时,需要固件先发送读取映射表的命令给到硬件nand访问接口。待获取完映射表数据后,固件从中解析/提取对应主机访问数据的映射表项,发起读取主机数据存放nand地址的读命令。因此,在整个过程中固件需要和硬件nand访问接口交互两次,进而导致延迟较大,对该场景下的性能有较大的影响。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种基于映射表动态加载的读请求处理方法、装置、计算机设备及存储介质。

一种基于映射表动态加载的读请求处理方法,所述方法包括:

提交读操作请求给映射表管理模块;

所述映射管理模块查询对应的映射表是否已经加载;

若所述映射表已经加载,则所述映射表管理模块发送用户数据所在地址信息给到后端模块,所述后端模块向硬件nand访问接口发起一级读请求;

若所述映射表尚未加载,则所述映射表管理模块发送所述映射表所在地址信息给到后端模块,所述后端模块向硬件nand访问接口发起多级读请求;

所述硬件nand访问接口根据所接收到的读请求完成对应的一级或多级读操作。

在其中一个实施例中,所述硬件nand访问接口根据所接收到的读请求完成对应的一级或多级读操作的步骤包括:

当所述硬件nand访问接口接收到所述后端模块发送的一级读请求时,直接加载用户数据;

当所述硬件nand访问接口接收到所述后端模块发送的多级读请求时,通过映射表所存放的地址信息及偏移信息完成映射表的加载、提取及用户数据的读取。

在其中一个实施例中,在所述映射管理模块查询对应的映射表是否已经加载的步骤之后还包括:

当查询到对应的映射表尚未加载到内存时,所述映射表管理模块发送存放映射所在nand地址信息map_addr/map_offset给到后端模块;

所述后端模块根据map_addr/map_offset向硬件nand访问接口发起多级读操作请求。

在其中一个实施例中,在所述后端模块根据map_addr/map_offset向硬件nand访问接口发起多级读操作请求的步骤之后还包括:

所述硬件nand访问接口根据map_addr发起一级读并加载映射表;

所述硬件nand访问接口根据map_offset解析存放主机数据的nand地址user_addr,根据user_addr发起二级读并加载用户数据;

所述硬件nand访问接口将主机所访问的用户数据返回给主机,并将映射表数据返回给映射表管理模块以便后续访问。

一种基于映射表动态加载的读请求处理装置,所述装置包括:

提交模块,所述提交模块用于提交读操作请求给映射表管理模块;

查询模块,所述查询模块用于所述映射管理模块查询对应的映射表是否已经加载;

第一请求模块,所述第一请求模块用于若所述映射表已经加载,则所述映射表管理模块发送用户数据所在地址信息给到后端模块,所述后端模块向硬件nand访问接口发起一级读请求;

第二请求模块,所述第二请求模块用于若所述映射表尚未加载,则所述映射表管理模块发送所述映射表所在地址信息给到后端模块,所述后端模块向硬件nand访问接口发起多级读请求;

请求响应模块,所述请求响应模块用于所述硬件nand访问接口根据所接收到的读请求完成对应的一级或多级读操作。

在其中一个实施例中,所述请求响应模块还用于:

当所述硬件nand访问接口接收到所述后端模块发送的一级读请求时,直接加载用户数据;

当所述硬件nand访问接口接收到所述后端模块发送的多级读请求时,通过映射表所存放的地址信息及偏移信息完成映射表的加载、提取及用户数据的读取。

在其中一个实施例中,所述装置还包括多级请求模块,所述多级请求模块用于:

当查询到对应的映射表尚未加载到内存时,所述映射表管理模块发送存放映射所在nand地址信息map_addr/map_offset给到后端模块;

所述后端模块根据map_addr/map_offset向硬件nand访问接口发起多级读操作请求。

在其中一个实施例中,所述多级请求模块还用于:

所述硬件nand访问接口根据map_addr发起一级读并加载映射表;

所述硬件nand访问接口根据map_offset解析存放主机数据的nand地址user_addr,根据user_addr发起二级读并加载用户数据;

所述硬件nand访问接口将主机所访问的用户数据返回给主机,并将映射表数据返回给映射表管理模块以便后续访问。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意一项方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项方法的步骤。

上述基于映射表动态加载的读请求处理方法、装置、计算机设备及存储介质通过重新定义硬件nand访问接口,使其支持多级nand自动读取,当触发映射表加载时,固件根据存放映射表的nand地址发起多级读请求。针对该多级读请求,硬件nand访问单元可以通过先读取该映射表存放地址加载映射表;然后自动解析其内主机访问数据对应表项获取主机数据存放地址,进而自动发起二次读取并加载主机数据。在此过程中,简化了固件与硬件交互接口,硬件nand访问单元根据请求类型自动完成主机数据读取,包括潜在的映射表加载和解析,通过该方法可以有效地提升映射表动态加载情形下的ssd读性能。

附图说明

图1为传统技术中ssd内部访问的流程示意图;

图2为一个实施例中基于映射表动态加载的读请求处理方法的流程示意图;

图3为另一个实施例中基于映射表动态加载的读请求处理方法的流程示意图;

图4为一个实施例中读请求处理的流程示意图;

图5为一个实施例中基于多级访问请求硬件nand访问接口框架下的交互示意图;

图6为一个实施例中基于映射表动态加载的读请求处理装置的结构框图;

图7为另一个实施例中基于映射表动态加载的读请求处理装置的结构框图;

图8为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

目前,如图1所示,为一个典型的ssd内部访问的流程示意图,具体包括如下实现过程:

首先,主机提交读命令到ssd的前端模块;ssd前端模块将命令分割成映射单元(lpa,典型如4kb);提交操作请求到缓冲区管理模块,分配读写缓冲区;如果为写命令,则根据所分配的缓冲区,建立与主机的数据传输,且在完成数据传输后告知主机命令完成;如果为读命令,则提交操作请求到映射表管理模块;映射表管理模块负责根据逻辑地址分配对应的物理地址(写命令)或者把逻辑地址转换成nand物理地址(读命令);提交操作请求到后端模块,后端模块根据物理地址发起对nand读/写请求;等待nand读/写操作请求完成;如果为读命令,此时数据会加载到nandcacheregister中。数据ready后,启动数据从nandcacheregister到主机的传输。

由于映射表非完全加载在内存中,当主机访问的数据的映射表不在内存中时,需要触发额外的操作。具体地,首先需要提交读操作请求(4klpa)给映射表管理模块;映射表管理模块查询发现对应映射表尚未加载;映射表管理模块向后端模块发起读取对应映射表的请求;后端模块根据对应的存放映射表的物理地址,向硬件接口提交读请求;硬件接口执行对应的读命令,并返回数据给到映射表管理模块;映射表管理模块解析加载的映射表数据,获取存放主机数据的nand地址;映射表模块向后端模块发起读取对应用户数据的请求;后端模块根据对应的存放用户数据的物理地址,向硬件接口提交读请求;硬件接口执行对应的读命令,并返回数据给到主机。

由此可见,在整个过程中现有的硬件nand访问接口只支持简单的一级读取请求处理。在涉及映射表动态加载的场景下,映射表管理模块需要依次发起两次读取请求,从而使得固件操作的路径较长,极大地影响了性能。

基于此,本发明提供了一种基于映射表动态加载的读请求处理方法,该方法定义了一种硬件nand访问接口,支持单命令多级nand读取。对于触发映射表加载的主机读,可根据所访问主机数据的映射表的nand存放地址,构建两级nand读命令,并提交硬件nand访问接口执行。

在一个实施例中,如图2所示,提供了一种基于映射表动态加载的读请求处理方法,该方法包括:

步骤202,提交读操作请求给映射表管理模块;

步骤204,映射管理模块查询对应的映射表是否已经加载;

步骤206,若映射表已经加载,则映射表管理模块发送用户数据所在地址信息给到后端模块,后端模块向硬件nand访问接口发起一级读请求;

步骤208,若映射表尚未加载,则映射表管理模块发送映射表所在地址信息给到后端模块,后端模块向硬件nand访问接口发起多级读请求;

步骤210,硬件nand访问接口根据所接收到的读请求完成对应的一级或多级读操作。

在本实施例中,提供了一种基于映射表动态加载的读请求处理方法,该方法的执行步骤可参考图3所示,具体包括如下实现步骤:

首先,提交读操作请求(4klpa)给映射表管理模块。然后,映射管理模块查询对应的映射表是否加载。

如已经加载,则映射表管理模块发送用户数据所在地址信息(user_addr)给到后端模块;后端模块发起一级读请求。

如未加载,映射表管理模块发送映射表所在地址信息(map_addr/map_offset)给到后端模块;后端模块发起多级读请求。

最后,硬件nand访问接口根据所接受的读请求,完成对应的一级或多级读操作。

在一个实施例中,硬件nand访问接口根据所接收到的读请求完成对应的一级或多级读操作的步骤包括:

当硬件nand访问接口接收到后端模块发送的一级读请求时,直接加载用户数据;当硬件nand访问接口接收到后端模块发送的多级读请求时,通过映射表所存放的地址信息及偏移信息完成映射表的加载、提取及用户数据的读取。

具体地,通过本发明引入的硬件nand访问接口对多级读模型的支持,固件可以维持单一的读操作模型。

当不触发映射表加载时,如传统模型发起一级读请求直接加载用户数。

当触发映射表加载时,通过指定映射表存放的地址以及偏移信息且标记该请求为多级读请求,则硬件nand访问接口模块自动完成映射表的加载/提取/用户数据的读取,减少了与固件的多次交互,从而降低了响应延迟提升了性能。

在上述实施例中,通过重新定义硬件nand访问接口,使其支持多级nand自动读取,当触发映射表加载时,固件根据存放映射表的nand地址发起多级读请求。针对该多级读请求,硬件nand访问单元可以通过先读取该映射表存放地址加载映射表;然后自动解析其内主机访问数据对应表项获取主机数据存放地址,进而自动发起二次读取并加载主机数据。在此过程中,简化了固件与硬件交互接口,硬件nand访问单元根据请求类型自动完成主机数据读取,包括潜在的映射表加载和解析,通过该方法可以有效地提升映射表动态加载情形下的ssd读性能。

在一个实施例中,如图3所示,提供了一种基于映射表动态加载的读请求处理方法,该方法在映射管理模块查询对应的映射表是否已经加载的步骤之后还包括:

步骤302,当查询到对应的映射表尚未加载到内存时,映射表管理模块发送存放映射所在nand地址信息map_addr/map_offset给到后端模块;

步骤304,后端模块根据map_addr/map_offset向硬件nand访问接口发起多级读操作请求;

步骤306,硬件nand访问接口根据map_addr发起一级读并加载映射表;

步骤308,硬件nand访问接口根据map_offset解析存放主机数据的nand地址user_addr,根据user_addr发起二级读并加载用户数据;

步骤310,硬件nand访问接口将主机所访问的用户数据返回给主机,并将映射表数据返回给映射表管理模块以便后续访问。

在本实施例中,提供了一种基于映射表动态加载的读请求处理方法,该方法的实现过程可参考图5包括如下实现步骤:

s0:主机读取用户数据lpa0。

s1:映射表管理模块查询映射表,发现对应映射表尚未加载到内存中。

s2:映射表管理模块发送存放映射所在nand地址信息给到后端模块:map_addr/map_offset。

s3:后端模块根据map_addr/map_offset发起多级nand读取请求。

s4:硬件nand访问接口根据map_addr发起一级读,加载映射表。

s5:硬件nand访问接口根据map_offset,解析存放主机数据的nand地址:user_addr。

s6:硬件nand访问接口根据user_addr发起二级读,加载用户数据。

s7:硬件nand访问接口将主机所访问的用户数据返回给主机。

s8:将映射表数据返回给映射表管理模块,以便后续访问。

在本实施例中,通过定义一种硬件nand访问接口,支持单命令多级nand读取。对于触发映射表加载的主机读,软件根据所访问主机数据的映射表的nand存放地址,构建两级nand读命令,并提交硬件nand访问接口执行。具体地,对于二级nand读命令,硬件nand访问接口根据所提交的映射表存放地址发起映射表读取。此外,对于二级nand读命令,硬件nand访问接口解析所加载的映射表,获取存放主机访问数据的物理地址,自动发起二次读取,返回主机所需数据。

应该理解的是,虽然图2-5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图6所示,提供了一种基于映射表动态加载的读请求处理装置600,该装置包括:

提交模块601,所述提交模块用于提交读操作请求给映射表管理模块;

查询模块602,所述查询模块用于所述映射管理模块查询对应的映射表是否已经加载;

第一请求模块603,所述第一请求模块用于若所述映射表已经加载,则所述映射表管理模块发送用户数据所在地址信息给到后端模块,所述后端模块向硬件nand访问接口发起一级读请求;

第二请求模块604,所述第二请求模块用于若所述映射表尚未加载,则所述映射表管理模块发送所述映射表所在地址信息给到后端模块,所述后端模块向硬件nand访问接口发起多级读请求;

请求响应模块605,所述请求响应模块用于所述硬件nand访问接口根据所接收到的读请求完成对应的一级或多级读操作。

在一个实施例中,所述请求响应模块605还用于:

当所述硬件nand访问接口接收到所述后端模块发送的一级读请求时,直接加载用户数据;

当所述硬件nand访问接口接收到所述后端模块发送的多级读请求时,通过映射表所存放的地址信息及偏移信息完成映射表的加载、提取及用户数据的读取。

在一个实施例中,如图7所示,提供了一种基于映射表动态加载的读请求处理装置600,该装置还包括多级请求模块606,用于:

当查询到对应的映射表尚未加载到内存时,所述映射表管理模块发送存放映射所在nand地址信息map_addr/map_offset给到后端模块;

所述后端模块根据map_addr/map_offset向硬件nand访问接口发起多级读操作请求。

在一个实施例中,所述多级请求模块606还用于:

所述硬件nand访问接口根据map_addr发起一级读并加载映射表;

所述硬件nand访问接口根据map_offset解析存放主机数据的nand地址user_addr,根据user_addr发起二级读并加载用户数据;

所述硬件nand访问接口将主机所访问的用户数据返回给主机,并将映射表数据返回给映射表管理模块以便后续访问。

关于基于映射表动态加载的读请求处理装置的具体限定可以参见上文中对于基于映射表动态加载的读请求处理方法的限定,在此不再赘述。

在一个实施例中,提供了一种计算机设备,其内部结构图可以如图8所示。该计算机设备包括通过装置总线连接的处理器、存储器以及网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作装置、计算机程序和数据库。该内存储器为非易失性存储介质中的操作装置和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于映射表动态加载的读请求处理方法。

本领域技术人员可以理解,图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)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1