本发明涉及信息处理技术,具体涉及一种信息处理方法及电子设备。
背景技术:
目前,存储单元的控制指令的处理方式,为发送给固件部分通过软件进行处理,但是这种处理方式,就需要固件部分的软件进行大量的计算。可以看出,现有技术的针对存储单元的指令的处理方式无法在较低功耗的情况下保证较高的处理效率。
技术实现要素:
本发明实施例提供一种信息处理方法及电子设备,能至少解决现有技术中存在的上述问题。
本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种信息处理方法,包括
获取到存储单元控制器发来的针对存储单元的指令信息;
从所述针对存储单元的指令信息中解析得到全局信息;其中,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息;
从所述指令信息中获取到除所述全局信息外的指令内容信息,至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息;
根据所述检测结果信息对所述指令内容信息进行分类处理得到所述指令内容信息对应的类别,根据所述指令内容信息对应的类别从至少一个固件部分中选取对应的固件部分,将所述指令内容信息发送至选取的固件部分。
本发明实施例提供了一种电子设备,所述电子设备包括:
指令获取模块,用于获取到存储单元控制器发来的针对存储单元的指令信息;
全局处理模块,用于从所述针对存储单元的指令信息中解析得到全局信息;其中,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息,从所述指令信息中获取到除所述全局信息外的指令内容信息;
局部加速模块,用于至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息;
分类模块,用于根据所述检测结果信息对所述指令内容信息进行分类处理得到所述指令内容信息对应的类别;
上报模块,用于根据所述指令内容信息对应的类别从至少一个固件部分中选取对应的固件部分,将所述指令内容信息发送至选取的固件部分;
固件部分,用于接收分类模块发来的指令信息的指令内容信息。
本发明实施例中提供一种信息处理方法及电子设备,根据接收到的存储单元的指令信息进行解析,得到全局信息,进而对于除去全局信息之外的剩余的指令内容信息进行检测,再根据检测结果进行分类处理,以使得不同类别的指令内容信息发送到对应类别的固件中。如此,就能够在将存储单元的指令信息发送到固件部分之前,对指令信息进行预处理,尤其是能够对指令信息进行检测进而进行分类,从而减少固件部分需要通过软件来进行的处理的内容,提升了针对存储单元的指令信息的处理效率,并且降低了存储单元及其固件部分的处理功耗。
附图说明
图1为本发明实施例中信息处理方法的实现流程示意图;
图2为本发明实施例的处理流程示意图一;
图3为本发明实施例的处理流程示意图二;
图4为本发明实施例整体处理流程示意图;
图5为本发明实施例电子设备组成结构示意一;
图6为本发明实施例电子设备组成结构示意二。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
实施例一、
本发明实施例提供了一种信息处理方法,如图1所示,所述方法包括:
步骤101:获取到存储单元控制器发来的针对存储单元的指令信息;
步骤102:从所述针对存储单元的指令信息中解析得到全局信息;其中,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息;
步骤103:从所述指令信息中获取到除所述全局信息外的指令内容信息,至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息;
步骤104:根据所述检测结果信息对所述指令内容信息进行分类处理得到所述指令内容信息对应的类别,根据所述指令内容信息对应的类别从至少一个固件部分中选取对应的固件部分,将所述指令内容信息发送至选取的固件部分。
本实施例可以应用于一种电子设备,该电子设备可以设置在存储单元控制器、以及固件部分之间,对接收到的针对存储单元的指令信息进行处理。
其中,所述存储单元控制器可以为NVMe控制器。本实施例的一个处理场景为:从NVMe控制器接收完整的NVMe命令,利用预置的硬件单元进行分析处理,并最终将适合FW理解的信息上报。
本实施例提供的处理中,针对获取到的存储单元的指令信息进行以下六个处理流程,如图2所示,分别为:取命令(FETCH)、预分拣(PRE-CLASSIFIER)、全局计算(GLOBAL-PROC)、局部加速(LOCAL-PROC)、分拣(CLASSIFER)、以及上报(REPORT)。
下面结合上述处理流程分别进行介绍:
第一,取命令(FETCH):
获取到存储单元控制器发来的针对存储单元的指令信息。具体的可以为:通过预设定义的握手时序,从NVMe控制器接收一条完整的NVMe命令作为存储单元的指令信息。
所述针对存储单元的指令信息可以为64B长度,其中,可以包含主机命令的所有信息。
第二、预分拣(PRE-CLASSIFIER),也就是说,在启动后续计算之前,先对命令进行初步解析,当某些特殊命令出现时,直接发送至固件中。
第三、全局计算(GLOBAL-PROC):
指令信息中可以包含全局信息,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息。可以理解的是,这些通用信息对于所有的指令信息的命令类型都必需解析,因此在流水线的初始阶段进行一次性处理,作为全局信息被传递并影响该条命令的后续处理流程。所述从所述针对存储单元的指令信息中解析得到全局信息,包括:
从所述针对存储单元的指令信息中获取到以下信息至少之一:
指令长度、指令的起止地址、指令的队列标识(ID)信息、指令的标识信息以及指令的命名空间标识信息(Namespace ID)。
所述从所述指令信息中获取到除所述全局信息外的指令内容信息,包括:
根据所述全局信息将所述指令信息进行地址映射,在确定根据所述全局信息能够讲所述指令信息映射至物理地址时,从所述指令信息中获取到除所述全局信息外的指令内容信息。
具体来说,在本处理流程中,需要将上述全局信息提取出来之后,通过计算映射到设备本身的实际空间,这种处理类似于CPU中的虚拟-物理地址映射。只有映射到设备实际空间,才能被后续加速单元和FW直接使用。
其中,所述映射的处理可以为至少利用命名空间标识信息确定设备的实际物理空间,然后可以将所述命名空间标识信息删除恢复为所述电子设备的实际物理空间对应的全局地址空间。
需要理解的是,上述解析出来的全局信息需要随着所述指令信息向下一个流程发送出去,其作用可以为用于确定指令信息对应的设备实际空间。
第四、局部加速(LOCAL-PROC):
所述至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息,包括以下至少之一:
检测所述指令信息与历史信息是否重叠;
检测所述指令信息是否超时;
检测所述指令信息是否已保存在缓存中。
在得到了所有必须的全局信息之后,此LOCAL-PROC的处理流程将对命令的指令内容信息进行展开,此处存在多个并行的本地加速单元,同时对没有相互关系的字段进行加速,因此pipeline stage latency取决于并行单元中最耗时的一个。
其中,所述检测所述指令信息与历史信息是否重叠,可以包括有命令重叠检测,以及数据流检测,具体的,命令重叠检测为:检测当前命令是否在过去的命令中出现过;数据流重叠检测为:检测当前命令所含数据段是否在过去的命令中出现过。
所述检测所述指令信息是否超时可以为检测某条命令是否长时间没有得到处理。
所述检测所述指令信息是否已保存在缓存中,比如,检测当前命令是否在双数据速率(DDR)闪存的写缓存里面,如果在,就在所述指令信息中设置缓存标识,通过该缓存标识用于指示FW直接操作DDR即可;否则,就设置缓存标识用于指示FW操作NAND闪存。
另外,上述检测仅为几种示例,实际处理中还可以包括有其他种类的检测,比如,可以检测所述指令内容信息的处理类型,以及检测到指令内容信息的长度,或者还可以包括有检测到指令内容信息的优先级。或者,还可以为根据检测指令内容信息中的部分内容确定所述指令内容信息的优先级标识等等处理方式。本实施例中不对其进行穷举。
第五、分拣(CLASSIFIER):
接收前级的处理结果,按照预设的分类方式进行分类,对指令信息进行分类,并且根据分类结果将指令信息发送至对应的固件部分。
第六、上报(REPORT):
每一个固件部分可以维护一组上报队列,根据分类结果,将命令加速信息分别塞入相应的上报队列。该组队列可由FW通过一组寄存器映射地址进行读取。
可见,通过采用上述方案,就能够根据接收到的存储单元的指令信息进行解析,得到全局信息,进而对于除去全局信息之外的剩余的指令内容信息进行检测,再根据检测结果进行分类处理,以使得不同类别的指令内容信息发送到对应类别的固件中。如此,就能够在将存储单元的指令信息发送到固件部分之前,对指令信息进行预处理,尤其是能够对指令信息进行检测进而进行分类,从而减少固件部分需要通过软件来进行的处理的内容,提升了针对存储单元的指令信息的处理效率,并且降低了存储单元及其固件部分的处理功耗。
实施例二、
本发明实施例提供了一种信息处理方法,如图1所示,所述方法包括:
步骤101:获取到存储单元控制器发来的针对存储单元的指令信息;
步骤102:从所述针对存储单元的指令信息中解析得到全局信息;其中,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息;
步骤103:从所述指令信息中获取到除所述全局信息外的指令内容信息,至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息;
步骤104:根据所述检测结果信息对所述指令内容信息进行分类处理得到所述指令内容信息对应的类别,根据所述指令内容信息对应的类别从至少一个固件部分中选取对应的固件部分,将所述指令内容信息发送至选取的固件部分。
本实施例可以应用于一种电子设备,该电子设备可以设置在存储单元控制器、以及固件部分之间,对接收到的针对存储单元的指令信息进行处理。
其中,所述存储单元控制器可以为NVMe控制器。本实施例的一个处理场景为:从NVMe控制器接收完整的NVMe命令,利用预置的硬件单元进行分析处理,并最终将适合FW理解的信息上报。
本实施例提供的处理中,针对获取到的存储单元的指令信息进行以下六个处理流程,如图2所示,分别为:取命令(FETCH)、预分拣(PRE-CLASSIFIER)、全局计算(GLOBAL-PROC)、局部加速(LOCAL-PROC)、分拣(CLASSIFER)、以及上报(REPORT)。
下面结合图3和图4对上述处理流程分别进行介绍:
第一,取命令(FETCH):
获取到存储单元控制器发来的针对存储单元的指令信息。具体的可以为:通过预设定义的握手时序,从NVMe控制器接收一条完整的NVMe命令作为存储单元的指令信息。
所述针对存储单元的指令信息可以为64B长度,其中,可以包含主机命令的所有信息。
第二、预分拣(PRE-CLASSIFIER),也就是说,在启动后续计算之前,先对命令进行初步解析,当某些特殊命令出现时,直接发送至固件中。
参见图3,具体来说,所述从所述针对存储单元的指令信息中解析得到全局信息之前,所述方法还包括:
对针对存储单元的指令信息进行解析,判断所述指令信息中是否包含有预设类型的指令;若所述指令信息中包含预设类型的指令,则直接将所述针对存储单元的指令信息发送至固件部分。比如,参见图4,当检测到指令信息为预设类型的指令时,可以直接发送给维持缺省队列的固件部分。
其中,所述预设类型的指令可以根据实际情况进行预设,比如可以为:
管理(admin)命令:由于管理命令为特殊的NVMe命令,所以直接上报固件(FW)部分进行处理;
旁路(bypass)模式命令:该命令表征本实施例所在的电子设备当前被置于旁路模式,那么此时确定不仅不对该命令进行处理,还确定不对任何命令做加速处理,直接上报FW部分;
不支持命令:通过查表确定当前的指令信息的操作码(opcode)不在加速器支持范围内,直接上报FW。
第三、全局计算(GLOBAL-PROC):
指令信息中可以包含全局信息,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息。可以理解的是,这些通用信息对于所有的指令信息的命令类型都必需解析,因此在流水线的初始阶段进行一次性处理,作为全局信息被传递并影响该条命令的后续处理流程。所述从所述针对存储单元的指令信息中解析得到全局信息,包括:
从所述针对存储单元的指令信息中获取到以下信息至少之一:
指令长度、指令的起止地址、指令的队列标识(ID)信息、指令的标识信息以及指令的命名空间标识信息(Namespace ID)。
所述从所述指令信息中获取到除所述全局信息外的指令内容信息,包括:
根据所述全局信息将所述指令信息进行地址映射,在确定根据所述全局信息能够讲所述指令信息映射至物理地址时,从所述指令信息中获取到除所述全局信息外的指令内容信息。
具体来说,在本处理流程中,需要将上述全局信息提取出来之后,通过计算映射到设备本身的实际空间,这种处理类似于CPU中的虚拟-物理地址映射。只有映射到设备实际空间,才能被后续加速单元和FW直接使用。
其中,所述映射的处理可以为至少利用命名空间标识信息确定设备的实际物理空间,然后可以将所述命名空间标识信息删除恢复为所述电子设备的实际物理空间对应的全局地址空间。
需要理解的是,上述解析出来的全局信息需要随着所述指令信息向下一个流程发送出去,其作用可以为用于确定指令信息对应的设备实际空间。
进一步地,参见图4,本处理流程中还可以包括:判断从所述针对存储单元的指令信息中解析得到全局信息的处理是否存在异常处理情况,若存在,则将所述指令信息直接发送至异常处理队列,并发送异常处理队列至所述固件部分。
其中,所述异常处理情况可以为全局信息无法获取等等,本实施例中不进行穷举。另外,结合图4,当确定指令信息存在异常处理情况时,可以将指令信息发送给异常处理模块,由异常处理模块将指令信息发送至固件部分维护的异常处理队列。
第四、局部加速(LOCAL-PROC):
所述至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息,包括以下至少之一:
检测所述指令信息与历史信息是否重叠;
检测所述指令信息是否超时;
检测所述指令信息是否已保存在缓存中。
在得到了所有必须的全局信息之后,此LOCAL-PROC的处理流程将对命令的指令内容信息进行展开,此处存在多个并行的本地加速单元,比如参见图4,其中可以具备多个局部加速单元,图中n可以为大于二的整数,同时对没有相互关系的字段进行加速,因此pipeline stage latency取决于并行单元中最耗时的一个。
其中,所述检测所述指令信息与历史信息是否重叠,可以包括有命令重叠检测,以及数据流检测,具体的,命令重叠检测为:检测当前命令是否在过去的命令中出现过;数据流重叠检测为:检测当前命令所含数据段是否在过去的命令中出现过。
所述检测所述指令信息是否超时可以为检测某条命令是否长时间没有得到处理。
所述检测所述指令信息是否已保存在缓存中,比如,检测当前命令是否在双数据速率(DDR)闪存的写缓存里面,如果在,就在所述指令信息中设置缓存标识,通过该缓存标识用于指示FW直接操作DDR即可;否则,就设置缓存标识用于指示FW操作NAND闪存。
另外,上述检测仅为几种示例,实际处理中还可以包括有其他种类的检测,比如,可以检测所述指令内容信息的处理类型,以及检测到指令内容信息的长度,或者还可以包括有检测到指令内容信息的优先级。或者,还可以为根据检测指令内容信息中的部分内容确定所述指令内容信息的优先级标识等等处理方式。本实施例中不对其进行穷举。
本实施例本处理流程中还可以包括:判断对所述指令信息中除所述全局信息外的指令内容信息进行检测处理是否存在异常处理情况,若存在,则将所述指令信息直接发送至异常处理队列,并发送所述异常处理队列至固件部分。
本流程中所述的检测处理存在异常处理情况可以为无法处理指令内容信息等,本实施例中不进行穷举。另外,结合图4,当确定指令信息存在异常处理情况时,可以将指令信息发送给异常处理模块,由异常处理模块将指令信息发送至固件部分维护的异常处理队列。
第五、分拣(CLASSIFIER):
接收前级的处理结果,按照预设的分类方式进行分类,对指令信息进行分类,并且根据分类结果将指令信息发送至对应的固件部分。
所述对所述指令内容信息进行分类处理得到所述指令内容信息对应的类别,包括:
基于预设维度对所述指令内容信息进行分类处理,得到所述指令内容信息对应的类别;
其中,所述预设维度维度包括以下至少之一:
基于类型进行分类;
基于所述指令内容信息的优先级进行分类;
基于所述指令内容信息的长度进行分类。
接收前级的检测处理结果,按照下面的分类机制,将命令进行分拣并标示:
命令类型:读、写、冲刷、等;
优先级:高、中、低;
命令长度:长命令、短命令。其中,长命令以及短命令的划分方式可以为根据包含的指令信息的数量,比如,包含有5条指令信息可以为长命令。
需要说明的是,本实施例中预设维度可以为上述一种分类方式,比如,命令类型可以单独作为一个类型,读类型的指令信息、写类型的指令信息;或者高优先级的指令信息等;另外,预设维度还可以为上述几种分类的结合,比如,优先级最高的并且为长写缓存的命令,这位一种类型的命令。其他的分类的结合不进行穷举。
第六、上报(REPORT):
每一个固件部分可以维护一组上报队列,根据分类结果,将命令加速信息分别塞入相应的上报队列。该组队列可由FW通过一组寄存器映射地址进行读取。
所述将所述指令内容信息及其对应的检测结果信息发送至选取的固件部分,包括:
将所述指令内容信息及其对应的检测结果信息发送至选取的固件部分对应的信息队列中;其中,所述固件部分对应的信息队列为能够以先入先出的方式将处于所述信息队列中的指令内容信息发送至所述固件部分,以使得所述固件部分处理接收到的指令内容信息。比如,参见图4中,能够提供m个固件部分,m为大于等于2的整数。
本实施例能够提供多个固件部分,分别对应不同类型的指令信息,每一个固件部分可以维持一个队列,队列的输入以及输出方式为先入先出的处理方式。
可见,通过采用上述方案,就能够根据接收到的存储单元的指令信息进行解析,得到全局信息,进而对于除去全局信息之外的剩余的指令内容信息进行检测,再根据检测结果进行分类处理,以使得不同类别的指令内容信息发送到对应类别的固件中。如此,就能够在将存储单元的指令信息发送到固件部分之前,对指令信息进行预处理,尤其是能够对指令信息进行检测进而进行分类,从而减少固件部分需要通过软件来进行的处理的内容,提升了针对存储单元的指令信息的处理效率,并且降低了存储单元及其固件部分的处理功耗。
实施例三、
本发明实施例提供了一种电子设备,如图5所示,所述电子设备包括:
指令获取模块51,用于获取到存储单元控制器发来的针对存储单元的指令信息;
全局处理模块52,用于从所述针对存储单元的指令信息中解析得到全局信息;其中,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息,从所述指令信息中获取到除所述全局信息外的指令内容信息;
局部加速模块53,用于至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息;
分类模块54,用于根据所述检测结果信息对所述指令内容信息进行分类处理得到所述指令内容信息对应的类别;
上报模块55,用于根据所述指令内容信息对应的类别从至少一个固件部分中选取对应的固件部分,将所述指令内容信息发送至选取的固件部分;
固件部分56,用于接收分类模块54发来的指令信息的指令内容信息。
本实施例可以应用于一种电子设备,该电子设备可以设置在存储单元控制器、以及固件部分之间,对接收到的针对存储单元的指令信息进行处理。
其中,所述存储单元控制器可以为NVMe控制器。本实施例的一个处理场景为:从NVMe控制器接收完整的NVMe命令,利用预置的硬件单元进行分析处理,并最终将适合FW理解的信息上报。
本实施例提供的处理中,针对获取到的存储单元的指令信息进行以下六个处理流程,如图2所示,分别为:取命令(FETCH)、预分拣(PRE-CLASSIFIER)、全局计算(GLOBAL-PROC)、局部加速(LOCAL-PROC)、分拣(CLASSIFER)、以及上报(REPORT)。
下面结合上述处理流程分别进行介绍:
第一,取命令(FETCH):
指令获取模块51,用于获取到存储单元控制器发来的针对存储单元的指令信息。具体的可以为:通过预设定义的握手时序,从NVMe控制器接收一条完整的NVMe命令作为存储单元的指令信息。
所述针对存储单元的指令信息可以为64B长度,其中,可以包含主机命令的所有信息。
第二、预分拣(PRE-CLASSIFIER),也就是说,在启动后续计算之前,先对命令进行初步解析,当某些特殊命令出现时,直接发送至固件中。
第三、全局计算(GLOBAL-PROC):
指令信息中可以包含全局信息,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息。可以理解的是,这些通用信息对于所有的指令信息的命令类型都必需解析,因此在流水线的初始阶段进行一次性处理,作为全局信息被传递并影响该条命令的后续处理流程。所述从所述针对存储单元的指令信息中解析得到全局信息,包括:
全局处理模块52,用于从所述针对存储单元的指令信息中获取到以下信息至少之一:
指令长度、指令的起止地址、指令的队列标识(ID)信息、指令的标识信息以及指令的命名空间标识信息(Namespace ID)。
所述从所述指令信息中获取到除所述全局信息外的指令内容信息,包括:
根据所述全局信息将所述指令信息进行地址映射,在确定根据所述全局信息能够讲所述指令信息映射至物理地址时,从所述指令信息中获取到除所述全局信息外的指令内容信息。
具体来说,在本处理流程中,需要将上述全局信息提取出来之后,通过计算映射到设备本身的实际空间,这种处理类似于CPU中的虚拟-物理地址映射。只有映射到设备实际空间,才能被后续加速单元和FW直接使用。
其中,所述映射的处理可以为至少利用命名空间标识信息确定设备的实际物理空间,然后可以将所述命名空间标识信息删除恢复为所述电子设备的实际物理空间对应的全局地址空间。
需要理解的是,上述解析出来的全局信息需要随着所述指令信息向下一个流程发送出去,其作用可以为用于确定指令信息对应的设备实际空间。
第四、局部加速(LOCAL-PROC):
局部加速模块53,用于至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息,包括以下至少之一:
检测所述指令信息与历史信息是否重叠;
检测所述指令信息是否超时;
检测所述指令信息是否已保存在缓存中。
在得到了所有必须的全局信息之后,此LOCAL-PROC的处理流程将对命令的指令内容信息进行展开,此处存在多个并行的本地加速单元,同时对没有相互关系的字段进行加速,因此pipeline stage latency取决于并行单元中最耗时的一个。
其中,所述检测所述指令信息与历史信息是否重叠,可以包括有命令重叠检测,以及数据流检测,具体的,命令重叠检测为:检测当前命令是否在过去的命令中出现过;数据流重叠检测为:检测当前命令所含数据段是否在过去的命令中出现过。
所述检测所述指令信息是否超时可以为检测某条命令是否长时间没有得到处理。
所述检测所述指令信息是否已保存在缓存中,比如,检测当前命令是否在双数据速率(DDR)闪存的写缓存里面,如果在,就在所述指令信息中设置缓存标识,通过该缓存标识用于指示FW直接操作DDR即可;否则,就设置缓存标识用于指示FW操作NAND闪存。
另外,上述检测仅为几种示例,实际处理中还可以包括有其他种类的检测,比如,可以检测所述指令内容信息的处理类型,以及检测到指令内容信息的长度,或者还可以包括有检测到指令内容信息的优先级。或者,还可以为根据检测指令内容信息中的部分内容确定所述指令内容信息的优先级标识等等处理方式。本实施例中不对其进行穷举。
第五、分拣(CLASSIFIER):
分类模块54,用于接收前级的处理结果,按照预设的分类方式进行分类,对指令信息进行分类,并且根据分类结果将指令信息发送至对应的固件部分。
第六、上报(REPORT):
每一个固件部分可以维护一组上报队列,根据分类结果,将命令加速信息分别塞入相应的上报队列。该组队列可由FW通过一组寄存器映射地址进行读取。
可见,通过采用上述方案,就能够根据接收到的存储单元的指令信息进行解析,得到全局信息,进而对于除去全局信息之外的剩余的指令内容信息进行检测,再根据检测结果进行分类处理,以使得不同类别的指令内容信息发送到对应类别的固件中。如此,就能够在将存储单元的指令信息发送到固件部分之前,对指令信息进行预处理,尤其是能够对指令信息进行检测进而进行分类,从而减少固件部分需要通过软件来进行的处理的内容,提升了针对存储单元的指令信息的处理效率,并且降低了存储单元及其固件部分的处理功耗。
实施例四、
本发明实施例提供了一种电子设备,如图6所示,所述电子设备包括:
指令获取模块51,用于获取到存储单元控制器发来的针对存储单元的指令信息;
全局处理模块52,用于从所述针对存储单元的指令信息中解析得到全局信息;其中,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息,从所述指令信息中获取到除所述全局信息外的指令内容信息;
局部加速模块53,用于至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息;
分类模块54,用于根据所述检测结果信息对所述指令内容信息进行分类处理得到所述指令内容信息对应的类别;
上报模块55,用于根据所述指令内容信息对应的类别从至少一个固件部分中选取对应的固件部分,将所述指令内容信息发送至选取的固件部分;
固件部分56,用于接收分类模块54发来的指令信息的指令内容信息。
本实施例可以应用于一种电子设备,该电子设备可以设置在存储单元控制器、以及固件部分之间,对接收到的针对存储单元的指令信息进行处理。
其中,所述存储单元控制器可以为NVMe控制器。本实施例的一个处理场景为:从NVMe控制器接收完整的NVMe命令,利用预置的硬件单元进行分析处理,并最终将适合FW理解的信息上报。
本实施例提供的处理中,针对获取到的存储单元的指令信息进行以下六个处理流程,如图2所示,分别为:取命令(FETCH)、预分拣(PRE-CLASSIFIER)、全局计算(GLOBAL-PROC)、局部加速(LOCAL-PROC)、分拣(CLASSIFER)、以及上报(REPORT)。
下面结合图3和图4对上述处理流程分别进行介绍:
第一,取命令(FETCH):
获取到存储单元控制器发来的针对存储单元的指令信息。具体的可以为:通过预设定义的握手时序,从NVMe控制器接收一条完整的NVMe命令作为存储单元的指令信息。
所述针对存储单元的指令信息可以为64B长度,其中,可以包含主机命令的所有信息。
第二、预分拣(PRE-CLASSIFIER),也就是说,在启动后续计算之前,先对命令进行初步解析,当某些特殊命令出现时,直接发送至固件中。
参见图6,具体来说,所述电子设备还包括:
预处理模块57,用于对针对存储单元的指令信息进行解析,判断所述指令信息中是否包含有预设类型的指令;若所述指令信息中包含预设类型的指令,则直接将所述针对存储单元的指令信息发送至固件部分。
其中,所述预设类型的指令可以根据实际情况进行预设,比如可以为:
管理(admin)命令:由于管理命令为特殊的NVMe命令,所以直接上报固件(FW)部分进行处理;
旁路(bypass)模式命令:该命令表征本实施例所在的电子设备当前被置于旁路模式,那么此时确定不仅不对该命令进行处理,还确定不对任何命令做加速处理,直接上报FW部分;
不支持命令:通过查表确定当前的指令信息的操作码(opcode)不在加速器支持范围内,直接上报FW。
第三、全局计算(GLOBAL-PROC):
指令信息中可以包含全局信息,所述全局信息用于表征所述存储单元控制器能够接收到的指令信息的通用信息。可以理解的是,这些通用信息对于所有的指令信息的命令类型都必需解析,因此在流水线的初始阶段进行一次性处理,作为全局信息被传递并影响该条命令的后续处理流程。所述从所述针对存储单元的指令信息中解析得到全局信息,包括:
从所述针对存储单元的指令信息中获取到以下信息至少之一:
指令长度、指令的起止地址、指令的队列标识(ID)信息、指令的标识信息以及指令的命名空间标识信息(Namespace ID)。
所述从所述指令信息中获取到除所述全局信息外的指令内容信息,包括:
根据所述全局信息将所述指令信息进行地址映射,在确定根据所述全局信息能够讲所述指令信息映射至物理地址时,从所述指令信息中获取到除所述全局信息外的指令内容信息。
具体来说,在本处理流程中,需要将上述全局信息提取出来之后,通过计算映射到设备本身的实际空间,这种处理类似于CPU中的虚拟-物理地址映射。只有映射到设备实际空间,才能被后续加速单元和FW直接使用。
其中,所述映射的处理可以为至少利用命名空间标识信息确定设备的实际物理空间,然后可以将所述命名空间标识信息删除恢复为所述电子设备的实际物理空间对应的全局地址空间。
需要理解的是,上述解析出来的全局信息需要随着所述指令信息向下一个流程发送出去,其作用可以为用于确定指令信息对应的设备实际空间。
进一步地,参见图6,所述电子设备还包括:
异常处理模块58,用于接收到异常处理情况对应的指令信息建立异常处理队列,并发送异常队里队列至对应的固件部分;所述全局处理模块52,用于判断从所述针对存储单元的指令信息中解析得到全局信息的处理是否存在异常处理情况,若存在,则将所述指令信息直接发送至异常处理队列,并发送异常处理队列至所述固件部分。
其中,所述异常处理情况可以为全局信息无法获取等等,本实施例中不进行穷举。另外,结合图4,当确定指令信息存在异常处理情况时,可以将指令信息发送给异常处理模块58,由异常处理模块58将指令信息发送至固件部分维护的异常处理队列。
第四、局部加速(LOCAL-PROC):
所述至少基于历史缓存数据对所述指令内容信息进行检测得到检测结果信息,包括以下至少之一:
检测所述指令信息与历史信息是否重叠;
检测所述指令信息是否超时;
检测所述指令信息是否已保存在缓存中。
在得到了所有必须的全局信息之后,此LOCAL-PROC的处理流程将对命令的指令内容信息进行展开,此处存在多个并行的本地加速单元,比如参见图4,其中可以具备多个局部加速单元,图中n可以为大于二的整数,同时对没有相互关系的字段进行加速,因此pipeline stage latency取决于并行单元中最耗时的一个。
其中,所述检测所述指令信息与历史信息是否重叠,可以包括有命令重叠检测,以及数据流检测,具体的,命令重叠检测为:检测当前命令是否在过去的命令中出现过;数据流重叠检测为:检测当前命令所含数据段是否在过去的命令中出现过。
所述检测所述指令信息是否超时可以为检测某条命令是否长时间没有得到处理。
所述检测所述指令信息是否已保存在缓存中,比如,检测当前命令是否在双数据速率(DDR)闪存的写缓存里面,如果在,就在所述指令信息中设置缓存标识,通过该缓存标识用于指示FW直接操作DDR即可;否则,就设置缓存标识用于指示FW操作NAND闪存。
另外,上述检测仅为几种示例,实际处理中还可以包括有其他种类的检测,比如,可以检测所述指令内容信息的处理类型,以及检测到指令内容信息的长度,或者还可以包括有检测到指令内容信息的优先级。或者,还可以为根据检测指令内容信息中的部分内容确定所述指令内容信息的优先级标识等等处理方式。本实施例中不对其进行穷举。
所述局部加速模块53,用于判断对所述指令信息中除所述全局信息外的指令内容信息进行检测处理是否存在异常处理情况,若存在,则将所述指令信息直接发送至异常处理模块;相应的,异常处理模块58,用于接收到异常处理情况对应的指令信息建立异常处理队列,并发送异常队里队列至对应的固件部分。
本流程中所述的检测处理存在异常处理情况可以为无法处理指令内容信息等,本实施例中不进行穷举。另外,结合图4,当确定指令信息存在异常处理情况时,可以将指令信息发送给异常处理模块58,由异常处理模块58将指令信息发送至固件部分维护的异常处理队列。
第五、分拣(CLASSIFIER):
接收前级的处理结果,按照预设的分类方式进行分类,对指令信息进行分类,并且根据分类结果将指令信息发送至对应的固件部分。
所述对所述指令内容信息进行分类处理得到所述指令内容信息对应的类别,包括:
基于预设维度对所述指令内容信息进行分类处理,得到所述指令内容信息对应的类别;
其中,所述预设维度维度包括以下至少之一:
基于类型进行分类;
基于所述指令内容信息的优先级进行分类;
基于所述指令内容信息的长度进行分类。
接收前级的检测处理结果,按照下面的分类机制,将命令进行分拣并标示:
命令类型:读、写、冲刷、等;
优先级:高、中、低;
命令长度:长命令、短命令。其中,长命令以及短命令的划分方式可以为根据包含的指令信息的数量,比如,包含有5条指令信息可以为长命令。
需要说明的是,本实施例中预设维度可以为上述一种分类方式,比如,命令类型可以单独作为一个类型,读类型的指令信息、写类型的指令信息;或者高优先级的指令信息等;另外,预设维度还可以为上述几种分类的结合,比如,优先级最高的并且为长写缓存的命令,这位一种类型的命令。其他的分类的结合不进行穷举。
第六、上报(REPORT):
每一个固件部分可以维护一组上报队列,根据分类结果,将命令加速信息分别塞入相应的上报队列。该组队列可由FW通过一组寄存器映射地址进行读取。
所述上报模块55,用于将所述指令内容信息及其对应的检测结果信息发送至选取的固件部分对应的信息队列中;其中,所述固件部分对应的信息队列为能够以先入先出的方式将处于所述信息队列中的指令内容信息发送至所述固件部分,以使得所述固件部分处理接收到的指令内容信息。比如,参见图4中,能够提供m个固件部分,m为大于等于2的整数。
本实施例能够提供多个固件部分,分别对应不同类型的指令信息,每一个固件部分可以维持一个队列,队列的输入以及输出方式为先入先出的处理方式。
可见,通过采用上述方案,就能够根据接收到的存储单元的指令信息进行解析,得到全局信息,进而对于除去全局信息之外的剩余的指令内容信息进行检测,再根据检测结果进行分类处理,以使得不同类别的指令内容信息发送到对应类别的固件中。如此,就能够在将存储单元的指令信息发送到固件部分之前,对指令信息进行预处理,尤其是能够对指令信息进行检测进而进行分类,从而减少固件部分需要通过软件来进行的处理的内容,提升了针对存储单元的指令信息的处理效率,并且降低了存储单元及其固件部分的处理功耗。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。