发明内容
本发明提供的固态存储设备、主机的工作方法及固态存储设备、主机,解决现有固态存储设备内Cache不够用,或将Cache中的数据放在存储介质中会牺牲固态存储设备的性能,同时浪费一部分设备存储空间的问题。
为解决上述技术问题,本发明采用以下技术方案:
一种固态存储设备的工作方法,包括:获取主机分配的内存区域信息;将获取到的所述内存区域信息保存,并建立所述主机的逻辑区块地址到所述固态存储设备的存储阵列的物理区块地址的映射关系;根据所述内存区域信息将所述映射关系发送至所述主机分配的内存区域。
在一些实施例中,将获取到的所述内存区域信息保存具体为:将获取到的所述内存区域信息保存在预设的主机内存表分区内。
在一些实施例中,所述的固态存储设备的工作方法还包括:接收所述主机发送的写命令;对所述写命令进行解析;根据所述写命令的解析结果获取所述主机需要写入的数据;根据预设算法将所述数据写入所述预设算法指定的存储阵列的物理区块地址,并将新写入的所述数据对应的逻辑区块地址到物理区块地址的映射关系保存。
在一些实施例中,将新写入的所述数据对应的逻辑区块地址到物理区块地址的映射关系保存具体为:将新写入的所述数据对应的逻辑区块地址到物理区块地址的映射关系写入预设的物理区块地址淘汰表分区。
在一些实施例中,所述的固态存储设备的工作方法还包括:判断是否满足写回主机内存的要求;如果满足,则查询对应的主机的内存物理地址入口信息;根据所述入口信息和保存的所述内存区域信息查询出对应的内存物理地址,所述内存区域信息包括内存物理地址;向所述主机发送所述内存物理地址的写命令;将所述写命令相关的逻辑区块地址到物理区块地址的映射关系写回所述主机的内存。
在一些实施例中,所述的固态存储设备的工作方法还包括:接收所述主机发送的读命令;对所述读命令进行解析,并查询对应的主机的内存物理地址入口信息;根据所述入口信息和保存的所述内存区域信息查询出对应的内存物理地址,所述内存区域信息包括内存物理地址;向所述主机发送所述内存物理地址的读命令;接收所述主机反馈的内存中保存的数据;将所述主机反馈的数据保存。
在一些实施例中,所述的固态存储设备的工作方法还包括:获取所述读命令对应的存储阵列的物理区块地址;发起对所述存储阵列的物理区块地址的读命令;获取根据所述读命令反馈的数据,并根据所述内存物理地址将所述数据写入内存。
在一些实施例中,所述的固态存储设备的工作方法还包括:根据所述内存区域信息将部分或全部缓存数据移至所述主机分配的内存区域中进行缓存。
一种主机的工作方法包括:给固态存储设备分配内存区域;将分配到的内存区域信息发送给所述固态存储设备;接收所述固态存储设备反馈的所述主机的逻辑区块地址到所述固态存储设备的存储阵列的物理区块地址的映射关系;将所述映射关系保存至给所述固态存储设备分配的内存区域。
在一些实施例中,所述的主机的工作方法还包括:向所述固态存储设备发送写命令;根据所述固态存储设备的响应将需要写入的数据发送给所述固态存储设备。
在一些实施例中,所述的主机的工作方法,还包括:接收所述固态存储设备发送的对所述内存区域信息中内存物理地址的写命令;根据所述写命令,接收所述固态存储设备发送的所述写命令相关的逻辑区块地址到物理区块地址的映射关系;将所述所述写命令相关的逻辑区块地址到物理区块地址的映射关系写入所述主机给所述固态存储设备分配的内存区域。
在一些实施例中,所述的主机的工作方法还包括:向所述固态存储设备发送读命令;接收所述固态存储设备发送的对所述内存区域信息中内存物理地址的读命令;向所述固态存储设备反馈内存中保存的数据。
在一些实施例中,所述的主机的工作方法还包括:接收所述固态存储设备根据所述读命令反馈的数据,并根据所述内存物理地址将所述数据写入内存。
在一些实施例中,所述的主机的工作方法还包括:获取所述固态存储设备中部分或全部缓存数据,在给所述固态存储设备分配的内存区域中进行缓存。
一种固态存储设备,包括:第一设备获取模块,用于获取主机分配的内存区域信息;第一设备保存模块,用于将第一获取模块获取到的所述内存区域信息保存;关系建立模块,用于建立所述主机的逻辑区块地址到所述固态存储设备的存储阵列的物理区块地址的映射关系;设备发送模块,用于根据所述内存区域信息将所述映射关系发送至所述主机分配的内存区域。
一种主机,包括:内存分配模块,用于给固态存储设备分配内存区域;主机发送模块,用于将分配到的内存区域信息发送给所述固态存储设备;主机接收模块,用于接收所述固态存储设备反馈的所述主机的逻辑区块地址到所述固态存储设备的存储阵列的物理区块地址的映射关系;第一主机保存模块,用于将所述映射关系保存至给所述固态存储设备分配的内存区域。
本发明提出将固态存储设备缓存中部分或全部数据移至主机的缓存即常称的主机内存中,由于现在的高速设备接口类似PCI Express其每个Lane的带宽为1GB,一般设备例如NGFF协议都是4个Lane,其接口带宽可以达到4GB远远高于设备内CPU访问设备缓存的带宽,因此放在主机内存丝毫不会影响存储系统的IO性能,同时,对于现在的常用主机,其内存配置一般都在8GB,16GB甚至更多,完全可以分配一小部分内存区域给存储设备用。因此,本发明能实现设备的大存储空间,又能不影响设备的IO性能,同时也不浪费存储介质的存储空间。
具体实施方式
本发明提供一种构思,对于现有存储系统,在固态存储设备的Cache中缓存数据的方式提出改进,即将固态存储设备缓存中部分或全部数据移至主机内存中,能实现设备的大存储空间,又能不影响设备的IO性能,同时也不浪费存储介质的存储空间。移至主机内存中进行缓存的数据包括但不局限于:主机的LBA(Logical Block Address,逻辑区块地址)到固态存储设备的存储阵列的PBA(物理区块地址)的映射关系(如映射表)、垃圾回收数据等等。固态存储设备包括非易失性固态存储设备。
下面通过具体实施方式结合附图对本发明作进一步详细说明。
图1为本发明一实施例提供的固态存储设备的工作方法的流程图,请参考图1,包括如下流程:
S101、获取主机分配的内存区域信息,该内存区域信息包括但不局限于:内存物理地址和长度。
S102、将获取到的所述内存区域信息保存,并建立所述主机的LBA到所述固态存储设备的存储阵列的PBA的映射关系;
优选的,将获取到的所述内存区域信息保存具体为:将获取到的所述内存区域信息保存在预设的主机内存表分区内。
可以在固态存储设备的Cache中预设如下一些分区:
主机内存表分区,主要用于放置主机分配给固态存储设备的内存区域的信息,即内存区域信息,主要包括内存物理地址和长度;
LBA对照表分区,主要用于记录跟算法相关的LBA和内存物理地址的映射关系;对于一些简单的实现方式,例如直接将LBA与PBA的映射表顺序排列于主机内存,则也可以不使用此分区;
LBA激活表分区,主要用于存放被操作命中的LBA与PBA的映射关系;
LBA淘汰表分区(即物理区块地址淘汰表分区),主要用于存放将被算法写回主机内存的LBA与PBA的映射关系;
other分区,主要用于存放Firmware(固件)管理设备所需要的其它表项和数据缓存。
LBA到PBA的映射关系可以是直接LBA到PBA的映射,也可以是某种管理算法之后的映射关系,例如hash算法等等。
S103、根据所述内存区域信息将所述映射关系发送至所述主机分配的内存区域。
在一些实施例中,步骤S103之后,还可以进一步包括主机向固态存储设备写数据的步骤:
A11、接收主机发送的写命令;
A12、对所述写命令进行解析;
A13、根据所述写命令的解析结果获取所述主机需要写入的数据;
A14、根据预设算法将所述数据写入所述预设算法指定的存储阵列的物理区块地址,并将新写入的所述数据对应的逻辑区块地址到物理区块地址的映射关系保存。优选的,将新写入的所述数据对应的逻辑区块地址到物理区块地址的映射关系写入预设的LBA淘汰表分区。
根据固件设定,在一些实施例中,步骤A14之后,还可以进一步包括以下写回主机内存的步骤:
A15、判断是否满足写回主机内存的要求;
A16、如果满足,则查询对应的主机的内存物理地址入口信息;
优选的,查询LBA对照表分区,查到对应的主机的内存物理地址入口偏移量;
A17、根据所述入口信息和保存的所述内存区域信息查询出对应的内存物理地址,所述内存区域信息包括内存物理地址;
优选的,根据对应的主机的内存物理地址入口偏移量查询主机内存表分区获得真正的内存物理地址;
A18、向所述主机发送所述内存物理地址的写命令;
A19、将满足条件的逻辑区块地址到物理区块地址的映射关系写回所述主机的内存;满足条件的逻辑区块地址到物理区块地址的映射关系,指的是与所述写命令相关的逻辑区块地址到物理区块地址的映射关系,也即所述写命令命中的逻辑区块地址到物理区块地址的映射关系。
A110、向主机返回写操作完成信息。
在一些实施例中,步骤S103之后,还可以进一步包括以下主机从固态存储设备读数据的步骤:
B11、接收所述主机发送的读命令;
B12、对所述读命令进行解析,并查询对应的主机的内存物理地址入口信息;
优选的,查询LBA对照表分区,查到对应的主机的内存物理地址入口偏移量;
B13、根据所述入口信息和保存的所述内存区域信息查询出对应的内存物理地址,所述内存区域信息包括内存物理地址;
优选的,根据对应的主机的内存物理地址入口偏移量查询主机内存表分区获得真正的内存物理地址;
B14、向所述主机发送所述内存物理地址的读命令;
B15、接收所述主机反馈的内存中保存的数据;
B16、将所述主机反馈的数据保存。
优选的,按照设定将主机反馈的数据分解保存在LBA激活表分区。
在一些实施例中,步骤B16之后,还可以进一步包括:
B17、获取所述读命令对应的存储阵列的物理区块地址;
B18、发起对所述存储阵列的物理区块地址的读命令;
B19、获取根据所述读命令反馈的数据,并根据所述内存物理地址将所述数据写入内存;
B110、向主机返回读操作完成信息。
图2为本发明一实施例提供的主机的工作方法的流程图,请参考图2,包括如下流程:
S201、给固态存储设备分配内存区域。
S202、将分配到的内存区域信息发送给所述固态存储设备;该内存区域信息包括但不局限于:内存物理地址和长度。
S203、接收所述固态存储设备反馈的所述主机的逻辑区块地址到所述固态存储设备的存储阵列的物理区块地址的映射关系;
S204、将所述映射关系保存至给所述固态存储设备分配的内存区域。
在一些实施例中,步骤S204之后,还可以进一步包括主机向固态存储设备写数据的步骤:
A21、向所述固态存储设备发送写命令;
A22、根据所述固态存储设备的响应将需要写入的数据发送给所述固态存储设备。
根据固件设定,在一些实施例中,步骤A22之后,还可以进一步包括以下写回主机内存的步骤:
A23、接收所述固态存储设备发送的对所述内存区域信息中内存物理地址的写命令;
A24、根据所述写命令,接收所述固态存储设备发送的满足条件的逻辑区块地址到物理区块地址的映射关系;
满足条件的逻辑区块地址到物理区块地址的映射关系,指的是与所述写命令相关的逻辑区块地址到物理区块地址的映射关系,也即所述写命令命中的逻辑区块地址到物理区块地址的映射关系。
A25、将所述满足条件的逻辑区块地址到物理区块地址的映射关系写入所述主机给所述固态存储设备分配的内存区域。
在一些实施例中,步骤S204之后,还可以进一步包括以下主机从固态存储设备读数据的步骤:
B21、向所述固态存储设备发送读命令;
B22、接收所述固态存储设备发送的对所述内存区域信息中内存物理地址的读命令;
B23、向所述固态存储设备反馈内存中保存的数据。
在一些实施例中,步骤B23之后,还可以进一步包括:
B24、接收所述固态存储设备根据所述读命令反馈的数据,并根据所述内存物理地址将所述数据写入内存。
图3为本发明一实施例提供的固态存储设备的示意图,如图4所示,固态存储设备包括:
第一设备获取模块31,用于获取主机分配的内存区域信息;
第一设备保存模块32,用于将第一获取模块31获取到的所述内存区域信息保存;
关系建立模块33,用于建立所述主机的逻辑区块地址到所述固态存储设备的存储阵列的物理区块地址的映射关系;
设备发送模块34,用于根据所述内存区域信息将所述映射关系发送至所述主机分配的内存区域。
在一些实施例中,固态存储设备还包括:
设备接收模块,用于接收所述主机发送的写命令;
第一设备解析模块,用于对所述写命令进行解析;
第二设备获取模块,用于根据所述写命令的解析结果获取所述主机需要写入的数据;
设备写入模块,用于根据预设算法将所述数据写入所述预设算法指定的存储阵列的物理区块地址;
第二设备保存模块,用于将新写入的所述数据对应的逻辑区块地址到物理区块地址的映射关系保存。
在一些实施例中,固态存储设备还包括:
设备判断模块,用于判断是否满足写回主机内存的要求;
第一设备查询模块,用于设备判断模块的判断结果为满足写回主机内存的要求时,查询对应的主机的内存物理地址入口信息;
第二设备查询模块,用于根据所述入口信息和保存的所述内存区域信息查询出对应的内存物理地址,所述内存区域信息包括内存物理地址;
设备发送模块还用于向所述主机发送所述内存物理地址的写命令;将所述写命令相关的逻辑区块地址到物理区块地址的映射关系发送至所述主机的内存。
在一些实施例中,设备接收模块还用于接收所述主机发送的读命令,接收所述主机反馈的内存中保存的数据,设备发送模块还用于向所述主机发送所述内存物理地址的读命令;固态存储设备还包括:
第二设备解析模块,用于对所述读命令进行解析;
第三设备查询模块,用于查询对应的主机的内存物理地址入口信息;
第四设备查询模块,用于根据所述入口信息和保存的所述内存区域信息查询出对应的内存物理地址,所述内存区域信息包括内存物理地址;
第三设备保存模块,用于将所述主机反馈的数据保存。
在一些实施例中,设备接收模块还用于获取所述读命令对应的存储阵列的物理区块地址,固态存储设备还包括:
设备读操作模块,用于发起对所述存储阵列的物理区块地址的读命令;获取根据所述读命令反馈的数据;
设备发送模块还用于根据所述内存物理地址将所述数据发送至所述主机的内存。
在一些实施例中,设备发送模块还用于根据所述内存区域信息将部分或全部缓存数据移至所述主机分配的内存区域中进行缓存。
图4为本发明一实施例提供的主机的示意图,如图4所示,主机包括:
内存分配模块41,用于给固态存储设备分配内存区域;
主机发送模块42,用于将分配到的内存区域信息发送给所述固态存储设备;
主机接收模块43,用于接收所述固态存储设备反馈的所述主机的逻辑区块地址到所述固态存储设备的存储阵列的物理区块地址的映射关系;
第一主机保存模块44,用于将所述映射关系保存至给所述固态存储设备分配的内存区域。
在一些实施例中,主机发送模块还用于向所述固态存储设备发送写命令;根据所述固态存储设备的响应将需要写入的数据发送给所述固态存储设备。
在一些实施例中,主机接收模块还用于接收所述固态存储设备发送的对所述内存区域信息中内存物理地址的写命令;根据所述写命令,接收所述固态存储设备发送的所述写命令相关的逻辑区块地址到物理区块地址的映射关系;
主机还包括:第二主机保存模块,用于将所述写命令相关的逻辑区块地址到物理区块地址的映射关系写入所述主机的内存。
在一些实施例中,主机发送模块还用于向固态存储设备发送读命令;向所述固态存储设备反馈内存中保存的数据;
主机接收模块还用于接收所述固态存储设备发送的对所述内存区域信息中内存物理地址的读命令。
在一些实施例中,主机接收模块还用于接收所述固态存储设备根据所述读命令反馈的数据;主机还包括第三主机保存模块,用于根据所述内存物理地址将所述数据写入内存。
在一些实施例中,主机接收模块还用于获取所述固态存储设备中部分或全部缓存数据,主机还包括第四主机保存模块,用于将所述固态存储设备中部分或全部缓存数据写入给所述固态存储设备分配的内存区域中进行缓存。
下面进一步举例说明本发明的构思。在存储系统加载固态存储设备的驱动过程中,设备固件通过设备驱动向主机申请管理一部分内存(适用应用层协议为NVMe协议,同时也不排除可以使用其他协议),主机分配的内存区域可以是连续的也可以是不连续的,按照协议管理可以基于4kB,8kB,16kB,32kB等等,驱动在和操作系统握手之后,将申请到的内存区域的内存区域信息(包括但不局限于物理地址信息和长度)发送给固态存储设备,固态存储设备设备在接收到这些信息之后,将这些信息保存在主机内存表分区内。同时,固态存储设备也会根据固件管理的需要,在固态存储设备缓存中初始化如下几个分区:LBA对照表分区、LBA激活表分区、LBA淘汰表分区、other分区,在初始化过程中,固件将对主机数据建立一个从主机LBA到固态存储设备的存储阵列的PBA的映射表(这种映射表可以是直接LBA到PBA的映射,也可以是某种管理算法之后的映射关系,例如hash算法等等),然后,固态存储设备将建立的LBA到设备PBA的映射表发送至申请到的主机内存区域中保存。
当设备初始化完成之后,当主机向固态存储设备发起写命令时,固态存储设备控制器接收到主机的写命令并进行解析,固态存储设备根据命令发起操作获得主机需写入的数据,并根据固件算法将该数据写入固件算法指定的存储阵列的物理区块地址;同时将新写入数据的LBA到PBA的映射表写入LBA淘汰表分区,根据固件设定,当满足写回主机内存的要求之后,查询LBA对照表分区,查到对应的主机的内存物理地址入口偏移量,然后根据内存物理地址入口偏移量查询主机内存表分区获得真正的内存物理地址,接着通过固态存储设备DMA控制器向主机发起此内存物理地址的写操作,将该写操作命中的LBA到PBA的映射表写回主机内存,最后,向主机返回写操作完成。
当主机向固态存储设备发起读命令时,固态存储设备控制器接收到主机的读命令并进行解析,同时查询LBA对照表分区,查到对应的主机的内存物理地址入口偏移量,然后根据内存物理地址入口偏移量查询主机内存表分区获得真正的内存物理地址,接着通过固态存储设备DMA控制器向主机发起此内存物理地址的读操作;主机响应操作将内存保存的信息发送给固态存储设备,固态存储设备处理器核在收到主机发来的此信息,后按照设定将信息分解保存在LBA激活表分区,并作进一步的解析处理,获得具体的主机读命令对应的存储阵列的物理区块地址;固态存储设备控制器发起对阵列指定物理区块地址的读操作,获得需要的数据,并通过设备DMA控制器将数据发送至之前算的指定内存物理地址内,最后,向主机返回读操作完成。
主机内存中保存的除了LBA到存储阵列的PBA的映射表之外,还可以根据设定算法保存缓存数据、垃圾回收数据。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。