固件复位方法及装置、存储介质、电子装置与流程

未命名 10-19 阅读:77 评论:0


1.本技术实施例涉及计算机硬件领域,具体而言,涉及一种固件复位方法及装置、存储介质、电子装置。


背景技术:

2.独立冗余磁盘阵列(redundant array of independent disks,简称raid)卡作为存储系统中较为核心的部件,具有较高的技术门槛进而导致raid卡存在高垄断性、高复杂性,不可避免会存在很多问题,需要升级解决,然而存储作为信息技术的基础设备,如在升级过程中影响业务,将给运维带来极大的不便,不能满足服务可用性要求。
3.对于使用非易失性内存快速存储访问协议(non-volatile memory express,简称为nvme)作为主机协议的raid卡,其升级过程可使用nvme协议中固件(firmware,简称为fw)升级feature由fwdownload和fw commit两个命令共同完成。fwdownload命令负责将固件下载到固态硬盘(solid state disk或solid state drive,简称ssd)的内存中。fw commit命令通过commit action参数指示ssd的新固件是在重置后生效,还是立即生效。在现有固件升级方案,需要通过device reset(power cycle)才可以使新固件生效。
4.具体地,现有技术中存在两种raid卡的固件升级的方案:
5.方案一:通过主机端配置管理命令完成raid卡的固件升级过程,将固件文件由主机下载至raid卡并完成固件检验后烧写至flash,完成固件升级后,需主机端发起重启服务器(reboot)完成新固件生效过程。而重启服务器会使得raid卡硬件复位,且会中断主机i/o读写业务。重启后会重新进行pcie链路训练过程,主机i/o业务需要用户重新发起。
6.方案二:通过主机端配置管理命令完成raid卡的固件升级过程,将固件文件由主机下载至raid卡并完成固件检验后烧写至flash,完成固件升级后,需主机端发起重启raid卡(restart)完成新固件生效过程,会中断主机i/o读写业务,重启完成后不会进入pcie链路训练过程,主机i/o恢复,不需要用户重新发起。
7.然而,关于新固件立即生效的请求,nvme协议没有规定具体的实现方案,无法满足nvme中对于固件升级立即生效的要求。
8.针对现有技术中,固件复位过程会导致主机的io读写请求中断,需要用户重新发起等问题尚未提出有效的解决方案。


技术实现要素:

