固件确认命令处理方法及系统与流程

文档序号:14714010发布日期:2018-06-16 00:58阅读:265来源:国知局
固件确认命令处理方法及系统与流程

本申请涉及固态硬盘领域,具体涉及一种固态存储设备、在线升级固件的方法及系统。



背景技术:

图1是现有技术的固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机系统接口)、SAS(Serial Attached SCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component Interconnect Express,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同固态存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。

NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(Magnetic Random Access Memory,磁阻存储器)、RRAM(Resistive Random Access Memory,阻变存储器)等是常见的NVM。

接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。

控制部件104用于控制在接口103、NVM芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application Specific Integrated Circuit,应用专用集成电路)或者其组合的形式;控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO(Input/Output)命令;控制部件104还可以耦合到DRAM 110,并可访问DRAM 110的数据;在DRAM可存储FTL表和/或缓存的IO命令的数据。

控制部件104包括闪存接口控制器(或称为介质接口控制器、闪存通道控制器),闪存接口控制器耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。NVM芯片105的接口协议包括“Toggle”、“ONFI”等公知的接口协议或标准。

在控制部件104中运行的软件和/或固件(下面统称为“固件”)可被存储在NVM芯片105或另外的固件存储器中。在固态存储设备102上电时,从固件存储器将固件加载到DRAM 110和/或控制部件104内部的存储器中。可选地,通过接口103或调试接口接收并加载固件。