9.本技术实施例提供了一种固件复位方法及装置、存储介质、电子装置,以至少解决相关技术中,现有技术中固件复位过程会导致主机的io读写请求中断,需要用户重新发起等问题。
10.根据本技术的一个实施例,提供了一种固件复位方法,包括:在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标
协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;向所述主机端发送置位指令;复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。
11.在一个示例性实施例中,向所述主机端发送置位指令之后,所述方法还包括:向所述主机端发送异步事件请求aer通知,其中,所述aer通知用于通知所述主机端所述raid卡在目标时间点复位所述目标固件。
12.在一个示例性实施例中,向所述主机端发送置位指令,包括:向所述主机端发送所述置位指令,以将所述主机端中目标控制寄存器的目标字节位置为第一值,其中,所述第一值用于指示所述主机端暂停向所述raid卡发送所述io读写请求。
13.在一个示例性实施例中,向所述主机端发送清零指令,包括:向所述主机端发送所述清零指令,以将所述主机端中目标控制寄存器的目标字节位置为第二值,其中,所述第二值用于指示所述主机端恢复向所述raid卡发送所述io读写请求。
14.在一个示例性实施例中,向所述主机端发送置位指令之后,所述方法还包括:在所述raid卡未接收到所述主机端发送的所述io读写请求的情况下,确定所述raid卡中剩余的io读写请求量;在所述io读写请求量大于预设阈值的情况下,向所述raid卡的raid管理aem引擎发送第一通知指令,以指示所述aem引擎继续处理剩余的io读写请求;在所述io读写请求量小于等于所述预设阈值的情况下,向所述aem引擎发送第二通知指令,以指示所述aem引擎暂停处理所述io读写请求。
15.在一个示例性实施例中,复位所述目标固件之前,所述方法还包括:将禁用中断指令发送到所述raid卡的处理器集群,以指示所述处理器集群暂停并保存所述处理器集群的当前处理进程,所述禁用中断指令用于指示所述处理器集群暂停接收其他设备的中断信号,其中,所述其他设备包括:所述raid卡的外部设备,所述raid卡的内部硬件组件;在接收到所述处理器集群的通知消息的情况下,复位所述目标固件,其中,所述通知消息用于指示所述当前处理进程保存完毕。
16.在一个示例性实施例中,根据所述目标固件的版本号确定所述目标固件是否需要复位之后,所述方法还包括:确定所述目标固件采用的复位方式;将所述复位方式写入所述raid卡的缓存区的日志中。
17.在一个示例性实施例中,向所述主机端发送清零指令之后,所述方法还包括:在接收到所述主机端发送的所述io读写请求的情况下,向所述raid卡的raid管理aem引擎发送第三通知指令,其中,所述第三通知指令用于指示所述aem引擎恢复处理所述io读写请求。
18.在一个示例性实施例中,根据所述目标固件的版本号确定所述目标固件是否需要复位,包括:获取所述版本号所指示的字节信息中预设位置上的字节;获取与所述预设位置上的字节对应的复位区域指示表,其中,所述复位区域指示表用于指示所述字节与所述复位区域的对应关系;根据所述字节和所述复位区域指示表确定所述目标固件是否需要复位。
19.在一个示例性实施例中,根据所述字节和所述复位区域指示表确定所述目标固件是否需要复位,包括:根据所述字节和所述复位区域指示表确定所述目标固件的复位区域是否为所述raid卡的微控制单元mcu;在确定所述目标固件的复位区域为所述mcu的情况
下,确定所述目标固件需要复位。
20.在一个示例性实施例中,根据所述字节和所述复位区域指示表确定所述目标固件的复位区域为所述raid卡的微控制单元mcu之后,所述方法还包括:在确定所述目标固件的复位区域不为所述mcu的情况下,通过预设复位方式复位所述raid卡,其中,所述预设复位方式包括以下之一:热插拔复位、控制器级别复位、引脚复位。
21.在一个示例性实施例中,根据所述目标固件的版本号确定所述目标固件是否需要复位之前,所述方法还包括:在目标固件已写入到所述raid卡的缓存区的情况下,校验所述目标固件;在所述校验结果为目标固件有效且完整的情况下,确定所述缓存区中的多个槽位中的可写入槽位,其中,所述可写入槽位为所述多个槽位中除只读槽位和当前使用槽位之外的最小槽位;将所述目标固件写入所述可写入槽位中。
22.在一个示例性实施例中,根据所述目标固件的版本号确定所述目标固件是否需要复位之前,所述方法还包括:获取主机端发送的固件包,以及所述固件包对应的粒度信息包,其中,所述固件包中包括多个固件,所述粒度信息包中包括多个粒度信息,所述固件和所述粒度信息存在一一对应关系,所述粒度信息包括:所述粒度信息所对应的固件的双字数据数量numd信息和双字数据偏移量ofst信息;获取所述主机端将所述固件包分片为多个固件时采用的更新粒度fwug命令;根据所述fwug命令和多个所述ofst信息确定所述多个固件是否存在偏移量重叠;在所述多个固件不存在所述偏移量重叠的情况下,根据所述fwug命令和多个所述numd信息确定所述多个固件是否存在数据数量丢失;在所述多个固件不存在所述数据量丢失的情况下,将所述多个固件依次写入到独立冗余磁盘阵列raid卡的缓存区。
23.根据本技术的另一个实施例,提供了一种固件复位方法,包括:将目标固件发送到独立冗余磁盘阵列raid卡的缓存区;在主机端与所述raid卡的接口协议为目标协议的情况下,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令,并根据所述置位指令暂停向所述raid卡发送io读写请求,其中,所述置位指令为所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令;接收所述raid卡在复位完所述目标固件后发送的清零指令,并根据所述清零指令恢复向所述raid卡发送所述io读写请求,其中,所述清零指令为所述目标协议中用于控制所述主机端中目标控制寄存器的清零指令。
24.在一个示例性实施例中,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令之后,所述方法还包括:接收所述raid卡发送的异步事件请求aer通知,其中,所述aer通知用于通知所述主机端所述raid卡在目标时间点复位所述目标固件。
25.在一个示例性实施例中,根据所述置位指令暂停向所述raid卡发送io读写请求,包括:在接收到所述置位指令的情况下,读取所述主机端中的目标控制寄存器的目标字节位;在所述目标字节位为第一值的情况下,暂停向所述raid卡发送io读写请求。
26.在一个示例性实施例中,根据所述清零指令恢复向所述raid卡发送所述io读写请求,包括:在接收到所述清零指令的情况下,读取所述主机端中的目标控制寄存器的目标字节位;在所述目标字节位为第二值的情况下,恢复向所述raid卡发送io读写请求。
27.在一个示例性实施例中,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令之后,所述方法还包括:在所述主机端暂停向所述raid卡发送io读写请求的情况下,确定已发送到所述raid卡的剩余io读写请求的io读写请求量;根据所述io读写
请求量接收所述raid卡反馈的所述剩余io读写请求对应的剩余响应消息。
28.在一个示例性实施例中,接收所述raid卡在复位完所述目标固件后发送的清零指令之后,所述方法还包括:获取所述raid卡的所述缓存区中的日志;根据所述日志确定所述raid卡采用的复位方式。
29.在一个示例性实施例中,将目标固件发送到独立冗余磁盘阵列raid卡的缓存区,所述方法还包括:将固件包、所述固件包对应的粒度信息包,以及将所述固件包分片为多个固件时采用的更新粒度fwug命令发送到所述raid卡上,其中,所述固件包中包括多个固件,所述粒度信息包中包括多个粒度信息,所述固件和所述粒度信息存在一一对应关系,所述粒度信息包括:所述粒度信息所对应的固件的双字数据数量numd信息和双字数据偏移量ofst信息。
30.根据本技术的另一个实施例,提供了一种固件复位装置,包括:第一确定模块,用于在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;第二确定模块,用于在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;发送模块,用于向所述主机端发送置位指令;复位模块,用于复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。
31.根据本技术的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时执行上述固件复位方法。
32.根据本技术的又一个实施例,还提供了一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器被设置为运行所述计算机程序以执行上述固件复位方法。
33.通过本技术,在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;向所述主机端发送置位指令;复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。也就是说,根据目标固件的版本号确定目标固件的复位需要,以及确定raid卡和主机端的接口协议是否为存在置位指令和清零指令的目标协议,在需要复位、且接口协议为目标协议的情况下的情况下,由raid卡向主机端发送置位指令使得主机端暂停发送io读写请求,在成功复位目标固件后,再向主机端发送清零指令,指示主机端恢复向raid卡发送io读写请求,因此,可以解决现有技术中,固件复位过程会导致主机的io读写请求中断,需要用户重新发起等问题,实现了几乎无感的升级流程,提高了用户体验。
附图说明
34.图1是本技术实施例的一种固件复位方法的移动终端的硬件结构框图;
35.图2是根据本技术实施例的一种可选的固件复位方法的流程图;
36.图3是根据本技术实施例的另一种可选的固件复位方法的流程图;
37.图4是根据本技术实施例的一种可选的固件复位方法的固件升级流程图;
38.图5是根据本技术实施例的一种可选的固件复位方法的固件升级具体流程图(一);
39.图6是根据本技术实施例的一种可选的固件复位方法的固件升级具体流程图(二);
40.图7是根据本技术实施例的一种可选的固件复位装置的结构框图。
具体实施方式
41.下文中将参考附图并结合实施例来详细说明本技术的实施例。
42.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
43.本技术实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在raid卡上为例,图1是本技术实施例的一种固件复位方法的移动终端的硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)和用于存储数据的存储器104,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
44.存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本技术实施例中的一种固件复位方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
45.传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(network interface controller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(radio frequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。
46.在本实施例中提供了一种固件复位方法,运行于raid卡,图2是根据本技术实施例的一种可选的固件复位方法的流程图,如图2所示,该流程包括如下步骤:
47.步骤s202,在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;
48.步骤s204,在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;
49.需要说明的是,目标协议一般选择nvme协议,确定目标协议中可以使得主机端暂停发送io读写请求的指令作为置位指令,以及确定目标协议中可以使得主机端恢复发送io读写请求的指令作为清零指令。通过目标协议中的可以控制目标控制寄存器的置位指令和清零指令分别使得主机端暂停、恢复发送io读写请求。可选的,还可以选择在置位指令和清零指令发送后,或者发送同时,向所述主机端发送异步事件请求aer通知,以告知主机端raid卡将要进行固件复位或者复位结束。
50.步骤s206,向所述主机端发送置位指令;
51.步骤s208,复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。
52.通过上述步骤,在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;向所述主机端发送置位指令;复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。也就是说,根据目标固件的版本号确定目标固件的复位需要,以及确定raid卡和主机端的接口协议是否为存在置位指令和清零指令的目标协议,在需要复位、且接口协议为目标协议的情况下的情况下,由raid卡向主机端发送置位指令使得主机端暂停发送io读写请求,在成功复位目标固件后,再向主机端发送清零指令,指示主机端恢复向raid卡发送io读写请求,因此,可以解决现有技术中,固件复位过程会导致主机的io读写请求中断,需要用户重新发起等问题,实现了几乎无感的升级流程,提高了用户体验。
53.需要说明的是:raid是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。raid的实现可以有硬件和软件两种不同的方式:硬件方式就是通过raid控制器实现;软件方式则是通过软件把服务器中得多个磁盘组合起来,实现条带化快速数据存储和安全冗余。
54.其中,raid卡,即为安装在服务器或存储上,通过raid控制器实现硬raid功能的服务器上的核心部件。raid卡与主机的通信协议,一般称为主机接口,目前常用接口有scsi、nvme。其中,小型计算机系统接口(small computer system interface,简称为scsi)。
55.其中,nvme是一种被用于host software与非易失性内存的子系统通信的寄存器级别的接口。主要为企业、数据中心以及客户端系统中应用pcie接口的固态存储设备(ssd)设计,它的目标是最大限度的释放闪存的潜能。
56.系统级芯片(system on chip,简称为soc),也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。
57.在一个示例性实施例中,向主机端发送置位指令之后,所述方法还包括:向所述主
机端发送异步事件请求aer通知,其中,所述aer通知用于通知所述主机端所述raid卡在目标时间点复位所述目标固件。
58.需要说明的是,异步事件请求(asynchronous event request,简称为aer)是一种被动式命令请求机制,允许软件向nvme控制器发送一个异步事件请求(async event request),该请求要求控制器在特定条件下触发一个异步事件来通知主机系统。例如,在温度超出某个范围、电源故障等情况下可能需要触发此类异步事件来报告问题。
59.在本技术实施例中,异步事件请求aer通知被发送到主机端,用于通知主机端raid卡将在目标时间点或目标时长后复位目标固件。在置位指令后发送aer通知,可以使得主机端明确置位指令的发送原因:即raid卡将进行目标固件的复位,所以需要主机端暂停向raid卡发送io读写请求。
60.一般情况下,本技术实施例发起的复位过程为即时复位过程,即目标时间点在发送置位指令、aer指令之后的一个很接近的目标时间点、或者发送置位指令、aer指令的当前时间点间隔的目标时长很短,但本技术实施例也可以存在预约复位流程,具体方案如下:
61.raid卡确定预设周期内接收io读写请求量较少的目标时刻,其中,预设周期的粒度可以为天;
62.确定当前时刻和目标时刻的时间间隔;
63.在当前时刻向主机端发送预约指令,以指示所述主机端所述raid卡在所述目标时刻复位所述目标固件,其中,所述预约指令包括延时置位指令,所述延时置位指令用于在所述时间间隔后,指示所述主机端暂停向所述raid卡发送io读写请求。
64.在所述目标时刻复位所述目标固件。
65.通过上述方案,在io读写请求量较少的目标时刻向主机端预约升级目标固件,暂停处理的io读写请求也会较少,可以带来更好的无感升级体验。
66.在一个示例性实施例中,向主机端发送置位指令,包括:向所述主机端发送所述置位指令,以将所述主机端中目标控制寄存器的目标字节位置为第一值,其中,所述第一值用于指示所述主机端暂停向所述raid卡发送所述io读写请求。
67.本技术实施例实质上是由raid卡中的目标固件发起的复位流程,主机端与raid卡之间的链路不断。而在目标固件复位的情况下,如果主机链路不断,主机端仍然会存在源源不断的io读写请求下发到raid卡,导致io拥塞。为保证主机io能够被及时处理,可以在目标固件升级前发送置位指令到主机端,指示主机端暂停发送io读写请求到raid卡。可选的,置位指令基于nvme协议中controllerregister中controllerstatus process paused(简称csts.pp)暂停主机io。
68.需要说明的是,csts.pp是nvme指令集中的一个控制寄存器,用于控制主机端的io读写请求。具体来说,它包含了两个位域:cfs和pp。其中,cfs(controller fatal status,)位表示控制器是否处于严重错误状态。当该位为1时,表示控制器已经发生了不可恢复的错误,并且需要重新初始化才能正常工作。这时候主机端发送的任何io读写请求都会被忽略。pp(processing power)位则表示当前处理器资源占用情况。当该位为0时,表示控制器正在处理io读写请求并且还有足够的处理能力来接受新的io读写请求;当该位为1时,表示控制器已经没有足够的处理能力来接受新的io读写请求,在这种情况下主机端应该暂停发送新的io读写请求以避免过度负载。因此,主机端通过检查csts.pp可以确定当前是否可以向
nvme设备发送新的io操作,并根据需要进行调整以保证系统性能和稳定性。
69.可选的,本技术实施例中的目标控制寄存器优选为nvme指令集中的csts.pp控制寄存器,目标字节位置为csts.pp控制寄存器中的pp位,第一值优选为1。
70.在一个示例性实施例中,向所述主机端发送清零指令,包括:向所述主机端发送所述清零指令,以将所述主机端中目标控制寄存器的目标字节位置为第二值,其中,所述第二值用于指示所述主机端恢复向所述raid卡发送所述io读写请求。
71.可以理解的是,在目标固件复位成功的情况下,raid卡向主机端发送清零指令,使得主机端恢复向raid卡发送io读写请求。本技术实施例中的目标控制寄存器优选为nvme指令集中的csts.pp控制寄存器,目标字节位置为csts.pp控制寄存器中的pp位,第二值优选为0。本技术实施例通过在目标固件升级前后分别向主机端发送置位指令以及清零指令,使得在主机端和raid卡的链路不断的情况下,不丢失io读写请求,不积压io读写请求,保证了目标固件复位过程中数据的安全稳定,实现了无感升级。
72.还需要说明的是,在所述目标固件升级成功后,raid卡还需要向发送新aer通知,所述新aer通知用于通知主机端所述raid卡已经成功复位目标固件。新aer通知可以和清零指令同时发送到主机端,也可以在较短的时间间隔内先后发送。
73.在一个示例性实施例中,向主机端发送置位指令之后,所述方法还包括:在所述raid卡未接收到所述主机端发送的所述io读写请求的情况下,确定所述raid卡中剩余的io读写请求量;在所述io读写请求量大于预设阈值的情况下,向所述raid卡的raid管理aem引擎发送第一通知指令,以指示所述aem引擎继续处理剩余的io读写请求;在所述io读写请求量小于等于所述预设阈值的情况下,向所述aem引擎发送第二通知指令,以指示所述aem引擎暂停处理所述io读写请求。
74.可以理解的是,raid卡的aem引擎的即阿达普特嵌入式raid管理引擎(adaptec embedded raid management engine,简称为aem)。在主机端暂停发送io读写请求后,raid卡轮询aem引擎,以确定raid卡内仍未处理的io读写请求量,即剩余的io读写请求量,在仍存在未处理的io读写请求的情况下,通过第一通知指令指示aem引擎继续处理剩余的io读写请求,在不存在剩余io读写请求的情况下,通过第二通知指令指示aem引擎暂停处理io读写请求。进而预设阈值可以为0,在剩余io读写请求量为0的情况下,即可指示aem引擎暂停处理io读写请求。通过处理raid卡剩余的io读写请求,使得已经接收到的io读写请求不被积压,可以尽快得到响应,降低了io读写请求在升级过程中丢失的可能性。
75.在一个示例性实施例中,复位所述目标固件之前,所述方法还包括:将禁用中断指令发送到所述raid卡的处理器集群,以指示所述处理器集群暂停并保存所述处理器集群的当前处理进程,所述禁用中断指令用于指示所述处理器集群暂停接收其他设备的中断信号,其中,所述其他设备包括:所述raid卡的外部设备,所述raid卡的内部硬件组件;在接收到所述处理器集群的通知消息的情况下,复位所述目标固件,其中,所述通知消息用于指示所述当前处理进程保存完毕。
76.即为了防止在目标固件复位过程中被打断复位过程,raid卡向自身的处理器集群发送禁用中断指令,并且为实现无感升级,禁用中断指令同时还指示处理器集群暂停并保存当前的处理进程。通过本技术实施例中的禁用中断方案,使得目标固件的复位过程不被打断,保证了目标固件的稳定复位。
77.需要说明的是,在目标成功复位后,raid卡向自身的处理器集群发送可用中断指令,可用中断指令用于指示所述处理器集群恢复接收其他设备的中断信号,并且基于保存的当前处理进程继续处理所述当前处理进程,例如,当前处理进程在禁用中断指令发送到的情况下已经处理到80%,则在处理集群接收到可用中断指令后,可以继续处理余下的20%。
78.在一个示例性实施例中,根据所述目标固件的版本号确定所述目标固件是否需要复位之后,所述方法还包括:确定所述目标固件采用的复位方式;将所述复位方式写入所述raid卡的缓存区的日志中。即,记录本次raid卡重启原因——目标固件复位,本次复位方式——由目标固件发起的软件复位方式;以使得用户或工程师等目标对象在后续检查维护过程中可以通过日志的记载内容明确raid卡在目标时间点的重启原因。
79.在一个示例性实施例中,向所述主机端发送清零指令之后,所述方法还包括:在接收到所述主机端发送的所述io读写请求的情况下,向所述raid卡的raid管理aem引擎发送第三通知指令,其中,所述第三通知指令用于指示所述aem引擎恢复处理所述io读写请求。
80.目标固件复位成功后,raid卡可以继续流水线式的处理io读写请求。在向主机发送清零指令后,主机会发送io读写请求到raid卡,因而可以在发送清零指令后极短时间间隔内发送第三通知指令到aem引擎,指示aem引擎恢复处理io读写请求。进而在主机发送io读写请求后,aem引擎可以立即处理。需要说明的是,第三通知指令和清零指令也可以同时发送。
81.在一个示例性实施例中,根据所述目标固件的版本号确定所述目标固件是否需要复位,包括:获取所述版本号所指示的字节信息中预设位置上的字节;获取与所述预设位置上的字节对应的复位区域指示表,其中,所述复位区域指示表用于指示所述字节与所述复位区域的对应关系;根据所述字节和所述复位区域指示表确定所述目标固件是否需要复位。
82.需要说明的是,目标固件的版本号预设有复位区域指示位,即预设位置,通过读取预设位置上的字节可以明确目标固件需要复位的区域。其中,所述字节可以为数字、字母等,本技术实施例对此不作限制。
83.示例性的,简单假设目标固件具有4位数的版本号,abc_,其中,选择第四位“_”为预设位置,在raid卡包括缓存区域、控制器区域、电源区域、端口区域的情况下,设定缓存区域对应的数字1、控制器区域对应的数字为2、电源区域对应的数字为3、端口区域对应的数字为4,则在目标固件的版本号为abc1的情况下,需要复位的区域为缓存区域,在目标固件的版本号为abc2的情况下,需要复位的区域为控制器区域,以此类推。进一步的,可以设置特定值,如数字0,或字母z表示需要全部区域复位等。
84.在一个示例性实施例中,根据所述字节和所述复位区域指示表确定所述目标固件是否需要复位,包括:根据所述字节和所述复位区域指示表确定所述目标固件的复位区域是否为所述raid卡的微控制单元mcu;在确定所述目标固件的复位区域为所述mcu的情况下,确定所述目标固件需要复位。
85.可以理解的是,本技术实施例涉及一种软件复位方式,也即前述实施例提供的通过置位指令和清零指令控制主机端暂停和恢复发送io读写请求的固件复位方案,软件复位方式的目标复位区域为raid卡中的微控制单元(microcontroller unit,简称mcu)。进而在
确定目标固件的复位区域为所述目标复位区域(mcu)的情况下,可以确定目标固件需要复位,以及复位方式可以选用软件复位方式。
86.在一个示例性实施例中,根据所述字节和所述复位区域指示表确定所述目标固件的复位区域为所述raid卡的微控制单元mcu之后,所述方法还包括:在确定所述目标固件的复位区域不为所述mcu的情况下,通过预设复位方式复位所述raid卡,其中,所述预设复位方式包括以下之一:热插拔复位、控制器级别复位、引脚复位。即在版本号指示raid卡需要全部区域复位的情况下,可以采用热插拔复位、控制器复位、引脚复位等复位方式。例如,版本号为abc0,其中,第四位指示复位区域,第4位为0的情况下即指示全部复位,则在获取到abc0版本号的情况下,可以采用热插拔复位方式进行全部复位。
87.可选的,在复位区域不是mcu的情况下,还可以采用上电复位等方式。可选的,1)引脚复位可以是perst(pci express reset):是一种用于复位pci express总线的信号。当需要重置设备时,可以将perst引脚拉低来发送一个复位信号。2)热插拔复位可以是pcie hot reset:是一种在系统运行期间(即热插拔)重新初始化pcie设备的方法。它允许通过软件或硬件触发,而无需关闭整个系统。3)控制器复位可以是nvme controller level reset:是一种特定于nvme固态硬盘控制器级别的复位方式。这意味着只会重置控制器本身,而不会影响存储器介质中的数据。
88.在一个示例性实施例中,根据所述目标固件的版本号确定所述目标固件是否需要复位之前,所述方法还包括:在目标固件已写入到所述raid卡的缓存区的情况下,校验所述目标固件;在所述校验结果为目标固件有效且完整的情况下,确定所述缓存区中的多个槽位中的可写入槽位,其中,所述可写入槽位为所述多个槽位中除只读槽位和当前使用槽位之外的最小槽位;将所述目标固件写入所述可写入槽位中。
89.可以理解的是,目标固件从组包到写入到raid卡的缓存区raid卡的过程中,可能出现如:组包不完整、下载过程中数据丢失、写入失败、目标固件失效等情况,因而在复位目标固件之前,可以将写入缓存区的目标固件读出并进行完整性、有效性校验。在校验通过的情况下,将目标固件写入缓存区的可写入槽位中。一般情况下,缓存区会存在slot1-7共7个槽位,slot为只读槽位,不可写入,并且目标固件也不可以写入到当前正在使用的当前槽位,因此,可写入槽位为所述多个槽位中除只读槽位和当前使用槽位之外的最小槽位。例如,在raid卡缓存区存在slot1-7的情况下,slot1为只读槽位:如果当前槽位为slot2,则目标固件应当写入slot3中,如果当前槽位为slot4,则目标固件应写入slot2中。
90.在一个示例性实施例中,根据所述目标固件的版本号确定所述目标固件是否需要复位之前,所述方法还包括:获取主机端发送的固件包,以及所述固件包对应的粒度信息包,其中,所述固件包中包括多个固件,所述粒度信息包中包括多个粒度信息,所述固件和所述粒度信息存在一一对应关系,所述粒度信息包括:所述粒度信息所对应的固件的双字数据数量numd信息和双字数据偏移量ofst信息;获取所述主机端将所述固件包分片为多个固件时采用的更新粒度fwug命令;根据所述fwug命令和多个所述ofst信息确定所述多个固件是否存在偏移量重叠;在所述多个固件不存在所述偏移量重叠的情况下,根据所述fwug命令和多个所述numd信息确定所述多个固件是否存在数据数量丢失;在所述多个固件不存在所述数据量丢失的情况下,将所述多个固件依次写入到独立冗余磁盘阵列raid卡的缓存区。
91.需要说明的是,fwug(firmware update granularity)是指固件更新的粒度大小,即单个固件包含的更新内容数量。较小的fwug意味着更细粒度的更新,可以在需要时更快地进行修补或增量升级,并且减少了对整个系统重新启动所需时间和资源的影响。相反,较大的fwug会包含多个更新内容,并可能需要重启整个系统才能生效。numd(number of dwords)字段用于指定固件分片传输的dword数,以及ofst(offset)用于指示固件分片在整个固件中的偏移量。还需要说明的是,目标固件可以是本技术实施例中的固件包、多个固件中的任一固件等。
92.可以理解的是,主机端可以将固件分片(即上述实施例中的固件包中的多个固件中的每个固件)传输到raid卡,raid可以在获取一个完整的固件包的情况下,根据固件分片的对应的粒度信息确定主机端是否将固件分片错误,是否在传输过程中存在数据损失等。具体地,先根据固件分片的ofst信息确定多个固件分片是否存在偏移量重叠,在存在的情况下,则固件分片错误;在不存在的情况下,进一步根据固件分片的numd信息确定固件分片的实际数据量是否为numd信息指定的数据量,以确定是否存在数据丢失。在固件分片错误和/或数据丢失的情况下,raid卡向主机端反馈invalid field in command命令,指示主机端需要重新进行固件的分片或者下发。
93.在本技术的另一个实施例中,还提供了运行于主机的的一种固件复位方法,图3是根据本技术实施例的另一种可选的固件复位方法的流程图,如图3所示,该流程包括如下步骤:
94.步骤s302,将目标固件发送到独立冗余磁盘阵列raid卡的缓存区;
95.步骤s304,在主机端与所述raid卡的接口协议为目标协议的情况下,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令,并根据所述置位指令暂停向所述raid卡发送io读写请求,其中,所述置位指令为所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令;
96.步骤s306,接收所述raid卡在复位完所述目标固件后发送的清零指令,并根据所述清零指令恢复向所述raid卡发送所述io读写请求,其中,所述清零指令为所述目标协议中用于控制所述主机端中目标控制寄存器的清零指令。
97.通过上述步骤,将目标固件发送到独立冗余磁盘阵列raid卡的缓存区;在主机端与所述raid卡的接口协议为目标协议的情况下,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令,并根据所述置位指令暂停向所述raid卡发送io读写请求,其中,所述置位指令为所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令;接收所述raid卡在复位完所述目标固件后发送的清零指令,并根据所述清零指令恢复向所述raid卡发送所述io读写请求,其中,所述清零指令为所述目标协议中用于控制所述主机端中目标控制寄存器的清零指令。也就是说,主机端将目标固件发送到raid卡之后,在接口协议为目标协议的情况下,根据raid卡发送的置位指令暂停向raid卡发送io读写请求,根据raid卡发送的清零指令回复向raid卡发送io读写请求。因此,可以解决现有技术中,固件复位过程会导致主机的io读写请求中断,需要用户重新发起等问题,实现了几乎无感的升级流程,提高了用户体验。
98.在一个示例性实施例中,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令之后,所述方法还包括:接收所述raid卡发送的异步事件请求aer通知,其
中,所述aer通知用于通知所述主机端所述raid卡在目标时间点复位所述目标固件。
99.可以理解的是,在接收到raid卡发送的aer通知的情况下,主机端确定raid由于需要复位目标固件,因而发送置位指令。并且在接收到aer通知的情况下,可以读取置位指令所置位的目标控制寄存器的目标字节位,确定置位指令和aer指令均接收到位,而不是指令误发。
100.在一个示例性实施例中,根据所述置位指令暂停向所述raid卡发送io读写请求,包括:在接收到所述置位指令的情况下,读取所述主机端中的目标控制寄存器的目标字节位;在所述目标字节位为第一值的情况下,暂停向所述raid卡发送io读写请求。
101.在一个示例性实施例中,根据所述清零指令恢复向所述raid卡发送所述io读写请求,包括:在接收到所述清零指令的情况下,读取所述主机端中的目标控制寄存器的目标字节位;在所述目标字节位为第二值的情况下,恢复向所述raid卡发送io读写请求。
102.可选的,本技术实施例中的目标控制寄存器优选为nvme指令集中的csts.pp控制寄存器,目标字节位置为csts.pp控制寄存器中的pp位,第一值优选为1,第二值优选为0。
103.在一个示例性实施例中,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令之后,所述方法还包括:在所述主机端暂停向所述raid卡发送io读写请求的情况下,确定已发送到所述raid卡的剩余io读写请求的io读写请求量;根据所述io读写请求量接收所述raid卡反馈的所述剩余io读写请求对应的剩余响应消息。
104.在主机端暂停发送io读写请求后,仍可以在一定时间内接收到raid卡处理剩余读写请求所反馈的剩余响应消息。主机端需要确定已经发送到raid卡但未接收到响应消息的剩余io读写请求量,以保证接收到等量的剩余响应消息。在剩余io读写请求量和剩余响应消息量不等的情况下,主机端可以发送询问消息到raid卡,以确定是否存在io读写请求丢失的情况。通过本技术实施例,可以减少io读写请求的丢失,以及响应消息的丢失,保障了数据传输的稳定性。
105.在一个示例性实施例中,接收所述raid卡在复位完所述目标固件后发送的清零指令之后,所述方法还包括:获取所述raid卡的所述缓存区中的日志;根据所述日志确定所述raid卡采用的复位方式。即主机端可以通过获取raid卡缓存区的日志,以确定raid卡在目标时间点采用的复位方式。
106.在一个示例性实施例中,将目标固件发送到独立冗余磁盘阵列raid卡的缓存区,所述方法还包括:将固件包、所述固件包对应的粒度信息包,以及将所述固件包分片为多个固件时采用的更新粒度fwug命令发送到所述raid卡上,其中,所述固件包中包括多个固件,所述粒度信息包中包括多个粒度信息,所述固件和所述粒度信息存在一一对应关系,所述粒度信息包括:所述粒度信息所对应的固件的双字数据数量numd信息和双字数据偏移量ofst信息。
107.可以理解的是,主机端可以将固件分片,得到多个固件分片(即多个固件),以固件包的方式发送的raid卡中,同时可以将每个固件分片的粒度信息以及分片时采用的更新粒度fwug命令发送到所述raid卡上,以便于raid卡确认是否存在分片错误或固件包传输过程中固件丢失等情况。
108.为了更好的理解上述固件复位方法,在一个可选实施例中,还提供以下方案,用于对上述实施例进行解释说明。
109.本技术实施例提出的一种通过控制reset域控制pcieep不受影响,链路不断的方案,具体地,通过csts.pp置位暂停io,解决主机io超时问题,发送aer通知:aer notice event:firmware activation starting,以恢复io等实现不断pcie链路、不导致卷离线、业务不感知的无感升级流程。
110.本技术实施例基于nvme协议,通过nvme协议中的admin command set中:firmware commit、firmware image download、get log、get feature等命令完成基本任务流程,实现固件升级准备、固件下载、固件校验、写入flash和reset使新固件生效过程。
111.其中,固件升级准备包括get firmware update capabilities和get firmware slot information过程,对应主机端identify command和get log page command;固件下载过程为update manager模块接收固件并保存至flash固定缓存区,对应主机端firmware image download命令;固件校验过程为update manager将缓存区固件读出校验固件的完整性、检查固件签名、检查固件分片overlap等;固件写入flash过程为update manager模块将校验通过的flash缓存区的固件写入指定的flash固定slot,并更新firmware slot information;reset使能新固件过程为写入flash完成后若支持无感升级和reset cpu过程,则启动reset流程,重新加载新固件,reset过程不中断io业务,启动后update manager检查启动状态表,固件下载、写入flash、和reset过程对应主机端firmware commit命令。
112.具体固件升级流程如下,如图4所示包括以下步骤s401-s405:
113.步骤s401,固件带内升级准备阶段,host端发送command时,up date manager通过芯片固件回复firmware update相关信息,包括fw update capabilities和firmware slot information等。
114.其中,fw update capabilities信息包含:1)是否可升级状态及升级是否影响io业务;2)是否支持检测重叠固件序列;3)是否支持固件不重启激活;4)控制器所支持的固件槽位数,槽位数范围为1~7;5)第一个固件槽位是否为只读。具体包含内容如下表1:
115.表1
[0116][0117]
表1(续)
[0118][0119]
firmware slot information信息包含:1)当前运行固件;2)reset之后运行的固件;3)各个slot对应的固件版本号,具体如下表2:
[0120]
表2
[0121][0122]
表2(续)
[0123][0124]
步骤s402,固件下载:固件带内下载阶段,host端(相当于上述实施例中的主机端)通过firmware image download发送固件包,up date manager通过芯片固件和板卡固件接收固件分片并缓存到flash固定缓存区,根据固件包的大小,将固件包按照fwug(firmware update granularity)分包发送、接收和缓存。每次分包都需要一个firmware image download命令。每一个命令需要包含一个dword偏移量(ofst)和一个dword数量(numd),从而指定出当前firmware image的范围。主机软件需要确保各个firmware images的范围不会重叠,并且numd字段和ofst字段满足fwug字段中指示的对齐和粒度要求。多个firmware image分片不需要按照顺序发送。
[0125]
其中,fwug字段定义如下表3:
[0126]
表3
[0127][0128]
firmware image download命令使用datapointer,command dword 10和command dword 11字段。
[0129]
data pointer:此字段指定需要传输数据的位置。data pointer在admin and nvm command set的bytes 39:24。总共16bytes,data pointer字段定义如下表4所示。
[0130]
command dword 10(32bits):number of dwords(numd),字段定义如下表5所示。此字段指定该固件分片传输的dword数。如果此字段中指定的值不满足fwug字段指示的要求,固件更新可能会以invalid field in command状态中止。
[0131]
command dword 11(32bits):offset(ofst),字段定义如下表6所示。此字段指定当前正在下载的固件分片在整个firmware image当中的offset,以dword为单位。当固件分块下载时,offset用于构建完整的firmware image。firmware image的第一个分片具有0h的偏移量。如果此字段中指定的值不满足fwug字段指示的要求,则固件更新可能会失败,并显示invalid field in command状态。
[0132]
表4
[0133][0134]
表5
[0135][0136]
表6
[0137][0138]
完成firmware image download命令后,控制器在admin队列上发送一个命令队列(command queue,简称cq),用来通知host命令执行的状态。firmware image download命令状态值还包括:14h:overlapping range:用于表示下载的固件映像的粒度或对齐方式不符合识别控制器数据结构中指示的固件更新粒度字段,具体如表7所示。
[0139]
表7
[0140][0141]
步骤s403,固件校验:固件校验阶段,host端发送firmware commit时,
updatemanager检验flash固定缓存区的新固件有效性和完整性,校验通过后将缓存区的新固件写入flash指定slot位置。本步骤并非强制要求,在具体实现时,可根据安全需要,自主选择。
[0142]
步骤s404,固件写入flash阶段:校验通过后updatemanager将flash缓存区固件写入指定的flash中slot1~7位置,slot选择算法:除去slot1和当前slot(lastslot),选择一个最小的slot,新固件写入flash中slot位置后,更新firmware slot information相关信息,将写入slot位置标记为nextslot。重启后,系统从nextslot启动。若是写入flash失败,则返回失败状态cq(06h),同时记录写入flash失败原因。为flash存储区划分。
[0143]
步骤s405:reset新固件使能阶段:
[0144]
raid卡控制器soc芯片一般有固件处理器、io控制器、raid加速器、pcieep等核心部件组成,整个soc的复位控制分为几种:上电复位、perst、pciehotreset、nvmecontrollerlevelreset、软件复位等,除软件复位外,其他方式都会导致raid卡与主机之间链路发生变化,导致业务中断。本技术实施例采用软件复位方式,在固件写入flash后,由固件发起复位流程,而非由主机通过pciehotreset等发起,这样解决了最为根本的主机链路不断问题;
[0145]
复位作用域定义如下表8:
[0146]
表8
command通知主机,新固件已经启动,并清零上一步中的controllerstatus中的process paused标志位,告知主机恢复io;
[0152]
升级过程的详细流程图如图5、6所示:
[0153]
图5是根据本技术实施例的一种可选的固件复位方法的固件升级具体流程图(一),包括如下步骤:
[0154]
步骤s501:固件镜像下载(firmware image download);
[0155]
步骤s502:固件提交,例如:firmware commit(ca=011b);
[0156]
步骤s503:判断固件有效与否,有效进入步骤s506,否则进入步骤s504;
[0157]
步骤s504:丢弃提交(commit)命令之前上一轮下载(download)命令收到的固件分片;
[0158]
步骤s505:根据错误类型回复命令队列(completion queue,简称cq);其中,步骤s5051:错误类型是存储重叠(overlapping),对应回复cq:状态码status=14h;步骤s5052:错误类型为固件槽位无效(invalid firmware slot),对应回复cq:status=06h;步骤s5053:错误类型为文件错误(invalid image),对应回复cq:status=07h;
[0159]
步骤s506:确定是否允许固件更新?允许则进入步骤s508,否则进入步骤s507;
[0160]
步骤s507:回复命令队列cq如下信息:status code type=0h,status=13h,即固件激活被禁止(firmware activation prohibited);
[0161]
步骤s508:将新固件烧写到缓存(flash);
[0162]
步骤s509:确定是否烧写成功?成功则进入步骤s510;
[0163]
步骤s510:确定是否需要热复位(hot reset),是则进入步骤s521,等待全部复位,否则进入步骤s511;
[0164]
步骤s511:回复cq:status=0h;
[0165]
步骤s512:回复cq:status=0bh;
[0166]
步骤s513:更新管理器(update manager)通知各个cpu保存上下文(context);
[0167]
步骤s514等待热复位(hot reset);
[0168]
在步骤s513之后,进入部分复位阶段,具体流程如图6所示,包括如下步骤:
[0169]
步骤s601:更新管理器(update manager)通知各个cpu保存上下文(context);
[0170]
步骤s602:当前raid卡采用写回(write back,wb)模式?是则进入步骤s603,否则进入步骤s606;
[0171]
步骤s603:板卡触发切换到写透(write through,wt)模式;
[0172]
步骤s604:将缓存(cache)中数据落盘;
[0173]
步骤s605:缓存(cache)已清空?未清空则进入步骤s604重复清空动作,已清空则进入步骤s606;
[0174]
步骤s606:目标控制寄存器(csts.pp)置位暂停io;
[0175]
步骤s607:发送异步请求通知(aer notice event):固件激活开始(firmware activation starting);
[0176]
步骤s608:通知raid管理引擎aem暂停io;
[0177]
步骤s609:io处理完毕?轮询raid管理引擎aem,处理完毕进入步骤s610,否则回到步骤s608;
[0178]
步骤s610:禁用中断;
[0179]
步骤s611:各个cpu通知更新管理器上下文(update manager context)保存成功;
[0180]
步骤s612:在缓存(flash)中记录当前重启类型;
[0181]
步骤s613:重启各个cpu;
[0182]
步骤s614:固件恢复上下文(context);
[0183]
步骤s615:目标控制寄存器(csts.pp)清零;
[0184]
步骤s616:通知raid管理引擎aem开始处理io;
[0185]
步骤s617:升级前wb模式?是则进入步骤s618,否则结束固件复位流程;
[0186]
步骤s618:板卡触发切换到wb模式,结束复位流程。
[0187]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例所述的方法。
[0188]
在本实施例中还提供了一种固件复位装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0189]
图7是根据本技术实施例的一种可选的固件复位装置的结构框图,如图7所示,该装置包括:
[0190]
第一确定模块72,用于在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;
[0191]
第二确定模块74,用于在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;
[0192]
发送模块76,用于向所述主机端发送置位指令;
[0193]
复位模块78,用于复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。
[0194]
通过上述模块,在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;向所述主机端发送置位指令;复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。也就是说,根据目标固件的版本号确定目标固件的复位需要,以及确定raid卡和主机端的接口协议是否为存在置位指令和清零指令的目标协议,在需要复位、且接口协议为目标协议的情况下的情况下,由raid卡向主机端发送置位指
令使得主机端暂停发送io读写请求,在成功复位目标固件后,再向主机端发送清零指令,指示主机端恢复向raid卡发送io读写请求,因此,可以解决现有技术中,固件复位过程会导致主机的io读写请求中断,需要用户重新发起等问题,实现了几乎无感的升级流程,提高了用户体验。
[0195]
在一个示例性实施例中,发送模块76,还用于向所述主机端发送异步事件请求aer通知,其中,所述aer通知用于通知所述主机端所述raid卡在目标时间点复位所述目标固件。
[0196]
在一个示例性实施例中,发送模块76,还用于向所述主机端发送所述置位指令,以将所述主机端中目标控制寄存器的目标字节位置为第一值,其中,所述第一值用于指示所述主机端暂停向所述raid卡发送所述io读写请求。
[0197]
在一个示例性实施例中,复位模块78,还用于向所述主机端发送所述清零指令,以将所述主机端中目标控制寄存器的目标字节位置为第二值,其中,所述第二值用于指示所述主机端恢复向所述raid卡发送所述io读写请求。
[0198]
在一个示例性实施例中,发送模块76,还用于在所述raid卡未接收到所述主机端发送的所述io读写请求的情况下,确定所述raid卡中剩余的io读写请求量;在所述io读写请求量大于预设阈值的情况下,向所述raid卡的raid管理aem引擎发送第一通知指令,以指示所述aem引擎继续处理剩余的io读写请求;在所述io读写请求量小于等于所述预设阈值的情况下,向所述aem引擎发送第二通知指令,以指示所述aem引擎暂停处理所述io读写请求。
[0199]
在一个示例性实施例中,复位模块78,还用于将禁用中断指令发送到所述raid卡的处理器集群,以指示所述处理器集群暂停并保存所述处理器集群的当前处理进程,所述禁用中断指令用于指示所述处理器集群暂停接收其他设备的中断信号,其中,所述其他设备包括:所述raid卡的外部设备,所述raid卡的内部硬件组件;在接收到所述处理器集群的通知消息的情况下,复位所述目标固件,其中,所述通知消息用于指示所述当前处理进程保存完毕。
[0200]
在一个示例性实施例中,第一确定模块72,还用于确定所述目标固件采用的复位方式;将所述复位方式写入所述raid卡的缓存区的日志中。
[0201]
在一个示例性实施例中,复位模块78,还用于在接收到所述主机端发送的所述io读写请求的情况下,向所述raid卡的raid管理aem引擎发送第三通知指令,其中,所述第三通知指令用于指示所述aem引擎恢复处理所述io读写请求。
[0202]
在一个示例性实施例中,第一确定模块72,还用于获取所述版本号所指示的字节信息中预设位置上的字节;获取与所述预设位置上的字节对应的复位区域指示表,其中,所述复位区域指示表用于指示所述字节与所述复位区域的对应关系;根据所述字节和所述复位区域指示表确定所述目标固件是否需要复位。
[0203]
在一个示例性实施例中,第一确定模块72,还用于根据所述字节和所述复位区域指示表确定所述目标固件是否需要复位,包括:根据所述字节和所述复位区域指示表确定所述目标固件的复位区域是否为所述raid卡的微控制单元mcu;在确定所述目标固件的复位区域为所述mcu的情况下,确定所述目标固件需要复位。
[0204]
在一个示例性实施例中,第一确定模块72,还用于在确定所述目标固件的复位区
域不为所述mcu的情况下,通过预设复位方式复位所述raid卡,其中,所述预设复位方式包括以下之一:热插拔复位、控制器级别复位、引脚复位。
[0205]
在一个示例性实施例中,第一确定模块72,还用于在目标固件已写入到所述raid卡的缓存区的情况下,校验所述目标固件;在所述校验结果为目标固件有效且完整的情况下,确定所述缓存区中的多个槽位中的可写入槽位,其中,所述可写入槽位为所述多个槽位中除只读槽位和当前使用槽位之外的最小槽位;将所述目标固件写入所述可写入槽位中。
[0206]
在一个示例性实施例中,第一确定模块72,还用于获取主机端发送的固件包,以及所述固件包对应的粒度信息包,其中,所述固件包中包括多个固件,所述粒度信息包中包括多个粒度信息,所述固件和所述粒度信息存在一一对应关系,所述粒度信息包括:所述粒度信息所对应的固件的双字数据数量numd信息和双字数据偏移量ofst信息;获取所述主机端将所述固件包分片为多个固件时采用的更新粒度fwug命令;根据所述fwug命令和多个所述ofst信息确定所述多个固件是否存在偏移量重叠;在所述多个固件不存在所述偏移量重叠的情况下,根据所述fwug命令和多个所述numd信息确定所述多个固件是否存在数据数量丢失;在所述多个固件不存在所述数据量丢失的情况下,将所述多个固件依次写入到独立冗余磁盘阵列raid卡的缓存区。
[0207]
本技术的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
[0208]
s1,在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;
[0209]
s2,在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;
[0210]
s3,向所述主机端发送置位指令;
[0211]
s4,复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。
[0212]
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:u盘、只读存储器(read-only memory,简称为rom)、随机存取存储器(random access memory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
[0213]
本技术的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
[0214]
s1,在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;
[0215]
s2,在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;
[0216]
s3,向所述主机端发送置位指令;
[0217]
s4,复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。
[0218]
在一个示例性实施例中,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
[0219]
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
[0220]
显然,本领域的技术人员应该明白,上述的本技术的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本技术不限制于任何特定的硬件和软件结合。
[0221]
以上所述仅为本技术的优选实施例而已,并不用于限制本技术,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。

技术特征:
1.一种固件复位方法,其特征在于,包括:在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;向所述主机端发送置位指令;复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。2.根据权利要求1所述的方法,其特征在于,向所述主机端发送置位指令之后,所述方法还包括:向所述主机端发送异步事件请求aer通知,其中,所述aer通知用于通知所述主机端所述raid卡在目标时间点复位所述目标固件。3.根据权利要求1所述的方法,其特征在于,向所述主机端发送置位指令,包括:向所述主机端发送所述置位指令,以将所述主机端中目标控制寄存器的目标字节位置为第一值,其中,所述第一值用于指示所述主机端暂停向所述raid卡发送所述io读写请求。4.根据权利要求1所述的方法,其特征在于,向所述主机端发送清零指令,包括:向所述主机端发送所述清零指令,以将所述主机端中目标控制寄存器的目标字节位置为第二值,其中,所述第二值用于指示所述主机端恢复向所述raid卡发送所述io读写请求。5.根据权利要求1所述的方法,其特征在于,向所述主机端发送置位指令之后,所述方法还包括:在所述raid卡未接收到所述主机端发送的所述io读写请求的情况下,确定所述raid卡中剩余的io读写请求量;在所述io读写请求量大于预设阈值的情况下,向所述raid卡的raid管理aem引擎发送第一通知指令,以指示所述aem引擎继续处理剩余的io读写请求;在所述io读写请求量小于等于所述预设阈值的情况下,向所述aem引擎发送第二通知指令,以指示所述aem引擎暂停处理所述io读写请求。6.根据权利要求1所述的方法,其特征在于,复位所述目标固件之前,所述方法还包括:将禁用中断指令发送到所述raid卡的处理器集群,以指示所述处理器集群暂停并保存所述处理器集群的当前处理进程,所述禁用中断指令用于指示所述处理器集群暂停接收其他设备的中断信号,其中,所述其他设备包括:所述raid卡的外部设备,所述raid卡的内部硬件组件;在接收到所述处理器集群的通知消息的情况下,复位所述目标固件,其中,所述通知消息用于指示所述当前处理进程保存完毕。7.根据权利要求1所述的方法,其特征在于,根据所述目标固件的版本号确定所述目标固件是否需要复位之后,所述方法还包括:确定所述目标固件采用的复位方式;将所述复位方式写入所述raid卡的缓存区的日志中。8.根据权利要求1所述的方法,其特征在于,向所述主机端发送清零指令之后,所述方
法还包括:在接收到所述主机端发送的所述io读写请求的情况下,向所述raid卡的raid管理aem引擎发送第三通知指令,其中,所述第三通知指令用于指示所述aem引擎恢复处理所述io读写请求。9.根据权利要求1所述的方法,其特征在于,根据所述目标固件的版本号确定所述目标固件是否需要复位,包括:获取所述版本号所指示的字节信息中预设位置上的字节;获取与所述预设位置上的字节对应的复位区域指示表,其中,所述复位区域指示表用于指示所述字节与所述复位区域的对应关系;根据所述字节和所述复位区域指示表确定所述目标固件是否需要复位。10.根据权利要求9所述的方法,其特征在于,根据所述字节和所述复位区域指示表确定所述目标固件是否需要复位,包括:根据所述字节和所述复位区域指示表确定所述目标固件的复位区域是否为所述raid卡的微控制单元mcu;在确定所述目标固件的复位区域为所述mcu的情况下,确定所述目标固件需要复位。11.根据权利要求10所述的方法,其特征在于,根据所述字节和所述复位区域指示表确定所述目标固件的复位区域为所述raid卡的微控制单元mcu之后,所述方法还包括:在确定所述目标固件的复位区域不为所述mcu的情况下,通过预设复位方式复位所述raid卡,其中,所述预设复位方式包括以下之一:热插拔复位、控制器级别复位、引脚复位。12.根据权利要求1所述的方法,其特征在于,根据所述目标固件的版本号确定所述目标固件是否需要复位之前,所述方法还包括:在目标固件已写入到所述raid卡的缓存区的情况下,校验所述目标固件;在校验结果为目标固件有效且完整的情况下,确定所述缓存区中的多个槽位中的可写入槽位,其中,所述可写入槽位为所述多个槽位中除只读槽位和当前使用槽位之外的最小槽位;将所述目标固件写入所述可写入槽位中。13.根据权利要求1所述的方法,其特征在于,根据所述目标固件的版本号确定所述目标固件是否需要复位之前,所述方法还包括:获取主机端发送的固件包,以及所述固件包对应的粒度信息包,其中,所述固件包中包括多个固件,所述粒度信息包中包括多个粒度信息,所述固件和所述粒度信息存在一一对应关系,所述粒度信息包括:所述粒度信息所对应的固件的双字数据数量numd信息和双字数据偏移量ofst信息;获取所述主机端将所述固件包分片为多个固件时采用的更新粒度fwug命令;根据所述fwug命令和多个所述ofst信息确定所述多个固件是否存在偏移量重叠;在所述多个固件不存在所述偏移量重叠的情况下,根据所述fwug命令和多个所述numd信息确定所述多个固件是否存在数据数量丢失;在所述多个固件不存在数据量丢失的情况下,将所述多个固件依次写入到独立冗余磁盘阵列raid卡的缓存区。14.一种固件复位方法,其特征在于,包括:
将目标固件发送到独立冗余磁盘阵列raid卡的缓存区;在主机端与所述raid卡的接口协议为目标协议的情况下,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令,并根据所述置位指令暂停向所述raid卡发送io读写请求,其中,所述置位指令为所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令;接收所述raid卡在复位完所述目标固件后发送的清零指令,并根据所述清零指令恢复向所述raid卡发送所述io读写请求,其中,所述清零指令为所述目标协议中用于控制所述主机端中目标控制寄存器的清零指令。15.根据权利要求14所述的方法,其特征在于,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令之后,所述方法还包括:接收所述raid卡发送的异步事件请求aer通知,其中,所述aer通知用于通知所述主机端所述raid卡在目标时间点复位所述目标固件。16.根据权利要求14所述的方法,其特征在于,根据所述置位指令暂停向所述raid卡发送io读写请求,包括:在接收到所述置位指令的情况下,读取所述主机端中的目标控制寄存器的目标字节位;在所述目标字节位为第一值的情况下,暂停向所述raid卡发送io读写请求。17.根据权利要求14所述的方法,其特征在于,根据所述清零指令恢复向所述raid卡发送所述io读写请求,包括:在接收到所述清零指令的情况下,读取所述主机端中的目标控制寄存器的目标字节位;在所述目标字节位为第二值的情况下,恢复向所述raid卡发送io读写请求。18.根据权利要求14所述的方法,其特征在于,接收所述raid卡在确定所述目标固件需要复位的情况下发送的置位指令之后,所述方法还包括:在所述主机端暂停向所述raid卡发送io读写请求的情况下,确定已发送到所述raid卡的剩余io读写请求的io读写请求量;根据所述io读写请求量接收所述raid卡反馈的所述剩余io读写请求对应的剩余响应消息。19.根据权利要求14所述的方法,其特征在于,接收所述raid卡在复位完所述目标固件后发送的清零指令之后,所述方法还包括:获取所述raid卡的所述缓存区中的日志;根据所述日志确定所述raid卡采用的复位方式。20.根据权利要求14所述的方法,其特征在于,将目标固件发送到独立冗余磁盘阵列raid卡的缓存区,所述方法还包括:将固件包、所述固件包对应的粒度信息包,以及将所述固件包分片为多个固件时采用的更新粒度fwug命令发送到所述raid卡上,其中,所述固件包中包括多个固件,所述粒度信息包中包括多个粒度信息,所述固件和所述粒度信息存在一一对应关系,所述粒度信息包括:所述粒度信息所对应的固件的双字数据数量numd信息和双字数据偏移量ofst信息。21.一种固件复位装置,其特征在于,包括:
第一确定模块,用于在目标固件已写入到独立冗余磁盘阵列raid卡的缓存区的情况下,根据所述目标固件的版本号确定所述目标固件是否需要复位;第二确定模块,用于在所述目标固件需要复位,以及所述raid卡与主机端的接口协议为目标协议的情况下,确定所述目标协议中用于控制所述主机端中目标控制寄存器的置位指令和清零指令,其中,所述置位指令用于指示所述主机端暂停向所述raid卡发送io读写请求,所述清零指令用于指示所述主机端恢复向所述raid卡发送所述io读写请求;发送模块,用于向所述主机端发送置位指令;复位模块,用于复位所述目标固件,并在复位成功后,向所述主机端发送清零指令。22.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至20任一项中所述的方法的步骤。23.一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至20任一项中所述的方法的步骤。

技术总结
本申请实施例提供了一种固件复位方法及装置、存储介质、电子装置,其中,该方法包括:在目标固件已写入到独立冗余磁盘阵列RAID卡的缓存区的情况下,根据目标固件的版本号确定目标固件是否需要复位;在目标固件需要复位,以及RAID卡与主机端的接口协议为目标协议的情况下,确定目标协议中用于控制主机端中目标控制寄存器的置位指令和清零指令,其中,置位指令用于指示主机端暂停向RAID卡发送IO读写请求,清零指令用于指示主机端恢复向RAID卡发送IO读写请求;向主机端发送置位指令;复位目标固件,并在复位成功后,向主机端发送清零指令。解决了固件复位过程会导致主机的IO读写请求中断,需要用户重新发起等问题。需要用户重新发起等问题。需要用户重新发起等问题。


技术研发人员:王见 孙明刚 刘涛 钟戟 李瑞东 李辉
受保护的技术使用者:苏州浪潮智能科技有限公司
技术研发日:2023.07.14
技术公布日:2023/10/15
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