在NVMe规范中定义了固件槽(firmware slot),用于存储固件镜像。NVME规范见(http://nvmexpress.org/wp-content/uploads/NVM_Express_1_2_1_Gold_20160603.pdf)。在支持NVMe规范的固态存储中,提供多个固件槽来存储相同或不同的固件。当将新固件下载给控制部件时,主机可以通过指示固件槽来描述哪个固件镜像被替换。NVMe规范中还定义了固件下载、固件激活(Activate)或固件确认(Commit)命令。通过固件下载命令将固件镜像存储到指定的固件槽中,以及通过固件激活/固件确认命令,向固态存储设备指示下次将使用的固件。从而可实现固态存储设备的固件升级。依据固件激活/固件确认命令的指示,固态存储在下次复位(Reset)时加载新的固件镜像,或者无需复位而立即使用新的固件镜像。

NVMe规范还定义了多种级别的复位,包括NVM子系统复位、传统复位(Conventional Reset,PCIe热/暖/冷复位)、功能级别复位(PCIe复位)或控制器复位(CC.EN从“1”变为“0”)等。NVMe规范中还定义了CSTS(Controller Status,控制器状态)寄存器,主机通过查询CSTS寄存器可知晓复位是否完成。



技术实现要素:

本发明的目的在于提供一种固态存储设备、在线升级固件的方法及系统。

根据本发明的第一方面,提供了根据本发明的第一方面的第一固态存储设备在线升级固件的方法,包括如下步骤:响应于收到固件下载命令,下载固件;响应于接收固件确认命令,延迟一段时间后,固态存储设备发起复位过程,而无需等待复位命令;加载所述固件确认命令中所指示的固件,恢复固态存储设备的运行。

根据本发明的第一方面的第一固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第二固态存储设备在线升级固件的方法,在所述一段时间内,响应来自主机的一条命令。

根据本发明的第一方面的第一固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第三固态存储设备在线升级固件的方法,在所述一段时间内,响应来自主机的多条命令。

根据本发明的第一方面的第一至第三固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第四固态存储设备在线升级固件的方法,还包括,将下载的固件存储到NVM芯片的固件槽中。

根据本发明的第一方面的第一至第四固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第五固态存储设备在线升级固件的方法,下载的固件的多份副本被存储到多个固件槽中。

根据本发明的第一方面的第四或第五固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第六固态存储设备在线升级固件的方法,固态存储设备的控制部件将下载的固件写入指定的固件槽中。

根据本发明的第一方面的第一至第六固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第七固态存储设备在线升级固件的方法,固件确认命令中包含固件存储的固件槽的信息。

根据本发明的第一方面的第七固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第八固态存储设备在线升级固件的方法,固态存储设备的控制部件记录在固件确认命令中指示的要使用的固件槽。

根据本发明的第一方面的第八固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第九固态存储设备在线升级固件的方法,控制部件将指示的固件槽的固件槽编号记录在NVM芯片中。

根据本发明的第一方面的第一至第九固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第十固态存储设备在线升级固件的方法,响应于收到固件确认命令,固态存储设备不再响应主机的IO命令。

根据本发明的第一方面的第十固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第十一固态存储设备在线升级固件的方法,对于正在处理中但尚未处理完成的IO命令,固态存储设备继续处理。

根据本发明的第一方面的第十固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第十二固态存储设备在线升级固件的方法,对于正在处理中但尚未处理完成的IO命令,固态存储设备丢弃尚未处理完成的IO命令。

根据本发明的第一方面的第十固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第十三固态存储设备在线升级固件的方法,固态存储设备不再响应主机的IO命令时,固态存储设备的控制部件的执行器延迟一段时间再停止运行,用来响应来自主机的非IO命令或访问请求。

根据本发明的第一方面的第十三固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第十四固态存储设备在线升级固件的方法,所述一段时间为若干毫秒。

根据本发明的第一方面的第十三固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第十五固态存储设备在线升级固件的方法,所述一段时间是指定时间或指定时间内收到主机访问CSTS寄存器的命令并对访问CSTS寄存器的命令做出响应的时间。

根据本发明的第一方面的第十三固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第十六固态存储设备在线升级固件的方法,以固态存储设备的控制部件延迟的一段时间与响应了指定数量的主机命令二者中较早满足的条件作为发起对固态存储设备的复位过程的依据。

根据本发明的第一方面的第十三固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第十七固态存储设备在线升级固件的方法,固态存储设备接收的主机访问请求包括PCIe传输层数据包和对固态存储设备的CSTS寄存器的读请求。

根据本发明的第一方面的第十三至第十七固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第十八固态存储设备在线升级固件的方法,控制部件包括主执行器和副执行器,副执行器的数量为多个。

根据本发明的第一方面的第十八固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第十九固态存储设备在线升级固件的方法,延迟一段时间过后,控制部件的主执行器停止副执行器的运行,并指示副执行器复位/重启或者指示包括自身在内的整个控制部件复位/重启。

根据本发明的第一方面的第十九固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第二十固态存储设备在线升级固件的方法,固件加载完成后,将固态存储设备的状态设置为就绪,以向主机指示固态存储设备可以接收IO命令。

根据本发明的第一方面的第十九或第二十固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第二十一固态存储设备在线升级固件的方法,控制部件的主执行器在停止副执行器的运行后与固态存储设备的状态就绪前,控制部件的主执行器缩短无法响应主机的IO命令和/或其他访问固态存储设备的命令的时间。

根据本发明的第一方面的第十九至第二十一固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第二十二固态存储设备在线升级固件的方法,控制部件的主执行器在收到主机的复位命令之前,控制部件的主执行器预测性地将指定的固件槽中的固件加载到DRAM或控制部件的内部存储器。

根据本发明的第一方面的第十九至第二十二固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第二十三固态存储设备在线升级固件的方法,响应于收到固件确认命令,控制部件的主执行器将指定的固件槽中的固件加载到DRAM中或控制部件的内部存储器中。

根据本发明的第一方面的第十九至第二十三固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第二十四固态存储设备在线升级固件的方法,不依赖于固件确认命令,控制部件的主执行器将预测的固件槽或所有固件槽中的固件都加载到DRAM中。

根据本发明的第一方面的第十九至第二十四固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第二十五固态存储设备在线升级固件的方法,控制部件的主执行器停止副执行器的运行前还备份元数据,并在固件升级完成后恢复元数据。

根据本发明的第一方面的第二十五固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第二十六固态存储设备在线升级固件的方法,元数据包括闪存映射表、坏块表和擦写次数信息中的一种或多种。

根据本发明的第一方面的第二十五或第二十六固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第二十七固态存储设备在线升级固件的方法,元数据还包括NVMe控制器的寄存器数据和NVMe管理队列数据。

根据本发明的第一方面的第二十五至第二十七固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第二十八固态存储设备在线升级固件的方法,元数据还包括用于闪存管理的元数据。

根据本发明的第一方面的第二十五至第二十八固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第二十九固态存储设备在线升级固件的方法,元数据还包括底层协议的元数据。

根据本发明的第一方面的第二十九固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第三十固态存储设备在线升级固件的方法,底层协议的元数据包括PCIe配置空间寄存器。

根据本发明的第一方面的第二十五至第三十固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第三十一固态存储设备在线升级固件的方法,控制部件在备份元数据的同时,还备份NVMe命令队列与完成队列,并在恢复元数据的同时,还恢复所备份的NVMe命令队列与完成队列。

根据本发明的第一方面的第二十五至第三十一固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第三十二固态存储设备在线升级固件的方法,控制部件对元数据的备份开始后,不再备份因处理IO命令而更新要备份的元数据。

根据本发明的第一方面的第二十五至第三十二固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第三十三固态存储设备在线升级固件的方法,控制部件的副执行器使用升级后的固件恢复运行前,主执行器恢复备份的所有元数据、NVMe命令队列与完成队列。

根据本发明的第一方面的第十九至第三十三固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第三十四固态存储设备在线升级固件的方法,固态存储设备的主执行器在停止副执行器的运行后与固态存储设备的状态就绪前,固态存储设备的主执行器提供初步地对主机访问的响应能力。

根据本发明的第一方面的第三十四固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第三十五固态存储设备在线升级固件的方法,为提供初步地对主机访问的响应能力,在固态存储设备中缓存来自主机的命令缓存。

根据本发明的第一方面的第三十四固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第三十六固态存储设备在线升级固件的方法,为提供初步地对主机访问的响应能力,控制部件的主执行器以指定值或默认值响应主机的命令。

根据本发明的第一方面的第三十四固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第三十七固态存储设备在线升级固件的方法,为提供初步地对主机访问的响应能力,将固件划分为多个部分,其中一个或一些固件部分用于处理主机的命令。

根据本发明的第一方面的第三十七固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第三十八固态存储设备在线升级固件的方法,用于处理主机的命令的固件部分在固件升级的过程中保持运行,以响应主机的访问请求。

根据本发明的第一方面的第三十八固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第三十九固态存储设备在线升级固件的方法,提供专用的固件升级过程来更新处理底层访问请求的固件部分。

根据本发明的第一方面的第一至第三十九固态存储设备在线升级固件的方法之一,提供了根据本发明的第一方面的第四十固态存储设备在线升级固件的方法,控制部件记录主机通过调试接口指示的用于存储固件的固件槽。

根据本发明的第一方面的第四十固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第四十一固态存储设备在线升级固件的方法,固态存储设备通过调试接口接收固件确认命令,固态存储设备重启。

根据本发明的第一方面的第四十一固态存储设备在线升级固件的方法,提供了根据本发明的第一方面的第四十二固态存储设备在线升级固件的方法,固态存储设备通过调试接口接收主机发送的私有命令,以进行固件升级。

本发明的固态存储设备在线升级固件的方法,使固态存储设备的固件在升级期间,依然能有效响应主机的访问。

根据本发明的第二方面,提供了根据本发明的第二方面的第一固态存储设备,包括主机接口、控制部件、NVM芯片和DRAM,控制部件分别与主机接口、NVM芯片、DRAM耦合连接,其中,主机接口用于同主机交换命令与数据;控制部件用于执行根据第一方面的第一至第四十二之一所述的方法。

本发明的固态存储设备,应用如上所述的在线升级固件的方法,在固态存储设备的固件在升级期间,依然能有效响应主机的访问。

根据本发明的第三方面,提供了根据本发明的第三方面的第一固态存储设备在线升级固件的系统,包括:固件下载模块,用于响应于收到固件下载命令,下载固件;复位模块,用于响应于接收固件确认命令,延迟一段时间后,固态存储设备发起复位过程,而无需等待复位命令;固件加载模块,用于加载所述固件激活或固件确认命令中所指示的固件,恢复固态存储设备的运行。

本发明的固态存储设备在线升级固件的系统,应用如上所述的在线升级固件的方法,使固态存储设备的固件在升级期间,依然能有效响应主机的访问。

根据本发明的第四方面,提供了根据本发明的第四方面的第一固态存储设备在线升级固件的方法,包括如下步骤:响应于收到固件下载命令,下载固件;响应于接收固件确认命令后又收到来自主机的访问CSTS寄存器的命令,响应所述访问CSTS寄存器的命令,并发起对固态存储设备的复位过程;加载所述固件确认命令中所指示的固件,恢复固态存储设备的运行。

本发明的固态存储设备在线升级固件的方法,使固态存储设备的固件在升级期间,依然能有效响应主机的访问。

根据本发明的第五方面,提供根据本发明的第五方面的第一固态存储设备在线升级固件的方法,包括如下步骤:响应于收到固件下载命令,下载固件;响应于接收固件确认命令,延迟指定时间,在所述指定时间后或指定时间内收到访问CSTS寄存器的命令并对访问CSTS寄存器的命令做出响应后,发起对固态存储设备的复位过程;加载所述或固件确认命令中所指示的固件,恢复固态存储设备的运行。

本发明的固态存储设备在线升级固件的方法,使固态存储设备的固件在升级期间,依然能有效响应主机的访问。

根据本发明的第六方面,提供一种包括程序代码的程序,当被载入固态存储设备并在固态存储设备上执行时,所述程序代码使所述固态存储设备执行根据本发明第一方面、第四方面或第五方面的在线升级固件的方法之一。

本发明的固态存储设备的程序代码的程序,使固态存储设备的固件在升级期间,依然能有效响应主机的访问。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1是现有技术的固态存储设备的框图;

图2是根据本发明实施例的固态存储设备的框图;

图3是根据本发明实施例的固态存储设备在线升级固件的流程图;以及

图4是根据本发明又一实施例的固态存储设备在线升级固件的流程图。

具体实施方式

为了使本领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请保护的范围。

下面结合本申请附图进一步说明本申请具体实现。

图2是根据本发明实施例的固态存储设备的框图。如图2所示,固态存储设备包括:控制部件201、主机接口202、DRAM(Dynamic Random Access Memory,动态随机访问存储器)203和固件槽204。其中固件槽204是由NVM芯片提供的。示例性地,将NVM芯片的固件槽204划分为固件槽1、固件槽2、固件槽3和固件槽4。固态存储设备的控制部件201分别耦合到主机接口202、DRAM 203和固件槽204。

主机接口202用于同主机交换命令与数据。主机接口202将固态存储设备耦合到外部主机(未示出)。作为举例,固态存储设备支持NVMe规范。主机依据NVMe规范通过主机接口202向固态存储设备发出命令并接收命令执行结果。

根据本发明实施例的固态存储设备提供在线固件升级功能。固态存储设备启动时,从固件槽之一加载固件。固件可被加载到DRAM 203或者控制部件201内部的存储器中,并由控制部件201的执行器执行。作为举例,执行器为一个或多个CPU、处理器、控制器和/或现场可编程门阵列执行。主机可向控制部件201指示下次启动时使用的固件槽之一,例如固件槽3,从而在下次启动或复位后,控制部件201从固件槽204加载固件。

为进行在线固件升级,主机或其他设备将一个或多个新固件下载(写入)到一个或多个固件槽。以及主机向控制部件204指示下次启动时应使用的固件槽,以及指示控制部件204或固态存储设备复位或重启。响应于复位指示,控制部件204从被指示的固件槽加载新固件,以完成固件升级。

图3是根据本发明实施例的固态存储设备在线升级固件的流程图。如图3所示,主机指示固态存储设备进行固件升级。为升级固件,主机发出下载固件命令(310),将新固件写入固态存储设备的固件槽之一。可选地,为了提高可靠性,主机将固件的多份副本写入多个固件槽204。即使固件槽204的一个或多个发生故障,依然有机会从其他固件槽中获得可运行的有效固件。作为举例,主机将新固件写入固件槽3。响应于收到固件下载命令,控制部件201将主机提供的固件写入指定的固件槽,例如固件槽3。可以理解的,下载固件命令与接下来的固件激活命令/固件确认命令在时间上可以不连续或间隔时间很长。依然可以理解的,主机通过固件下载命令,可将多份相同或不同的固件下载到多个固件槽中,从而可指示固态存储设备在重启后从指定固件槽加载固件,并通过指定不同的固件槽来选择加载不同的固件。

主机通过固件激活命令/固件确认命令(315),告知固态存储设备在下次复位后,从例如固件槽3加载固件,以使用在固件槽3中存储的新固件。固件激活与固件确认命令,用来指示下次复位使用的固件槽3。区别在于,在固件激活命令之后,主机还向固态存储设备发出复位命令,使固态存储设备复位。而响应于固件确认命令,主机无需再发送复位命令,固态存储设备也发起复位过程。响应于收到固件激活命令或固件确认命令,控制部件201记录在固件激活命令/固件确认命令中指示的要使用的固件槽(340),例如,将所指示的固件槽3的编号(例如,3)记录在NVM芯片中,从而即使在复位过程中发生掉电,在上电后也能够获知要使用的固件槽3。

主机在通过固件激活/固件确认命令(315),与指示固态存储设备重启命令(320)之间,可以根据需要向固态存储设备发出IO命令(317),访问固态存储设备。

为指示固态存储设备加载新的固件,主机指示固态存储设备重启(320),例如通过向固态存储设备发送复位命令来指示固态存储设备重启。响应于收到复位命令,在根据本发明的实施例中,虽然依据NVMe规范,在收到复位命令后,复位完成前,固态存储设备不再响应主机的访问,但是控制部件201不是立即停止要使用新固件的处理器/控制器/可编程门阵列的运行,而是延迟一段时间(345)。在延迟的时间内,控制部件201依然响应来自主机的命令或访问。延迟的时间可以是若干毫秒,例如1-10ms或者1-20ms。或者依据时间和/或来自主机的访问请求综合确定延迟时间。例如,在收到复位命令后,再处理若干个(例如,1-10个)数据访问请求(例如,PCIe传输层数据包(TLP,Translation Layer Packet)),对NVMe规范定义的CSTS寄存器的1次或2次读请求。依然可选地,使用指定的延迟时间与指定数量的主机命令中较早满足的条件作为结束等待的依据。

在收到复位命令后,延迟一段时间目的在于提高兼容性。避免因NVMe规范中未定义的行为,或者主机不符合NVMe规范的行为,导致不可预期的后果。例如,一些主机的驱动程序中在发出复位命令后,会尝试读取CSTS寄存器,以获知固态存储设备是否响应了复位命令。在其他例子中,链路层数据包可能不按顺序交付给主机接口202或控制部件201,从而使得在收到复位命令之后,控制部件201还收到其他访问请求。若复位中的固态存储设备无法有效处理此类访问请求,会导致多种不可预知的意外发生,例如,主机的PCIe驱动出错。根据本发明的实施例中,控制部件201通过在收到复位命令后延迟一段时间再停止处理器的执行,使得在延迟的时间内能够处理来自主机的访问请求,避免因主机访问请求长时间得不到响应导致异常。接下来,主机不再发出IO命令(322)。

接下来,控制部件201停止处理器的运行(350)。例如,通过执行固件或硬件电路产生硬件复位信号来使控制部件201和/或其处理器停止运行并重新启动。或者,停止向固态存储设备供电来迫使控制部件201的处理器停止运行。作为另一个例子,控制部件201中包括多个处理器,其中之一(称为主处理器)管理在线升级的过程。由主处理器指示其他副处理器停止运行。以及在完成升级准备工作后,主处理器指示其他副处理器重新启动,或者主处理器使包括自身在内的整个控制部件201重新启动。

接下来,从指定的固件槽204加载固件(355)。固件槽是由主机发出的固件激活命令或固件确认命令指定的(315)。从固件槽204加载固件可在固态存储设备启动/上电流程中完成。

在另一个例子中,响应于收到复位命令,暂停处理器运行后,从指定的固件槽将新固件加载到DRAM 203(344)。可选地,将固件加载到控制部件201内部的存储器,从而控制部件201的处理器在复位后可从DRAM 203或内部存储器运行被加载的固件。

完成对新固件的加载后,使恢复控制部件201的处理器的运行(360)。由于已经在DRAM 203或内部存储器中加载了新固件,恢复运行的处理器将执行新固件。以及将固态存储设备的状态设置为就绪,以向主机指示固态存储设备可以接收IO命令(365)。作为举例,在NVMe规范中,通过设置CSTS寄存器来指示固态存储设备的状态为就绪。

主机通过查询固态存储设备的状态是否就绪(325)来识别固件升级是否完成或识别固态存储设备是否在工作。并在固态存储的状态为就绪状态时,主机通过向固态存储设备发出IO命令(327)来使用固态存储设备。固态存储设备通过运行新固件来响应IO命令(370)。

在固件升级过程中,步骤350-365期间,固态存储设备无法响应主机的IO命令和/或其他访问固态存储设备的命令(例如,TLP),这会影响用户对固态存储设备的使用。因而,希望缩短步骤350-步骤365期间无法响应主机命令的时间,或者缩短从步骤345中收到复位命令到步骤365期间的时间。通过多种手段来缩短固件升级过程的时间或固态存储设备无法响应主机命令的时间。例如,在收到主机的复位/重启命令(320)之前,预测性地将指定的固件槽中的固件加载到DRAM 203或控制部件201的内部存储器。可选地,响应于收到固件激活/固件确认命令(315),将指定的固件槽204中的固件加载到DRAM 203或控制部件201的内部存储器。依然可选地,不依赖于固件激活/固件确认命令,将预测的固件槽204或所有固件槽204中的固件都加载到DRAM 203中,从而在收到固件激活/固件确认命令时,可理解从DRAM203中获得所需的固件。

在依然进一步的例子中,需要确保固件升级过程不会导致数据丢失,这需要在固件升级过程中进一步备份并恢复元数据。元数据包括多种,例如闪存映射表、坏块表、擦写次数信息等用于NVM存储介质管理的元数据。元数据还可以包括与NVMe规范相关的元数据,例如NVMe控制器的寄存器,NVMe管理队列(Admin Queue)。元数据还可以包括底层协议的元数据,例如,PCIe配置空间寄存器。而在控制部件201的处理器使用新固件恢复运行后,还恢复所备份的元数据。元数据的尺寸可能较大(例如,若干GB,吉字节),在2015年7月21日申请201510430174.6号中国专利申请,以及2016年6月29日申请的201610499397.2,201610499631.1,201610500411.6号中国专利申请中提供的日志(用于记录元数据)处理方法用于加快元数据的恢复过程,通过引用将上述专利申请的全文合并于此。

对于不同类型的复位,需要备份的元数据种类可能有所差异。例如,对于NVMe控制器级别的复位,除了备份NVMe规范相关的元数据,还需备份底层协议的元数据(例如,PCIe配置空间寄存器)(348),而对于PCIe级别(例如,PCIe function(PCIe功能)或PCIe fundamental(PCIe基础))的复位,则无需备份PCIe配置空间寄存器。可选地,可以指定是否备份用于闪存管理的元数据。

依然可选地,主机会查询固态存储设备的状态(例如,访问CSTS寄存器)。在固态存储设备的固件升级(例如,步骤360)完成前,无法响应主机的查询,这可能导致严重的后果。除了缩短固态存储设备固件升级期间无法响应主机命令的时间,也可以在主机接口202和/或控制部件201中提供初步地对主机访问的响应能力。在固态存储设备的固件升级完成前,若主机发出TLP,访问PCIe寄存器(324)时,固态存储设备可提供缓存,在固件升级过程中,临时存储主机的访问请求,从而在完成固件升级后,可以从缓存中迅速获取待处理的访问请求,并向主机提供应答。可选地,在固件升级过程中,以指定值或默认值响应主机的访问请求,从而可由硬件和/或专用的软件/固件处理主机的访问请求。依然可选地,将固态存储设备的固件划分为多个部分,其中一个或一些固件部分用于处理主机的底层(例如,PCIe)访问请求。在固件升级过程中,使处理底层访问请求的固件部分保持运行(不被升级),以响应主机的访问请求。以及提供专用的固件升级过程来更新处理底层请求的固件部分。由于处理底层访问请求的固件部分尺寸较小,能够以较短时间完成升级,从而能够在主机访问请求超时之前完成升级,以不影响或减少对主机访问请求处理的影响。

依然可选地,从固件槽将固件加载到DRAM 203或内部存储器时,还对所加载的固件进行校验,检查所加载固件的完整性和/或正确性。

依然可选地,从主机接口202之外的其他接口(例如,控制部件201的调试接口(未示出))向固态存储设备下载固件。所下载的固件被存储在DRAM 203中。以及通过调试接口指示用于存储固件的固件槽204。以及通过调试接口,也向控制部件201发送符合NVMe规范的固件激活/固件确认命令,并指示固态存储设备重启。可选地,通过私有命令或其他形式的命令指示固态存储设备进行固件升级。

依然可选地,为提升可靠性/兼容性,主机向固态存储设备发出复位命令后,在短时间内避免访问固态存储设备(避免立即查询NVMe的CSTS寄存器,也避免向固态存储设备发出PCIe访问),以避免因固态存储设备无法响应访问请求而导致主机出现异常。例如,在主机向固态存储设备发出复位命令后,在查询固态存储设备状态前,插入一段时间的延迟。在可选的实施方式中,主机对固态存储设备的任何时候发出的状态查询,在被发送给固态存储设备之前,均插入一段时间的延迟。由于状态查询操作本身的处理性能不会影响用户体验,且相比IO命令,状态查询操作发生频率不高,因而对任何状态查询操作均加入延迟不会对性能造成明显影响,但显著降低了系统复杂度。

图4是根据本发明又一实施例的固态存储设备在线升级固件的流程图。如图4所示,主机指示固态存储设备进行固件升级。为升级固件,主机发出下载固件命令(415),将新固件写入固态存储设备的固件槽之一。可选地,为了提高可靠性,主机将固件的多份副本写入多个固件槽204。即使固件槽204的一个或多个发生故障,依然有机会从其他固件槽中获得可运行的有效固件。作为举例,主机将新固件写入固件槽3。响应于收到固件下载命令,控制部件201将主机提供的固件写入指定的固件槽,例如固件槽3。依然可以理解的,主机通过固件下载命令,可将多份相同或不同的固件下载到多个固件槽中,从而可指示固态存储设备在重启后从指定固件槽加载固件,并通过指定不同的固件槽来选择加载不同的固件。

主机发出固件确认命令(420),固件确认命令中,指示了要使用的固件槽204,从例如固件槽3加载固件,并且指示固态存储设备立即实施固件升级,而无需再等待来自主机的复位命令。响应于收到固件确认命令,固态存储设备记录要使用的固件槽204,并且不再响应主机的IO命令。对于正在处理中但尚未处理完成的命令,既可以继续处理完成,也可以直接丢弃而不再处理。对于固态存储设备记录要使用的固件槽204,例如,将所指示的固件槽3的编号(例如,3)记录在NVM芯片中,从而即使在复位过程中发生掉电,在上电后也能够获知要使用的固件槽3。

响应于收到固件确认命令,在根据本发明的实施例中,虽然依据NVMe规范,在收到固件确认命令后,复位完成前,固态存储设备不再响应主机的访问,但是控制部件201不是立即停止要使用新固件的处理器/控制器/可编程门阵列(下面以处理器为例描述)的运行,而是等待指定事件出现(例如,延迟一段时间)(455)。在延迟的时间内,控制部件201依然响应来自主机的命令或访问。延迟的时间可以是若干毫秒,例如1-10ms或者1-20ms。或者依据时间和/或来自主机的访问请求综合确定延迟时间。例如,在收到复位命令后,再处理若干个(例如,1-10个)数据访问请求(例如,PCIe传输层数据包(TLP)),对NVMe规范定义的CSTS寄存器的1次或2次读请求。依然可选地,使用指定的延迟时间与指定数量的主机命令中较早满足的条件作为结束等待的依据。

控制部件201延迟一段时间的目的在于提高兼容性。避免因NVMe规范中未定义的行为,或者主机不符合NVMe规范的行为,导致不可预期的后果。例如,一些主机的驱动程序中在发出固件确认命令后,会尝试读取CSTS寄存器,以获知固态存储设备是否响应了固件确认命令。在其他例子中,链路层数据包可能不按顺序交付给主机接口202或控制部件201,从而使得在收到固件确认命令之后,控制部件201还收到其他访问请求。若复位中的固态存储设备无法有效处理此类访问请求,会导致多种不可预知的意外发生,例如,主机的PCIe驱动出错。根据本发明的实施例中,控制部件201通过在收到固件确认命令后延迟一段时间再停止处理器的执行,使得在延迟的时间内能够处理来自主机的访问请求,避免因主机访问请求长时间得不到响应导致异常。接下来,主机不再发出IO命令(422)。

接下来,控制部件201停止处理器的运行(460)。例如,通过执行固件或硬件电路产生硬件复位信号来使控制部件201和/或其处理器停止运行并重新启动。或者,停止向固态存储设备供电来迫使控制部件201的处理器停止运行。作为另一个例子,控制部件201中包括多个处理器,其中之一(称为主处理器)管理在线升级的过程。由主处理器指示其他副处理器停止运行。以及在完成升级准备工作后,主处理器指示其他副处理器重新启动,或者主处理器使包括自身在内的整个控制部件201重新启动。

接下来,从指定的固件槽3(作为举例)加载固件(465)。固件槽3是由主机发出的固件确认命令指定的(420)。从固件槽3加载固件可在固态存储设备启动/上电流程中完成。

在另一个例子中,响应于收到复位命令,暂停处理器运行后,从指定的固件槽将新固件加载到DRAM 203。可选地,将固件加载到控制部件201内部的存储器,从而控制部件201的处理器在复位后可从DRAM 203或内部存储器运行被加载的固件。

完成对新固件的加载后,恢复控制部件201的处理器的运行(470)。由于已经在DRAM 203或内部存储器中加载了新固件,恢复运行的处理器将执行新固件。以及将固态存储设备的状态设置为就绪,以向主机指示固态存储设备可以接收IO命令(475)。作为举例,在NVMe规范中,通过设置CSTS寄存器来指示固态存储设备的状态为就绪。

主机通过查询固态存储设备的状态是否就绪(425)来识别固件升级是否完成或识别固态存储设备是否在工作。并在固态存储的状态为就绪状态时,主机通过向固态存储设备发出IO命令(430)来使用固态存储设备。固态存储设备通过运行新固件来响应IO命令(480)。

在固件升级过程中,步骤460-475期间,固态存储设备无法响应主机的IO命令和/或其他访问固态存储设备的命令(例如,TLP),这会影响用户对固态存储设备的使用。因而,希望缩短步骤460-步骤475期间无法响应主机命令的时间,或者缩短从步骤450中收到固件确认命令到步骤475期间的时间。通过多种手段来缩短固件升级过程的时间或固态存储设备无法响应主机命令的时间。例如,在收到固件确认命令(420)之前,预测性地将指定的固件槽中的固件加载到DRAM 203或控制部件201的内部存储器。可选地,响应于收到固件确认命令(420),将指定的固件槽3中的固件加载到DRAM 203或控制部件201的内部存储器。依然可选地,不依赖于固件确认命令,将预测的固件槽204或所有固件槽204中的固件都加载到DRAM 203中,从而在收到固件确认命令时,可理解从DRAM 203中获得所需的固件。

在依然进一步的例子中,需要确保固件升级过程不会导致数据丢失,这需要在固件升级过程中进一步备份并恢复元数据。

元数据包括多种,例如闪存映射表、坏块表、擦写次数信息等用于NVM存储介质管理的元数据。元数据还可以包括与NVMe规范相关的元数据,例如NVMe控制器的寄存器,NVMe管理队列(Admin Queue)。元数据还可以包括底层协议的元数据,例如,PCIe配置空间寄存器。而在控制部件201的处理器使用新固件恢复运行后,还恢复所备份的元数据。

对于不同类型的复位,需要备份的元数据种类可能有所差异。例如,对于NVMe控制器级别的复位,除了备份NVMe规范相关的元数据,还需备份底层协议的元数据(例如,PCIe配置空间寄存器),而对于PCIe级别(例如,PCIe function或PCIe fundamental)的复位,则无需备份PCIe配置空间寄存器。可选地,可以指定是否备份用于闪存管理的元数据。

完成对元数据的备份后,停止控制部件201的处理器运行(460)。而在恢复处理器运行后(470),恢复所备份的元数据,以使固态存储设备恢复到开始固件升级之前的状态,包括恢复NVMe管理队列等元数据。可选地,控制部件201在恢复处理器运行后,可触发固态存储设备重启/复位。

进一步地,在备份元数据时,还备份所有的NVMe命令队列与完成队列,并在恢复所备份元数据时,还恢复所备份的NVMe命令队列与完成队列。对元数据的备份开始后(到复位完成前),不再处理IO命令,换句话说,不再因处理IO命令而更新要备份的元数据。

依然可选地,主机会查询固态存储设备的状态(例如,访问CSTS寄存器)。在固态存储设备的固件升级(例如,步骤470)完成前,无法响应主机的查询,这可能导致严重的后果。除了缩短固态存储设备固件升级期间无法响应主机命令的时间,也可以在主机接口202和/或控制部件201中提供初步地对主机访问的响应能力。在固态存储设备的固件升级完成前,若主机发出TLP,访问PCIe寄存器(424)时,固态存储设备可提供缓存,在固件升级过程中,临时存储主机的访问请求,从而在完成固件升级后,可以从缓存中迅速获取待处理的访问请求,并向主机提供应答。可选地,在固件升级过程中,以指定值或默认值响应主机的访问请求,从而可由硬件和/或专用的软件/固件处理主机的访问请求。依然可选地,将固态存储设备的固件划分为多个部分,其中一个或一些固件部分用于处理主机的底层(例如,PCIe)访问请求。在固件升级过程中,使处理底层访问请求的固件部分保持运行(不被升级),以响应主机的访问请求。以及提供专用的固件升级过程来更新处理底层请求的固件部分。由于处理底层访问请求的固件部分尺寸较小,能够以较短时间完成升级,从而能够在主机访问请求超时之前完成升级,以不影响或减少对主机访问请求处理的影响。

依然可选地,从固件槽将固件加载到DRAM 203或内部存储器时,还对所加载的固件进行校验,检查所加载固件的完整性和/或正确性。

依然可选地,从主机接口202之外的其他接口(例如,控制部件201的调试接口(未示出))向固态存储设备下载固件。所下载的固件被存储在DRAM 203中。以及通过调试接口指示用于存储固件的固件槽3。以及通过调试接口,也向控制部件201发送符合NVMe规范的固件确认命令,并指示固态存储设备重启。可选地,通过私有命令或其他形式的命令指示固态存储设备进行固件升级。

依然可选地,为提升可靠性/兼容性,主机向固态存储设备发出固件确认命令后,在短时间内避免访问固态存储设备(避免立即查询NVMe的CSTS寄存器,也避免向固态存储设备发出PCIe访问),以避免因固态存储设备无法响应访问请求而导致主机出现异常。例如,在主机向固态存储设备发出确认命令后,在查询固态存储设备状态前,插入一段时间的延迟。在可选的实施方式中,主机对固态存储设备的任何时候发出的状态查询,在被发送给固态存储设备之前,均插入一段时间的延迟。由于状态查询操作本身的处理性能不会影响用户体验,且相比IO命令,状态查询操作发生频率不高,因而对任何状态查询操作均加入延迟不会对性能造成明显影响,但显著降低了系统复杂度。

本发明实施例提供了用于固态存储设备的在线固件升级的方法。除了应用于固态存储设备,本发明的实施例还可应用于其他需要加载固件的电子设备,诸如手机、机顶盒、媒体播放器等。

本申请实施例的方法和装置可以以硬件、软件、固件以及上述中的任意组合来实现。硬件可以包括数字电路、模拟电路、数字信号处理器(DSP)、专用继承电路(ASIC)等等。软件可以包括存储在处理器可读存储介质上的程序,这些程序在被处理器执行时,实现本申请实施例所提供的方法。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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