程序升级方法、装置、计算机设备和存储介质转让专利

申请号 : CN202311108605.8

文献号 : CN116820527B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 倪勋陆志刚马良

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本申请涉及一种程序升级方法、装置、计算机设备、存储介质和计算机程序产品。所述方法可应用于云技术、人工智能、智慧交通、辅助驾驶等各种场景,包括:在待升级程序的主进程运行的过程中,对待升级程序升级,获得升级后的程序;主进程通过第一命令通道获取待升级程序的命令;启动升级后的程序的从进程;从进程支持通过第二命令通道获取升级后的程序的命令;指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令;当主进程结束对已获得命令的清空处理,切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。采用本方法可以降低程序升级时程序服务的中断时长,减少升级对程序运行的干扰。

权利要求 :

1.一种程序升级方法,其特征在于,所述方法包括:

在待升级程序的主进程在可编程器件上运行的过程中,对所述待升级程序进行升级,获得升级后的程序;所述主进程通过第一命令通道获取针对所述待升级程序的命令,所述第一命令通道包括所述可编程器件的第一命令接口;所述第一命令通道包括第一命令通道标识,针对所述待升级程序的命令基于所述第一命令通道标识被路由至所述第一命令通道;所述待升级程序包括存储开发套件程序;所述存储开发套件程序为用于生成与接收的命令对应的网络磁盘访问请求的程序;

基于所述升级后的程序启动从进程;确定针对所述升级后的程序的第二命令通道,并对所述第二命令通道进行通道初始化,所述第二命令通道包括所述可编程器件的第二命令接口;对所述从进程关联的数据存储空间进行存储初始化;所述数据存储空间为网络磁盘,进行初始化的网络磁盘的数量与所述从进程支持的网络磁盘的数量对应;其中,所述从进程支持基于存储初始化后的所述数据存储空间,执行从通道初始化后的所述第二命令通道获得的针对所述升级后的程序的命令;所述从进程支持通过第二命令通道获取针对所述升级后的程序的命令;所述第二命令通道包括第二命令通道标识,针对所述待升级程序的命令基于所述第二命令通道标识被路由至所述第二命令通道;

指示所述主进程停止从所述第一命令通道获取命令,并清空所述主进程从所述第一命令通道已获得的命令;

当所述从进程确定所述主进程结束对已获得命令的清空处理,所述从进程调用所述可编程器件的切换功能函数,基于所述切换功能函数,将命令获取通道从所述第一命令通道切换成所述第二命令通道,切换成由所述从进程通过所述第二命令通道获取针对所述升级后的程序的命令,并解析针对所述升级后的程序的命令,得到与所述升级后的程序的命令关联的命令参数,基于所述命令参数,确定所述升级后的程序的命令对应的网络磁盘,生成针对所述网络磁盘的访问请求。

2.根据权利要求1所述的方法,其特征在于,所述指示所述主进程停止从所述第一命令通道获取命令,并清空所述主进程从所述第一命令通道已获得的命令,包括:建立所述从进程和所述主进程之间的进程间通信连接;

当所述进程间通信连接为连接成功,通过所述从进程指示所述主进程停止从所述第一命令通道获取命令,并指示所述主进程继续执行从所述第一命令通道已获得的命令,直至已获得的命令执行完成。

3.根据权利要求2所述的方法,其特征在于,所述建立所述从进程和所述主进程之间的进程间通信连接,包括:确定由所述主进程创建的进程间通信接口,并基于所述进程间通信接口建立所述从进程和所述主进程之间的进程间通信连接;

所述通过所述从进程指示所述主进程停止从所述第一命令通道获取命令,并指示所述主进程继续执行从所述第一命令通道已获得的命令,直至已获得的命令执行完成,包括:通过所述从进程基于所述进程间通信接口向所述主进程发送清空命令;所述清空命令,用于指示所述主进程停止从所述第一命令通道获取命令,并指示所述主进程继续执行从所述第一命令通道已获得的命令,直至已获得的命令执行完成。

4.根据权利要求3所述的方法,其特征在于,所述方法还包括:

当启动所述主进程,通过所述主进程创建所述进程间通信接口;

当所述主进程基于所述进程间通信接口接收到所述清空命令,确定针对所述待升级程序进行命令下发的命令下发端;

通过所述主进程指示所述命令下发端停止通过所述第一命令通道进行命令下发,并通过所述主进程继续执行从所述第一命令通道已获得的命令,直至已获得的命令执行完成。

5.根据权利要求1所述的方法,其特征在于,所述当所述从进程确定所述主进程结束对已获得命令的清空处理,所述从进程调用所述可编程器件的切换功能函数,基于所述切换功能函数,将命令获取通道从所述第一命令通道切换成所述第二命令通道,包括:当所述从进程基于进程间通信接口获得清空结束通知消息,所述从进程调用所述可编程器件的切换功能函数,基于所述切换功能函数,将命令获取通道从所述第一命令通道切换成所述第二命令通道;

其中,所述清空结束通知消息,是所述主进程在结束对已获得命令的清空处理的情况下基于进程间通信接口向所述从进程发送的;所述进程间通信接口,用于建立所述从进程和所述主进程之间的进程间通信连接。

6.根据权利要求5所述的方法,其特征在于,所述方法还包括:

当所述命令获取通道成功切换成所述第二命令通道,通过所述从进程基于所述进程间通信接口向所述主进程发送退出命令;所述退出命令用于指示所述主进程结束运行。

7.根据权利要求1所述的方法,其特征在于,所述在待升级程序的主进程运行的过程中,对所述待升级程序进行升级,获得升级后的程序,包括:运行待升级程序的主进程;

通过所述主进程从第一命令通道获取针对所述待升级程序的命令,并通过所述主进程执行所获得的命令;

当触发针对所述待升级程序的升级,针对所述待升级程序的程序文件进行升级,获得升级后的程序。

8.根据权利要求1‑7任意一项所述的方法,其特征在于,在所述切换成由所述从进程通过所述第二命令通道获取针对所述升级后的程序的命令,并执行所获得的命令之后,所述方法还包括:通过所述从进程中断与所述主进程的通信连接,并创建针对下一次程序升级的下一进程间通信接口;

其中,所述下一进程间通信接口,用于在针对所述升级后的程序触发进行下一次程序升级的情况下,将所述从进程作为下一次程序升级的主程序,并建立下一次程序升级的主程序与下一次程序升级的从程序之间的通信连接。

9.一种程序升级装置,其特征在于,所述装置包括:

升级程序确定模块,用于在待升级程序的主进程在可编程器件上运行的过程中,对所述待升级程序进行升级,获得升级后的程序;所述主进程通过第一命令通道获取针对所述待升级程序的命令,所述第一命令通道包括所述可编程器件的第一命令接口;所述第一命令通道包括第一命令通道标识,针对所述待升级程序的命令基于所述第一命令通道标识被路由至所述第一命令通道;所述待升级程序包括存储开发套件程序;所述存储开发套件程序为用于生成与接收的命令对应的网络磁盘访问请求的程序;

从进程启动模块,用于基于所述升级后的程序启动从进程;确定针对所述升级后的程序的第二命令通道,并对所述第二命令通道进行通道初始化,所述第二命令通道包括所述可编程器件的第二命令接口;对所述从进程关联的数据存储空间进行存储初始化;所述数据存储空间为网络磁盘,进行初始化的网络磁盘的数量与所述从进程支持的网络磁盘的数量对应;其中,所述从进程支持基于存储初始化后的所述数据存储空间,执行从通道初始化后的所述第二命令通道获得的针对所述升级后的程序的命令;所述从进程支持通过第二命令通道获取针对所述升级后的程序的命令;所述第二命令通道包括第二命令通道标识,针对所述待升级程序的命令基于所述第二命令通道标识被路由至所述第二命令通道;

指示模块,用于指示所述主进程停止从所述第一命令通道获取命令,并清空所述主进程从所述第一命令通道已获得的命令;

切换模块,用于当所述从进程确定所述主进程结束对已获得命令的清空处理,所述从进程调用所述可编程器件的切换功能函数,基于所述切换功能函数,将命令获取通道从所述第一命令通道切换成所述第二命令通道,切换成由所述从进程通过所述第二命令通道获取针对所述升级后的程序的命令,并解析针对所述升级后的程序的命令,得到与所述升级后的程序的命令关联的命令参数,基于所述命令参数,确定所述升级后的程序的命令对应的网络磁盘,生成针对所述网络磁盘的访问请求。

10.根据权利要求9所述的装置,其特征在于,所述指示模块,还用于建立所述从进程和所述主进程之间的进程间通信连接;当所述进程间通信连接为连接成功,通过所述从进程指示所述主进程停止从所述第一命令通道获取命令,并指示所述主进程继续执行从所述第一命令通道已获得的命令,直至已获得的命令执行完成。

11.根据权利要求10所述的装置,其特征在于,所述指示模块包括通信连接建立模块和清空命令发送模块;

所述通信连接建立模块,用于确定由所述主进程创建的进程间通信接口,并基于所述进程间通信接口建立所述从进程和所述主进程之间的进程间通信连接;

所述清空命令发送模块,用于通过所述从进程基于所述进程间通信接口向所述主进程发送清空命令;所述清空命令,用于指示所述主进程停止从所述第一命令通道获取命令,并指示所述主进程继续执行从所述第一命令通道已获得的命令,直至已获得的命令执行完成。

12.根据权利要求11所述的装置,其特征在于,所述程序升级装置还包括主进程控制模块;

所述主进程控制模块,用于当启动所述主进程,通过所述主进程创建所述进程间通信接口;当所述主进程基于所述进程间通信接口接收到所述清空命令,确定针对所述待升级程序进行命令下发的命令下发端;通过所述主进程指示所述命令下发端停止通过所述第一命令通道进行命令下发,并通过所述主进程继续执行从所述第一命令通道已获得的命令,直至已获得的命令执行完成。

13.根据权利要求9所述的装置,其特征在于,所述切换模块包括通道切换模块;

所述通道切换模块,还用于当所述从进程基于进程间通信接口获得清空结束通知消息,通过所述从进程确定调用所述可编程器件的切换功能函数,基于所述切换功能函数,将命令获取通道从所述第一命令通道切换成所述第二命令通道;其中,所述清空结束通知消息,是所述主进程在结束对已获得命令的清空处理的情况下基于所述进程间通信接口向所述从进程发送的;所述进程间通信接口,用于建立所述从进程和所述主进程之间的进程间通信连接。

14.根据权利要求13所述的装置,其特征在于,所述程序升级装置还包括主进程退出模块;

所述主进程退出模块,用于当所述命令获取通道成功切换成所述第二命令通道,通过所述从进程基于所述进程间通信接口向所述主进程发送退出命令;所述退出命令用于指示所述主进程结束运行。

15.根据权利要求9所述的装置,其特征在于,所述升级程序确定模块,还用于运行待升级程序的主进程;通过所述主进程从第一命令通道获取针对所述待升级程序的命令,并通过所述主进程执行所获得的命令;当触发针对所述待升级程序的升级,针对所述待升级程序的程序文件进行升级,获得升级后的程序。

16.根据权利要求9‑15任意一项所述的装置,其特征在于,所述程序升级装置还包括通信接口建立模块;

所述通信接口建立模块,用于通过所述从进程中断与所述主进程的通信连接,并创建针对下一次程序升级的下一进程间通信接口;其中,所述下一进程间通信接口,用于在针对所述升级后的程序触发进行下一次程序升级的情况下,将所述从进程作为下一次程序升级的主程序,并建立下一次程序升级的主程序与下一次程序升级的从程序之间的通信连接。

17.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述的方法的步骤。

18.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。

说明书 :

程序升级方法、装置、计算机设备和存储介质

技术领域

[0001] 本申请涉及计算机技术领域,特别是涉及一种程序升级方法、装置、计算机设备、存储介质和计算机程序产品。

背景技术

[0002] 随着计算机技术的发展,提供各式各样服务的计算机程序层出不穷,在医疗、游戏、交通、物联、智能硬件等各行各业获得了深度应用,极大地便利了人们的工作和生活。通常在程序发布后,为了满足各方面的需求,开发者会继续开发更多不同的新版本,以便不断完善程序的各种功能,并修复程序可能存在的缺陷。而为了避免不同版本程序的反复卸载、安装,针对已经安装的旧版本程序常常通过程序升级方式快速获得新版本程序。
[0003] 目前,在对程序升级时通常需要中断任务的处理,在完成程序升级后进行程序重启,通过升级后的程序继续处理相应任务,以提供程序服务,但目前程序升级处理中的程序服务中断时间长,对程序运行干扰较大。

发明内容

[0004] 基于此,有必要针对上述技术问题,提供一种能够降低中断时长,减少针对程序运行干扰的程序升级方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
[0005] 第一方面,本申请提供了一种程序升级方法。所述方法包括:
[0006] 在待升级程序的主进程运行的过程中,对待升级程序进行升级,获得升级后的程序;主进程通过第一命令通道获取针对待升级程序的命令;
[0007] 启动升级后的程序的从进程;从进程支持通过第二命令通道获取针对升级后的程序的命令;
[0008] 指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令;
[0009] 当主进程结束对已获得命令的清空处理,切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。
[0010] 第二方面,本申请还提供了一种程序升级装置。所述装置包括:
[0011] 升级程序确定模块,用于在待升级程序的主进程运行的过程中,对待升级程序进行升级,获得升级后的程序;主进程通过第一命令通道获取针对待升级程序的命令;
[0012] 从进程启动模块,用于启动升级后的程序的从进程;从进程支持通过第二命令通道获取针对升级后的程序的命令;
[0013] 指示模块,用于指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令;
[0014] 切换模块,用于当主进程结束对已获得命令的清空处理,切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。
[0015] 第三方面,本申请还提供了一种计算机设备。计算机设备包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述程序升级方法的步骤。
[0016] 第四方面,本申请还提供了一种计算机可读存储介质。计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述程序升级方法的步骤。
[0017] 第五方面,本申请还提供了一种计算机程序产品。计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述程序升级方法的步骤。
[0018] 上述程序升级方法、装置、计算机设备、存储介质和计算机程序产品,在待升级程序的主进程运行的过程中,对待升级程序进行升级,获得升级后的程序,主进程通过第一命令通道获取针对待升级程序的命令,启动升级后的程序的从进程,从进程支持通过第二命令通道获取针对升级后的程序的命令,指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令,当主进程结束对已获得命令的清空处理,切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。在程序升级时,在主程序运行的过程中,对待升级程序进行升级,并启动升级后的程序的从进程,并通知主进程停止从第一命令通道获取命令,清空主进程从第一命令通道已获得的命令,当主进程结束对已获得的命令的处理的情况下,可以直接切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。在主进程结束对已获得命令的清空处理时,只需进行切换处理,即可由从进程接替主进程执行命令的工作,由从进程获取并处理针对升级后的程序的命令,不需要等待升级后程序的长时间重启,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。

附图说明

[0019] 图1为一个实施例中程序升级方法的应用环境图;
[0020] 图2为一个实施例中程序升级方法的流程示意图;
[0021] 图3为一个实施例中程序升级方法的时序图;
[0022] 图4为一个实施例中程序升级方法的流程框图;
[0023] 图5为另一个实施例中程序升级方法的流程框图;
[0024] 图6为一个实施例中建立进程间通信连接的步骤示意图;
[0025] 图7为传统技术中的程序升级时序图;
[0026] 图8为另一个实施例中程序升级方法的时序图;
[0027] 图9为一个实施例中进程间信息交互时序图;
[0028] 图10为一个实施例中程序升级方法的架构示意图;
[0029] 图11为一个实施例中程序升级装置的结构框图;
[0030] 图12为一个实施例中计算机设备的内部结构图。

具体实施方式

[0031] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0032] 本申请实施例提供的程序升级方法,可以应用于如图1所示的应用环境中。其中,图1所述的应用环境中包括第一硬件设备102、第二硬件设备104、第三硬件设备106以及网络磁盘108。其中,第一硬件设备102可以是触发产生计算机任务的设备,即计算机任务可以是由第一硬件设备102生成,并发送至第二硬件设备104处理,计算机任务具体可以是由在第一硬件设备102上虚拟出的虚拟机生成,并基于虚拟机发送至第二硬件设备104。第二硬件设备104可以获取第一硬件设备102产生的计算机任务,并将获得的计算机任务发送至第三硬件设备106处理,第二硬件设备104可以为包括硬件接口的设备,从而可以实现计算机任务下发处理。其中,第三硬件设备106可以是能够运行实时程序的处理器,第三硬件设备106具体可以为通过运行的实时程序执行指令集架构的硬件平台。其中,第二硬件设备104和第三硬件设备106可以为两个独立的硬件处理设备,第二硬件设备104和第三硬件设备
106也可以集成为智能网卡,智能网卡可以与计算机设备连接,从而协助计算机设备处理计算机任务。其中,第三硬件设备106可以解析获取的计算机任务,确定计算机任务所对应的网络磁盘108,并生成对网络磁盘108的访问请求,向该网络磁盘108所在的网络磁盘服务器发送任务处理请求,由网络磁盘108所在的网络磁盘服务器对计算机任务进行处理后,获得计算机任务的处理结果。其中,计算机任务具体可以是数据输入输出任务,具体可以通过第三硬件设备106上的程序实现,如可以将数据写入网络磁盘108,或者从网络磁盘108中获取所需的数据。
[0033] 在具体实现程序升级的过程中,在待升级程序的主进程在第三硬件设备106上运行时,为了满足各方面的需求,可以触发程序升级流程,以对待升级程序进行升级,从而完善程序的各种功能,并修复程序可能存在的缺陷等。在程序升级过程中,第三硬件设备106可以对待升级程序进行升级,获得升级后的程序,升级后的程序相对于待升级程序,可以满足各方面的需求,更好的提供服务,运行在第三硬件设备106上的主进程通过第二硬件设备104上的第一命令通道获取针对待升级程序的命令,在第三硬件设备106上启动升级后的程序的从进程,运行在第三硬件设备106上的从进程支持通过第二硬件设备104上的第二命令通道获取针对升级后的程序的命令,指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令,当主进程结束对已获得命令的清空处理,切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。
[0034] 其中,第一硬件设备102、第二硬件设备104、第三硬件设备106以及网络磁盘108之间可以依次通过网络进行通信,各硬件设备可以包括计算机设备,计算机设备可以包括服务器和终端,硬件设备还可以包括各种可编程器件,如可编程逻辑阵列(Programmable Logic Array,PAL)、可编程数组逻辑器件(Complex ProgrammableLogic Device,CPLD)、现场可编程门阵列(Field Programmable Gate Array,FPGA)等。其中,终端可以但不限于是各种台式计算机、笔记本电脑、智能手机、平板电脑、物联网设备、便携式可穿戴设备智能语音交互设备、智能家电、车载终端等。物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接。
[0035] 其中涉及的云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
[0036] 具体来说,云计算(cloud computing)指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。云计算是网格计算(Grid Computing )、分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。随着互联网、实时数据流、连接设备多样化的发展,以及搜索服务、社会网络、移动商务和开放协作等需求的推动,云计算迅速发展起来。不同于以往的并行分布式计算,云计算的产生从理念上将推动整个互联网模式、企业管理模式发生革命性的变革。
[0037] 云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统 (以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(ID,ID entity) 等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(RAID,Redundant Array of Independent Disk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。本发明实施例可应用于云技术、人工智能、智慧交通、辅助驾驶等各[0038] 种场景。
[0039] 在一个实施例中,如图2所示,提供了一种程序升级方法,以该方法应用于图1中第三硬件设备106为例进行说明,第三硬件设备可以是计算机设备,具体可以包括终端或服务器,包括以下步骤:
[0040] 步骤202,在待升级程序的主进程运行的过程中,对待升级程序进行升级,获得升级后的程序;主进程通过第一命令通道获取针对待升级程序的命令。
[0041] 其中,待升级程序可以是需要升级的程序,在需要对程序进行优化时,可以触发程序升级,以对待升级程序进行升级。对待升级程序进行升级可以包括两个过程,两个过程具体包括对待升级程序的程序代码文件进行升级以及对程序的服务升级,当两个过程均完成时,则确定完成了本次程序的升级。其中,在对程序代码文件进行升级时,可以是在待升级的程序代码文件的基础上进行代码更新,引入新功能、进行漏洞修复、功能优化等处理,获得升级后的程序,使得升级后的程序可以满足各方面的需求。其中,针对程序的服务升级可以是通过运行升级后的程序,使得运行的升级后的程序可以提供更新后的业务服务,从而完成程序的服务升级。
[0042] 其中,程序可以是静态概念,程序可以包括用于解决相关问题以实现相应功能的指令以及相关的数据集合,程序具体可以为存放在硬盘中的文件。其中,针对程序所要实现的功能不同,程序的类型以及所包括的内容也会存在不同,例如,程序可以包括驱动程序、SPDK(Storage Performance Development Kit,存储开发套件)等实现各种功能的程序。SPDK程序可以为一种支持网络磁盘的程序,SPDK程序可以把命令基于网络磁盘转发至网络端执行,从而支持类似热迁移等丰富的功能。进程可以是对应于程序的动态概念,进程具体可以对应程序的执行过程。对于一个可执行的程序,可以通过运行该程序,启动其对应的进程,从而可以通过启动的进程实现程序所要提供的服务。如针对待升级程序,可以运行待升级程序启动主进程,通过主进程可以执行针对待升级程序的命令。其中,主进程可以为内存中针对待升级程序运行的进程,即通过运行的主进程实现待升级程序的程序功能。
[0043] 命令可以是为了完成某种特定任务而下发的指示,特定任务可以包括计算任务、资源转移任务等各类计算机任务,具体是实现程序功能的任务。例如,对于计算任务,命令可以是基于待升级程序进行数据运算的命令,如可以包括针对图像进行渲染计算的命令;又如,对于资源转移任务,命令具体可以包括I/O(IN/OUT,输入/输出)命令,其中,IN命令是指输入指令,OUT命令是指输出指令,IN命令的功能是允许从I/O端口读数据到其他的硬件设备中,OUT命令的功能是允许将其他硬件设备中的数据写到I/O端口中。在硬件设备或者虚拟机需要完成计算机任务时,硬件设备或者虚拟机可以生成针对待升级程序的命令。
[0044] 第一命令通道可以是用于传输针对待升级程序的命令的通道,第一命令通道具体可以为集成在硬件设备上的硬件接口,硬件设备可以包括单片机、FPGA或者DSP(Digital Signal Processing,数字信号处理器)等各类可以应用于不同场景下的硬件。其中,第一命令通道可以包括有对应的第一通道标识信息,通道标识信息可以用于区分出不同的命令通道,通过第一通道标识信息即可确定第一命令通道所处的位置,从而使得硬件设备或者虚拟机产生的针对待升级程序的命令可以被正确地路由到第一命令通道,保证了网络的正常运行。例如,当硬件设备或者虚拟机产生针对待升级程序的命令时,可以按照第一命令通道的第一通道标识信息,将针对待升级程序的命令路由至第一命令通道,主进程直接从第一命令通道中获取针对待升级程序的命令。
[0045] 具体地,服务器在运行待升级程序时可以启动主进程,以通过主进程实现待升级程序的程序功能,在待升级程序的主进程运行时,服务器可以对待升级程序进行升级,即对待升级程序的代码文件进行升级,获得升级后的程序。其中,主进程在运行时可以通过第一命令通道获取针对待升级程序的命令并执行,主进程在从第一命令通道获取针对待升级程序的命令时,可以通过轮询的方式进行获取,即由主进程按照设定的时间向第一命令通道发出询问,询问是否存在需要处理的命令,有即给予服务。在具体实施时,在主进程运行的过程中,服务器可以触发升级流程,在升级流程中,服务器可以对当前的待升级程序进行更新,获得升级后的程序。在对当前的待升级程序的程序代码文件进行更新的过程中,当硬件设备或者虚拟机产生针对待升级程序的命令时,可以基于第一通道标识信息确定第一命令通道,例如,第一通道标识信息可以包括MAC地址(Media Access Control Address,介质访问地址),通过MAC地址,使得硬件设备或者虚拟机产生的针对待升级程序的命令可以被正确地路由到第一命令通道,待升级程序的主进程同时可以从第一命令通道中获取针对待升级程序的命令,并对命令进行处理,以实现待升级程序的程序功能。
[0046] 步骤204,启动升级后的程序的从进程;从进程支持通过第二命令通道获取针对升级后的程序的命令。
[0047] 其中,升级后的程序为更新了程序代码文件的程序。从进程是运行更新了的程序代码文件的程序得到的。主进程与从进程的主从关系,是相对于程序而言的,待升级程序和升级后的程序属于同一程序的版本,对于在先运行的待升级程序的进程,作为该程序的主进程;对于在后运行的升级后的程序的进程作为该程序的从进程。从进程是在主进程之后启动的新进程,当启动程序的进程时,若在内存中存在该程序其他的进程,则可以确定该进程为该程序的从进程。第二命令通道可以是用于传输针对升级后的程序的命令通道,第二命令通道也可以为集成在硬件设备上的硬件接口。对于第二命令通道,第二命令通道可以包括有对应的第二通道标识信息,第二通道标识信息可以是用于对第二命令通道进行标识的信息,通过第二通道标识信息,可以确定第二命令通道。其中,通过针对第一命令通道和第二命令通道,设置不同的通道标识信息,可以避免将针对待升级程序的命令路由至第二命令通道,以及避免将针对升级后的程序的命令路由至第一命令通道。例如,当硬件设备或者虚拟机产生针对升级后的程序的命令时,可以基于第二命令通道的第二通道标识信息,将针对升级后的程序的命令发送至第二命令通道,从进程直接从第二命令通道中即可获取针对升级后的程序的命令。
[0048] 具体地,服务器可以运行升级后的程序,以启动从进程,从进程在运行时,可以通过第二命令通道获取针对升级后的程序的命令并执行。在具体实施时,当硬件设备或者虚拟机产生针对升级后的程序的命令时,可以基于第二通道标识信息确定第二命令通道,例如,第二通道标识信息可以包括MAC地址,通过MAC地址,使得硬件设备或者虚拟机产生的针对升级后的程序的命令可以被正确地路由到第二命令通道,升级后的程序的从进程可以从第二命令通道中获取针对升级后的程序的命令,并对命令进行处理。
[0049] 步骤206,指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令。
[0050] 其中,主进程停止从第一命令通道获取命令可以是主进程不再从第一命令通道获取命令。其中,清空已获得的命令可以是主进程需要处理完已经从第一命令通道获得的针对待升级程序的命令。在对命令进行处理时,具体可以包括对命令解析,确定命令所携带的参数,并对携带的参数进行分析,确定命令所需要执行的操作,并针对进行执行处理以实现相应的程序功能。
[0051] 具体地,服务器可以指示主进程停止从第一命令通道获取命令,具体可以通过从进程指示主进程停止从第一命令通道获取命令,并指示主进程继续针对已经从第一命令通道获得的针对待升级程序的命令进行处理。在具体实施时,服务器在通过从进程指示主进程停止命令获取并清空命令前,可以预先建立主进程和从进程之间的通信连接,使得从进程可以基于通信连接发送指示至主进程,主进程基于从进程的指示停止命令的获取,并针对已接收的命令进行清空。例如,若主进程从第一命令通道获得的命令包括命令1、命令2以及命令3,主进程可以分别针对命令1、命令2以及命令3进行处理,直至命令1、命令2以及命令3均被处理完。在处理每个命令时,主进程可以分别确定每个命令的命令信息,命令信息中可以包括命令所需要完成的任务,并根据命令所需要完成的任务所对应的类型,将命令分配给对应的处理器,由处理器针对性的对命令进行处理,可以确保命令处理的精确度。对于涉及存储空间访问的命令,主进程也可以根据命令信息确定命令对应的存储空间,生成命令针对存储空间的访问请求等。
[0052] 步骤208,当主进程结束对已获得命令的清空处理,切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。
[0053] 具体地,当主进程结束对已获得的命令的清空处理,即主进程已经将从第一命令通道获取的针对待升级程序的命令处理完之后,服务器可以直接切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并由从进程执行所获得的命令,通过切换处理以使从进程接替主进程执行针对程序的命令,至此完成针对程序的服务升级,可以等待下一次的升级处理。通过在主进程清空命令后直接切换由从进程获取并处理针对升级后的程序的命令,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0054] 在一个具体应用中,如图3所示,为针对程序进行升级处理的时序图。其中,主进程可以为在服务器上运行的待升级程序的进程,从进程可以是在服务器上运行的升级后的程序的进程。第一命令通道和第二命令通道可以是独立于服务器的硬件设备上集成的硬件接口,第一命令通道与主进程关联,第二命令通道与从进程关联。
[0055] 具体地,服务器可以在运行待升级程序时启动主进程,在主进程的运行过程中,主进程可以从第一命令通道中获取针对待升级程序的命令,并对命令进行处理。其中,第一命令通道中传输的针对待升级程序的命令,可以是在硬件设备或者虚拟机产生针对待升级程序的命令后,基于第一命令通道的MAC地址路由到第一命令通道中的。主进程运行过程中,若需要对程序进行优化,可以触发程序升级,以对待升级程序进行升级,即对待升级程序的程序代码文件进行升级,从而引入新功能、进行漏洞修复、功能优化等,获得升级后的程序,使得升级后的程序可以满足各方面的需求。服务器可以进一步运行升级后的程序,具体可以启动从进程,在从进程启动之后,从进程可以进行初始化处理,并在完成初始化时,与主进程建立通信连接。
[0056] 从进程可以通过建立的通信连接发送指示信息至主进程,主进程在接收到指示信息之后,会按照指示信息,继续执行已从第一命令通道获取的针对待升级程序的命令,即主进程会清空已经从第一命令通道获得的针对待升级程序的命令,并不再从第一命令通道获取命令。
[0057] 在主进程已经将从第一命令通道获取的针对待升级程序的命令处理完成之后,主进程可以通过通信连接发送通知至从进程,告知从进程已处理完针对待升级程序的命令。当从进程接收到主进程发送的通知时,可以直接切换成通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令,在从进程开始对从第二命令通道获取的针对升级后的程序进行处理时,完成程序的服务升级,至此程序的程序代码文件升级和程序的服务升级均完成,表示已经完成了本次的程序升级,可以等待下一次的升级流程。通过在主进程清空命令后直接切换由从进程获取并处理针对升级后的程序的命令,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0058] 在一个实施例中,如图4所示,为程序升级方法的流程框图。其中,图4中的流程框图中包括硬件设备、主进程、从进程以及网络磁盘。硬件设备可以包括各种可编程器件,可编程器件具体可以为FPGA。FPGA中预留有两个硬件的命令输入通道,即两个命令输入区,分别为A区和B区。其中,主进程可以从A区中获取针对待升级程序的命令,从进程可以从B区获取针对升级后的程序的命令。其中,待升级程序可以为SPDK程序,A区可以向SPDK程序发送输入输出命令供SPDK程序执行,并能处理SPDK程序反馈的命令执行情况的请求,B区可以向升级后的SPDK程序发送输入输出命令供升级后的SPDK程序执行,并能处理升级后的SPDK程序反馈的命令执行情况的请求。其中,SPDK程序是在与FPGA连接的服务器上运行的,服务器在运行待升级的SPDK程序时可以启动SPDK主进程。
[0059] 其中,A区和B区都可以接收由虚拟机路由的输入输出命令,即IO命令。当不涉及到程序升级时,SPDK从进程不会启动,B区也处于等待初始化状态。服务器在运行SPDK程序时,启动SPDK主进程,SPDK主进程可以对A区进行初始化,以及对SPDK主进程关联的网络磁盘进行初始化。初始化完成后,SPDK主进程可以轮询A区,以从A区中获取针对SPDK程序的IO命令。SPDK主进程获取针对SPDK程序的IO命令后,会对IO命令的头部进行剥离,并解析IO命令,以确认IO命令的命令参数,SPDK主进程会根据确定的命令参数选取对应的网络磁盘,生成对该网络磁盘的IO访问请求,并向该网络磁盘所在的网络磁盘服务器发送该请求,以实现相应的程序功能。
[0060] 在一个实施例中,如图5所示,为程序升级方法的流程框图。其中,图5中的流程框图中可以涉及到的硬件设备、服务器上运行的程序可以与图4中相同。当触发程序升级时,服务器可以运行升级后的SPDK程序,启动SPDK从进程,SPDK从进程可以对B区进行初始化,以及对SPDK从进程关联的网络磁盘进行初始化。初始化完成后,SPDK从进程指示SPDK主进程停止从A区获取命令,并指示SPDK主进程清空从A区已获得的命令。当SPDK主进程结束对已获得命令的清空处理时,切换成由SPDK从进程通过B区获取针对升级后的SPDK程序的命令。SPDK从进程获取了针对升级后的SPDK程序的IO命令后,会对IO命令的头部进行剥离,并解析IO命令,以确认IO命令的命令参数,SPDK从进程会根据确定出的命令参数选取对应的网络磁盘,生成对该网络磁盘的IO访问请求,并向该磁盘所在的网络磁盘服务器发送该请求,以实现相应的程序功能。
[0061] 上述程序升级方法中,在待升级程序的主进程运行的过程中,对待升级程序进行升级,获得升级后的程序,主进程通过第一命令通道获取针对待升级程序的命令,启动升级后的程序的从进程,从进程支持通过第二命令通道获取针对升级后的程序的命令,指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令,当主进程结束对已获得命令的清空处理,切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。在程序升级时,在主程序运行的过程中,对待升级程序进行升级,并启动升级后的程序的从进程,并通知主进程停止从第一命令通道获取命令,清空主进程从第一命令通道已获得的命令,当主进程结束对已获得的命令的处理的情况下,可以直接切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。在主进程结束对已获得命令的清空处理时,只需进行切换处理,即可由从进程接替主进程执行命令的工作,由从进程获取并处理针对升级后的程序的命令,不需要等待升级后程序的长时间重启,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0062] 在一个实施例中,指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令,包括:建立从进程和主进程之间的进程间通信连接;当进程间通信连接为连接成功,通过从进程指示主进程停止从第一命令通道获取命令,并指示主进程继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。
[0063] 其中,进程间通信是指在不同进程间传播或交换信息,进程间通信连接则是可以实现不同进程之间传播或交换信息的连接方式,通过建立从进程与主进程之间的进程间通信连接,可以使得从进程和主进程之间能够相互传递、交换信息。其中,进程间通信连接可以是基于进程间通信方式建立的,进程间通信方式可以包括管道,如无名管道和命名管道,还可以包括消息队列、信号量、共享内存、Socket(套接字)等。其中,消息队列是一种基于消息的进程间通信方式,通过消息队列可以进行异步通信,消息队列具有缓存机制,可以减少进程之间的频繁通信,同时也可以避免数据丢失的问题。共享内存通信是一种高效的进程间通信方式,可以将同一块物理内存映射到多个进程的虚拟地址空间中,实现多个进程之间的数据共享。信号量通信是通过信号量的操作实现对资源的加锁和解锁,可以避免多个进程同时访问共享资源的问题。套接字通信是一种利用网络协议交换数据的机制,不同的进程之间可以通过套接字中的相关函数来完成通信过程。
[0064] 具体地,服务器可以建立从进程与主进程之间的进程间通信连接,当从进程与主进程之间可以进行信息交互时,表示主进程和从进程之间通信连接成功。若主进程和从进程之间通信连接成功,服务器可以通过从进程,指示主进程停止从第一命令通道获取命令,即指示主进程不再轮询第一命令通道;服务器同时通过从进程指示主进程继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。在具体实施时,服务器在建立从进程与主进程之间的通信连接时,可以结合进程间的通信效率需求、通信安全角度等,从消息队列、信号量、共享内存、Socket中选取任意一种进程间通信方式建立主进程与从进程之间的进程间通信连接。例如,服务器可以基于消息队列建立主进程和从进程之间的进程间通信连接,消息队列具体可以是消息队列函数创建的,通过消息队列函数可以指定消息队列的特征,如定义消息队列的关键字、指定消息队列的大小、编码字符集标识等。
[0065] 本实施例中,服务器通过建立从进程与主进程之间的通信连接,使得在进程间通信连接为连接成功时,从进程可以基于进程间通信连接,指示主进程的工作。通过进程间通信连接,使得从进程和主进程之间可以通过信息交互,使得主进程和从进程可以分别及时的处理相关指示,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0066] 在一个实施例中,如图6所示,针对主进程的调度处理,即指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令包括:
[0067] 步骤602,确定由主进程创建的进程间通信接口,并基于进程间通信接口建立从进程和主进程之间的进程间通信连接。
[0068] 其中,进程间通信接口可以是指用于在主进程与从进程之间进行通信的接口,进程间通信接口可以提供一种标准的通信方式,使得主进程和从进程之间能够进行信息交换。进程间通信接口具体可以包括Socket通信接口,通过Socket通信接口可以提供Unix domain Socket(Unix域套接字)服务,Unix domain Socket服务可以使主进程和从进程能够建立通信连接。
[0069] 具体地,服务器可以确定由主进程创建的进程间通信接口,并基于进程间通信接口,建立从进程与主进程之间的通信连接。其中,进程间通信接口可以是由主进程创建的,在主进程启动以及完成初始化之后,主进程即可创建进程间通信接口,进程间通信接口也可以是触发程序升级时由主进程创建的,使得从进程在启动后可以通过主进程建立的进程间通信接口,与主进程建立进程间通信连接。在一个具体应用中,主进程创建的进程间通信接口可以为Socket通信接口,主进程在创建Socket通信接口时,可以创建一个套接字并绑定到一个指定的端口上,该指定的端口可以用于建立新的连接。在从进程启动之后,从进程可以向指定的端口发送连接请求,并与指定的端口建立连接,从而建立主进程和从进程之间的进程间通信连接。
[0070] 步骤604,当进程间通信连接为连接成功,通过从进程基于进程间通信接口向主进程发送清空命令;清空命令,用于指示主进程停止从第一命令通道获取命令,并指示主进程继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。
[0071] 其中,清空命令是由从进程通过进程间通信接口发送至主进程的,具体可以在进程间通信连接为连接成功时,由从进程基于进程间通信接口向主进程发送清空命令,清空命令用于指示主进程停止从第一命令通道获取命令,即指示主进程不再轮询第一命令通道,同时指示主进程处理完已经获得命令。在具体实施时,主进程在对已经获取的命令进行处理时,可以按照命令获取的时间顺序依次处理,直至处理完所有的命令。如当命令包括命令1、命令2以及命令3时,主进程可以按照获取的时间顺序处理各命令,若命令1的获取时间先于命令2,命令2的获取时间先于命令3,则主进程可以先处理命令1,再处理命令2,最后处理命令3,直至命令1、命令2以及命令3均执行完成。主进程也可以按照各命令的优先级执行命令,从而优先执行优先级高的命令,提升用户体验。例如,在命令2的优先级高于命令3的优先级,命令3的优先级高于命令1的优先级时,主进程可以先执行命令2,再执行命令3,最后执行命令1,直至命令1、命令2以及命令3均执行完成。
[0072] 本实施例中,服务器确定由主进程创建的进程间通信接口,从进程可以基于主进程创建的进程间通信接口,向主进程发送清空命令,以指示主进程停止从第一命令通道获取命令,同时主进程处理完已经获得命令。通过进程间通信接口,使得从进程和主进程之间可以通过进程间通信接口高效的进行信息交互,一定程度上提升了程序升级的效率。
[0073] 在一个实施例中,程序升级方法还包括:当启动主进程,通过主进程创建进程间通信接口;当主进程基于进程间通信接口接收到清空命令,确定针对待升级程序进行命令下发的命令下发端;通过主进程指示命令下发端停止通过第一命令通道进行命令下发,并通过主进程继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。
[0074] 其中,当运行程序得到一个进程后,会先判断运行该程序启动的进程是否为主进程,若是主进程,才会执行后续操作,后续操作可以包括进行初始化处理、创建进程间通信接口等。命令下发端可以为任意具有信息处理能力,可以实现信息交互的硬件设备,例如,命令下发端可以包括单片机、FPGA、DSP等,命令下发端可以集成有第一命令通道,可以用于通过第一命令通道发送针对待升级程序的命令。
[0075] 具体地,服务器在确定主进程启动时,可以通过主进程创建进程间通信接口,从进程可以基于主进程创建的进程间通信接口与主进程建立进程间通信连接,在主进程接收到由从进程发送的清空命令时,服务器可以确定针对待升级程序进行命令下发的命令下发端,指示命令下发端停止通过第一命令通道向主进程发送针对待升级程序的命令,并通过主进程继续执行从第一命令通道已获得的命令,直至主进程执行完已从第一命令通道获得的命令。其中,主进程在指示命令下发端停止通过第一命令通道进行命令下发时,可以通过调用命令下发端提供的功能函数,基于功能函数指示命令下发端停止通过第一命令通道向主进程发送针对待升级程序的命令;也可以是主进程直接发送控制指令至命令下发端,通过控制指令指示命令下发端不再通过第一命令通道进行命令下发等。
[0076] 在一个实施例中,服务器在判断当前启动的进程是否为主进程时,可以在启动一个进程之后,通过当前启动的进程尝试连接进程间通信接口,若连接失败,则可以确定当前启动的进程为主进程;也可以通过识别当前启动的进程的进程标识信息进行判断,若基于当前启动的进程的进程标识信息确定其标识信息属于预先设定的主进程标识,则可以确定当前启动的进程为主进程;还可以通过判断当前启动的进程的进程运行时间进行判断,在当前启动的进程的进程运行时间未达到设定的进程运行时间阈值,则可以判断当前启动的进程为主进程。在具体设定进程判定方式时,可以结合所要达到的程序升级效率、服务器的计算资源等综合设定。
[0077] 本实施例中,当启动主进程时,由主进程创建进程间通信接口。若主进程基于进程间通信接口接收到清空命令,主进程可以指示命令下发端不再通过第一命令通道进行命令下发,并继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。通过主进程创建的进程间通信接口与从进程连接,进而主进程基于从进程的指示,指示命令下发端不再进行命令下发,以及处理完已接收的命令,避免了在切换处理之后还需要处理针对待升级程序的命令,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0078] 在一个实施例中,当主进程结束对已获得命令的清空处理,切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令,包括:当通过从进程确定主进程结束对已获得命令的清空处理,通过从进程将命令获取通道从第一命令通道切换成第二命令通道;通过从进程从第二命令通道获取针对升级后的程序的命令,并通过从进程执行所获得的命令。
[0079] 其中,命令获取通道可以是指用于接收外部设备或虚拟机发送的命令的通道,命令获取通道可以包括第一命令通道和第二命令通道。针对待升级程序的命令可以是外部设备或者虚拟机发送至第一命令通道的,针对升级后的程序的命令可以是由外部设备或者虚拟机发送至第二命令通道的。
[0080] 具体地,当主进程结束对已获得命令的清空处理时,即主进程已经执行完了每一个从第一命令通道获取的命令,则可以触发命令获取通道的切换处理,服务器可以通过从进程将命令获取通道从第一命令通道切换成第二命令通道,从而使得从进程可以从第二命令通道获取针对升级后的程序的命令,并处理针对升级后的程序的命令,以完成针对程序的服务升级。在一个实施例中,从进程在将命令获取通道从第一命令通道切换成第二命令通道时,可以直接调用命令下发端提供的切换功能函数,即基于命令下发端提供的命令接收切换的功能,将命令获取通道从第一命令通道切换成第二命令通道。
[0081] 本实施例中,当主进程已经执行完了每一个从第一命令通道获取的命令时,触发命令获取通道的切换处理,通过从进程将命令获取通道从第一命令通道切换成第二命令通道,使得从进程可以从第二命令通道获取针对升级后的程序的命令,只需进行切换处理,即可由从进程接替主进程执行命令的工作,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0082] 在一个实施例中,当通过从进程确定主进程结束对已获得命令的清空处理,通过从进程将命令获取通道从第一命令通道切换成第二命令通道,包括:当从进程基于进程间通信接口获得清空结束通知消息,通过从进程将命令获取通道从第一命令通道切换成第二命令通道;其中,清空结束通知消息,是主进程在结束对已获得命令的清空处理的情况下基于进程间通信接口向从进程发送的;进程间通信接口,用于建立从进程和主进程之间的进程间通信连接。
[0083] 其中,消息是指通信系统传输的对象,是信息的载体。消息可以包括多种类型,如,符号、文字、数据、图片等。清空结束通知消息是主进程在处理完已获得的命令时发送给从进程的,清空结束通知消息可以用于通知从进程,主进程已经执行完针对待升级程序的命令。例如,主进程可以基于进程间通信接口,通过发送特定符号的形式向从进程发送清空结束通知消息,当从进程接收到主进程发送的特定符号时,进行命令获取通道的切换。
[0084] 具体地,当从进程接收到主进程在结束对已获得的命令的清空处理的情况下,基于进程间通信接口获得的清空结束通知消息,可以触发命令获取通道的切换,即将命令获取通道从第一命令通道切换成第二命令通道。在具体实施时,若清空结束通知消息为数字的形式,则当从进程接收到数字0时,表示获得清空结束通知消息;若清空结束通知消息为字母的形式,则当从进程接收到字母A时,表示获得清空结束通知消息。
[0085] 本实施例中,主进程结束对已获得命令的清空处理时发送清空结束通知消息至从进程,当从进程接收到清空结束通知消息时进行切换处理,即可由从进程接替主进程执行命令的工作,由从进程获取并处理针对升级后的程序的命令,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0086] 在一个实施例中,程序升级方法还包括:当命令获取通道成功切换成第二命令通道,通过从进程基于进程间通信接口向主进程发送退出命令;退出命令用于指示主进程结束运行。
[0087] 具体地,退出命令是指用于指示主进程结束运行的命令。当服务器上运行的从进程确定命令获取通道已经从第一命令通道切换成第二命令通道时,可以生成退出命令,并基于进程间通信接口向主进程发送退出命令,主进程在接收到退出命令之后终止执行并退出。
[0088] 本实施例中,在命令获取通道已经从第一命令通道切换成第二命令通道,从进程通过向主进程发送退出命令,主进程基于接收到的退出命令退出,可以释放内存资源,提升服务器的性能。
[0089] 在一个实施例中,通过从进程将命令获取通道从第一命令通道切换成第二命令通道,包括:确定通过命令获取通道进行命令下发的命令下发端;第一命令通道包括命令下发端的第一命令接口;第二命令通道包括命令下发端的第二命令接口;通过从进程将命令下发端的命令接口从第一命令接口切换成第二命令接口。
[0090] 其中,命令下发端是指通过命令获取通道进行命令下发的硬件设备。第一命令通道包括第一命令接口,第二命令通道包括第二命令接口。第一命令接口和第二命令接口均是指用于传输命令下发端发送的命令的接口,第一命令接口为传输针对待升级程序的命令的接口,第二命令接口为传输针对已升级的程序的命令的接口。其中,主进程是通过第一命令通道获取针对待升级程序的命令的,从进程是通过第二命令通道获取针对升级后的程序的命令的,为了使得可以通过升级后的程序提供服务,完成程序的服务升级,需要将命令下发端的命令接口从第一命令接口切换成第二命令接口,使得命令下发端可以通过第二命令通道包括的第二命令接口发送命令。
[0091] 具体地,服务器可以确定通过命令获取通道进行命令下发的命令下发端,通过从进程将命令下发端的命令接口从第一命令接口切换成第二命令接口。在将命令获取通道从第一命令通道切换成第二命令通道的过程中,实质上是命令接口的切换,即将第一命令接口切换程第二命令接口。当主进程处理完已经获得的命令时,则可以通过从进程实现命令接口的切换。
[0092] 本实施例中,在命令下发端当前是通过第一命令通道包括的第一命令接口发送命令的情况下,通过命令接口的切换,将命令下发端的命令接口从第一命令接口切换成第二命令接口,使得命令下发端可以通过第二命令通道包括的第二命令接口发送命令,从而从进程可以通过第二命令通道获取针对升级后的程序的命令,并执行命令。由从进程获取并处理针对升级后的程序的命令,不需要等待升级后程序的长时间重启,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0093] 在一个实施例中,通过从进程执行所获得的命令,包括:通过从进程针对所获得的待执行命令进行解析,获得与待执行命令关联的命令参数;通过从进程按照命令参数执行待执行命令。
[0094] 其中,解析是指对待执行命令相关的参数进行分析提取的过程,命令参数是用于描述待执行命令的属性的参数,命令参数具体可以包括待执行命令的命令类型、待执行命令要执行的内容、待执行命令所要发送的存储空间等。
[0095] 具体地,服务器上运行的从进程获取待执行命令,对待执行命令进行解析,确定待执行命令对应的命令参数,并按照命令参数执行待执行命令。在一个具体应用中,从进程在执行所获得的待执行命令时,可以对所获得的待执行命令进行解析,并解析得到与待执行命令关联的命令参数,命令参数可以是与命令所要发送的存储空间相关的参数,从进程可以基于命令参数,确定待执行命令对应的存储空间,生成针对存储空间的访问请求,并向该存储空间所在的服务器发送请求。
[0096] 本实施例中,从进程在执行所获得的待执行命令时,可以对所获得的待执行命令进行解析,并解析得到与待执行命令关联的命令参数,并基于命令参数,对待执行命令进行处理。
[0097] 在一个实施例中,启动升级后的程序的从进程,包括:基于升级后的程序启动从进程;确定针对升级后的程序的第二命令通道,并对第二命令通道进行通道初始化;对从进程关联的数据存储空间进行存储初始化;其中,从进程支持基于存储初始化后的数据存储空间,执行从通道初始化后的第二命令通道获得的针对升级后的程序的命令。
[0098] 其中,通道初始化可以是建立第二命令通道的运行环境,使得第二命令通道可以处于准备工作状态,即第二命令通道可以传输针对升级后的程序的命令。数据存储空间可以是数据存储区域,即数据的存储空间,具体可以包括网络磁盘,存储初始化可以是初始化网络磁盘,使得与从进程关联的网络磁盘可以与外部建立连接,能够支持外部的读写操作。其中,从进程的初始化处理所需要的时间与从进程所支持的网络磁盘的数量有关,网络磁盘的数量越多,初始化所占用的时间越多。
[0099] 具体地,服务器基于升级后的程序启动从进程,并对第二命令通道进行初始化处理,以及初始化从进程关联的数据存储空间,从进程可以基于存储初始化后的数据存储空间,执行从通道初始化后的第二命令通道获得的针对升级后的程序的命令。在具体应用时,服务器的从进程可以读取并解析第二命令通道的配置文件,获取第二命令通道的配置信息,根据第二命令通道的类型和型号,找到并加载对应的驱动程序,通过加载驱动程序进一步初始化第二命令通道的硬件,包括上电、初始化寄存器、设置工作模式等,完成第二命令通道的初始化。在进行存储初始化时,可以对数据存储空间进行分区以及格式化操作,使得数据存储空间可以进行读写操作,完成数据存储空间的初始化。
[0100] 本实施例中,服务器基于升级后的程序启动从进程,并对第二命令通道和从进程关联的数据存储空间进行初始化处理,初始化的过程是在主进程依然在处理针对待升级程序的命令时完成的,使得在切换成由从进程提供服务时,无需再进行初始化处理,即可直接通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令,由从进程获取并处理针对升级后的程序的命令,不需要等待升级后程序的长时间重启,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0101] 在一个实施例中,在待升级程序的主进程运行的过程中,对待升级程序进行升级,获得升级后的程序,包括:运行待升级程序的主进程;通过主进程从第一命令通道获取针对待升级程序的命令,并通过主进程执行所获得的命令;当触发针对待升级程序的升级,针对待升级程序的程序文件进行升级,获得升级后的程序。
[0102] 其中,服务器可以基于待升级程序启动主进程,在主进程运行之后,同样也涉及到主进程关联的数据存储空间的存储初始化以及命令获取通道的初始化过程。具体地,服务器可以运行待升级程序的主进程,通过主进程从第一命令通道获取针对待升级程序的命令,并通过主进程执行所获得的命令,当触发针对待升级程序的升级,针对待升级程序的程序文件进行升级,如可以在待升级程序的程序文件的基础上进行代码更新,引入新功能、进行漏洞修复、功能优化等处理,获得升级后的程序。在一个具体应用中,当启动主进程之后,会进行主进程的初始化处理,其中,在主进程的初始化处理过程中,包括了对主进程所对应的第一命令通道进行处理,使得第一命令通道可以传输命令;也包括了对主进程关联的数据存储空间的初始化处理,数据存储空间可以是数据存储区域,具体可以是网络磁盘,使得与主进程关联的网络磁盘可以与外部建立连接,能够支持外部的读写操作。其中,主进程的初始化处理所需要的时间与主进程所支持的网络磁盘的数量有关,网络磁盘的数量越多,初始化所占用的时间越多。通过主进程的初始化,使得主进程可以搭建好命令处理环境,从而在硬件设备或者虚拟机产生命令之后,可以直接基于搭建好的命令处理环境,展开命令的处理,提升了命令处理的效率和准确性。
[0103] 在一个实施例中,服务器上运行的主进程获取待执行命令,可以对待执行命令进行解析,确定待执行命令对应的命令参数,并按照命令参数执行待执行命令。主进程在执行所获得的待执行命令时,可以对所获得的待执行命令进行解析,并解析得到与待执行命令关联的命令参数,命令参数是与命令所要发送的存储空间相关的参数,主进程可以基于命令参数,确定待执行命令对应的存储空间,并生成针对存储空间的访问请求,并向该存储空间所在的服务器发送请求。
[0104] 本实施例中,通过可以运行待升级程序的主进程,并进行主进程的初始化,通过主进程从第一命令通道获取针对待升级程序的命令,并通过主进程执行所获得的命令,当触发针对待升级程序的升级时,针对待升级程序的程序文件进行升级,获得升级后的程序。使得在针对程序升级的过程中,主进程可以通过搭建好的命令处理环境进行针对待升级程序的命令的处理,降低了服务中断时长,减少了升级对程序运行的干扰。
[0105] 在一个实施例中,在切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令之后,程序升级方法还包括:通过从进程中断与主进程的通信连接,并创建针对下一次程序升级的下一进程间通信接口;其中,下一进程间通信接口,用于在针对升级后的程序触发进行下一次程序升级的情况下,将从进程作为下一次程序升级的主程序,并建立下一次程序升级的主程序与下一次程序升级的从程序之间的通信连接。
[0106] 其中,从进程中断与主进程的通信连接可以是指从进程断开与主进程的连接,即从进程和主进程不再通过主进程创建的进程间通信接口连接。在从进程执行从第二命令获得的通道所获得的命令之后,从进程可以中断与主进程的连接,从进程可以更新为新的主进程。下一次程序升级是指针对升级后的程序再一次进行升级,下一进程间通信接口为用于建立下一次程序升级的主程序与下一次程序升级的从程序之间的通信连接的接口,其中,从进程为下一次程序升级的主程序,下一次程序升级后启动的进程为从程序。
[0107] 具体地,从进程可以中断与主进程的通信连接,在从进程中断与主进程的通信连接时,从进程可以更新为新的主进程,从进程作为新的主进程,可以创建针对下一次程序升级的下一进程间通信接口,在针对升级后的程序触发进行下一次程序升级的情况下,从进程作为新的主进程,可以与下一次程序升级启动的从进程之间通过下一进程间通信接口进行通信连接。
[0108] 本实施例中,在从进程执行从第二命令获得的通道所获得的命令之后,从进程更新为新的主进程,并创建针对下一次程序升级的下一进程间通信接口,在针对升级后的程序触发进行下一次程序升级的情况下,从进程作为新的主进程,可以与下一次程序升级启动的从进程之间通过进程间通信接口通信连接。从而使得针对每一次的程序升级,均可以采用切换处理,即可由从进程接替主进程执行命令的工作,由从进程获取并处理针对升级后的程序的命令,不需要等待升级后程序的长时间重启,能够有效降低程序升级时程序服务的中断时长,减少了升级对程序运行的干扰。
[0109] 本申请还提供一种应用场景,该应用场景应用上述的程序升级方法。具体地,该程序升级在该应用场景的应用如下:
[0110] 随着计算机技术的发展,为了匹配日益增长的数据处理需求,常常需要对程序进行升级,以更好的为用户提供服务。其中,在程序升级时,如针对SPDK程序的升级,通常需要中断业务,先通过SPDK程序停止接收FPGA发送的命令,重启SPDK程序,然后通过SPDK程序对之前没有完成的命令重新执行一次,并开始等待新的命令的到来。在此过程中,用户的发送的命令被迫等待SPDK程序重启完成后才能继续服务,造成用户的服务存在中断时间,而SPDK程序的启动时间不是固定的,会随着SPDK程序支持的网络磁盘数量增长而增加,导致对不同的用户的体验感觉不一样,用户的虚拟机如果在SPDK程序支持的网络磁盘多的服务器,就会感觉到服务中断时间变长。
[0111] 如图7所示,为传统技术中涉及到的程序升级的示意图,可以包括:基于原始磁盘文件启动第一进程、第一进程执行命令、原始磁盘文件更新得到新的磁盘文件、第一进程中断、基于新的磁盘文件启动第二进程、第二进程初始化以及切换到第二进程执行命令等多个过程。具体地,服务器可以运行原始磁盘文件启动第一进程,即运行待升级程序得到第一进程,其中,待升级程序可以是SPDK程序。在第一进程启动之后,第一进程可以获取由命令下发端针对原始磁盘文件下发的命令,其中,命令下发端可以为硬件设备,如单片机、FPGA、DSP等,第一进程可以执行获取的针对原始磁盘文件下发的命令。当触发升级流程时,原始磁盘文件更新,得到新的磁盘文件,此时第一进程中断,即第一进程停止运行,由服务器基于新的磁盘文件启动第二进程,即基于升级后的SPDK程序启动第二进程。在启动第二进程之后,第二进程初始化,主要包括初始化第二进程关联的存储空间以及命令接收通道,当第二进程初始化完成,切换到第二进程执行命令。在传统技术中,由SPDK程序升级带来的服务中断时长可以是从第一进程中断开始,第一进程中断可以是处于1min(分)的时间点,直至切换到第二进程执行命令为止,切换到第二进程执行命令可以是处于10min的时间点,则服务中断时长可能会达到9min。其中,若SPDK程序支持的网络磁盘数量多,则第二进程在初始化时,所需要的初始化时长也就越长,从而导致对不同的用户的体验感觉不一样,用户的虚拟机如果在SPDK程序支持的网络磁盘数量较多的服务器上,就会感觉到服务中断时间变长。
[0112] 因此,现有方案虽然能够实现SPDK程序升级,但影响系统的稳定性和可用性,导致业务服务中断,如果SPDK程序支持的网络磁盘的数量多的话,等待的时间会跟盘的数量存在线性相关性。
[0113] 基于此,本申请提供了一种程序升级方法,可以通过双通道技术实现在线的切换,节省了SPDK启动时间,能够最大限度的减少对业务的干扰。如图8所示,为一个实施例中本申请提供的程序升级方法的时序图,可以包括:基于原始磁盘文件启动主进程,主进程执行命令、原始磁盘文件更新,得到新的磁盘文件、运行新的磁盘启动从进程、从进程初始化与主进程建立连接、主进程清空命令、主进程清空完成、命令获取通道切换、从进程执行命令以及主进程退出等多个过程。
[0114] 具体地,服务器可以运行原始磁盘文件启动主进程,即运行待升级程序得到主进程,其中,待升级程序可以是SPDK程序。在主进程启动之后,主进程可以获取由命令下发端发送的针对SPDK程序的命令,并执行获取的针对SPDK程序的命令。当触发升级流程时,原始磁盘文件更新,得到新的磁盘文件,此时可以基于新的磁盘文件启动从进程,升级后的程序可以是升级后的SPDK程序。在启动从进程之后,从进程初始化,主要包括初始化从进程关联的存储空间以及命令接收通道,当从进程初始化完成,从进程可以与主进程建立连接,并基于建立的连接向主进程发送清空命令,以指示主进程根据清空命令处理完已经从命令通道获取的命令。当主进程清空完已经从命令通道获取的命令时,告知从进程已经完成清空。从进程在接收到主进程发送的命令清空的消息时,可以执行命令获取通道的切换,在完成命令获取通道的切换之后,可以由从进程获取针对升级后的SPDK程序的命令,并执行命令。从进程可以向主进程发送退出消息,指示主进程退出。本申请提供的程序升级方法,由SPDK程序升级带来的服务中断时长实际上只包括了命令通道切换的时长,而命令通道切换一般所需的时间很短,可以达到毫秒级别,如图8中命令通道切换只需要1ms即可完成。因此,本申请提供的程序升级方法,几乎可以做到不中断业务。
[0115] 其中,为了对主进程和从进程之间的信息交互进行详细的说明,如图9所示,为主进程和从进程之间的信息交互时序图。具体地,当从进程启动之后,从进程可以进行初始化处理,在初始化完成时,从进程可以与主进程建立进程间通信连接,进程间通信连接可以是基于主进程创建的进程间通信接口建立的。若从进程与主进程之间的通信连接为连接成功,从进程可以向主进程发送清空命令,其中,清空命令用于指示主进程停止从与主进程相关的第一命令通道获取命令,并指示主进程继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。主进程基于接收到的清空命令,指示命令下发端停止通过第一命令通道进行命令下发,并继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。主进程结束对已获得命令的清空处理,可以生成清空结束通知消息,并向从进程发送清空结束通知消息。当从进程基于进程间通信接口获得清空结束通知消息,从进程可以将命令获取通道从第一命令通道切换成第二命令通道,从进程从第二命令通道获取针对升级后的程序的命令,并通过从进程执行所获得的命令。从进程还会进一步向主进程发送退出命令,主进程基于接收到的退出命令,结束运行,断开与从进程的进程间通信连接,完成程序的升级。最后,从进程更新为新的主进程,并创建针对下一次程序升级的下一进程间通信接口,在针对升级后的程序触发进行下一次程序升级的情况下,从进程作为新的主进程,可以与下一次程序升级启动的从进程之间通过下一进程间通信接口通信连接。
[0116] 在一个实施例中,如图10所示,为本申请提供的程序升级方法实现程序升级的架构示意图。本申请提供的程序升级方法可以在不中断业务的情况下,实现SPDK在线升级。具体实现步骤如下:
[0117] 其中,图10中的程序升级可以是基于智能网卡实现的,智能网卡可以是包括可编程逻辑器件和处理器的网络,其中,可编程逻辑器件可以是指FPGA,FPGA可以包括用于进行命令传输的双通道,处理器可以是SOC(System on Chip,片上系统)。其中,智能网卡可以与服务器连接使用,智能网卡是一种灵活可编程的网卡,与服务器配合使用。智能网卡可以降低服务器的消耗,使服务器能够更有效运行关键应用程序和操作系统,优化业务数据处理整体效力。处理器上可以运行程序,通过运行待升级的SPDK程序,启动SPDK主进程,通过运行升级后的SPDK程序,可以启动SPDK从进程。
[0118] 其中,在智能网卡的FPGA芯片中预留两个硬件的命令输入通道,即第一命令输入通道A和第二命令输入通道B,命令输入通道具体可以是指两个IO命令输入区,分别为A区和B区。其中,第一命令输入通道A和第二命令输入通道B都能向SPDK程序发送命令供SPDK程序执行,并能处理SPDK程序反馈的命令执行情况的请求。
[0119] 其中,第一命令输入通道A和第二命令输入通道B都可以传输由虚拟机发送的输入输出命令,即IO命令。其中,描述符表是指desc ring。可用描述区域是指avail ring,已用描述区域是指used ring。其中,虚拟机产生的命令以描述符的形式存放在desc ring中,虚拟机准备好数据后更新avail ring,由avail ring指示还有哪些命令待发送,当命令被执行完后,更新used ring。在一个具体应用中,虚拟机和FPGA之间可以是基于预先定义的虚拟化设备接口标准进行通信,虚拟化设备接口标准中可以定义虚拟设备类型和协议,虚拟机和FPGA之间具体可以基于virtio(一种标准协议)进行通信。在基于virtio标准协议进行通信时,virtio标准协议可以设定有专门处理针对待升级程序的命令的虚拟队列,虚拟队列可以是基于环形队列的方式来批量处理针对待升级程序的命令的。其中,虚拟队列可以包括desc ring、avail ring以及used ring。其中,desc ring中存放的是真实的数据包描述符,如数据包或其缓冲区地址等,描述符表中的每一项描述符指向一片内存,内存类型可以分为out类型和in类型,分别代表输出和输入。avail ring和used ring中存放的指向desc ring中项的索引,其中,avail ring中存放的是生产出来的描述符索引,used ring中存放的是已经消费的描述符索引,从而可以根据used ring来回收已经使用的描述符,即使中间有描述符被占用,也不会影响被占用描述符之后的描述符的回收。
[0120] 当不涉及到程序升级时,在SOC中初次运行SPDK程序时,可以启动SPDK主进程,主进程需要对第一命令输入通道A进行初始化,以及对主进程关联的网络磁盘进行初始化。初始化过程中,SPDK主进程会尝试连接热升级专用路径的Unix domain Socket服务,如果连接失败则说明此SPDK是主进程,此时SPDK主进程会创建一个热升级专用路径Unix domain Socket服务,并对Unix domain Socket服务进行探测,探测是否有热升级的SPDK进程连接上来,如果有热升级的SPDK进程连接上来则建立连接。初始化完成后,SPDK主进程可以轮询第一命令输入通道A以从中获取FPGA新发送的IO命令。SPDK主进程获取了新发送的IO命令后,会对IO命令的头部进行剥离,并解析该IO命令,以确认IO命令的相关命令参数,确定了相关命令参数后,SPDK主进程会根据对应的命令参数选取对应的网络磁盘,生成对该网络磁盘的IO访问请求,并向该磁盘所在的网络磁盘服务器发送该请求。
[0121] 网络磁盘服务器收到请求后会执行该IO访问请求,并将结果返回给SPDK主进程,SPDK主进程收到IO执行结果后会把对应的执行结果,放入第一命令输入通道A的完成队列,以通知FPGA该请求的执行情况。
[0122] 当需要升级SPDK程序时,可以触发程序升级,更新SPDK程序的程序代码文件,获得升级后的SPDK程序。在SOC上可以运行升级后的SPDK程序,以此启动另一个SPDK进程,可以称为SPDK从进程。SPDK从进程启动,并且初始化FPGA预留的第二命令输入通道B,以及对从进程关联的网络磁盘进行初始化,即依照之前主进程的初始化步骤完成SPDK从进程的初始化处理,在SPDK从进程初始化处理结束后,SPDK从进程可以对第二命令输入通道B进行轮询。其中,SPDK从进程完成初始化后会尝试连接热升级专用路径Unix domain Socket服务,连接成功就代表SPDK热升级的服务升级流程启动。
[0123] 当SPDK从进程和SPDK主进程之间基于Unix domain Socket服务连接成功后,SPDK从进程和SPDK主进程之间涉及到的流程可以包括:1、清空命令;2、停止接收命令;3、清空命令完成;4、通道切换;5、切换成第二命令输入通道B;6、切换完成;7、退出命令等7个处理过程。具体地,SPDK从进程可以基于Unix domain Socket服务向SPDK主进程发送清空命令,以通知SPDK主进程处理完所有已经从第一命令输入通道A获取的IO命令,并停止接收第一命令输入通道A的IO命令,例如,SPDK主进程可以调用FPGA提供的暂停接受IO函数,执行暂停接受IO操作,然后SPDK主进程等待之前接收的IO命令执行完成,SPDK主进程完成所有IO命令后,SPDK主进程通知SPDK从进程清空IO命令的操作完成。SPDK从进程在收到SPDK主进程发送的清空IO命令完成的通知后,可以调用FPGA提供的IO命令接收切换的功能,完成通道切换,即将IO命令接收区从第一命令输入通道A换成第一命令输入通道B。等待切换完成后,SPDK从进程向SPDK主进程发送退出的命令,SPDK主进程收到退出的命令后,主动终止执行并退出。此时,SPDK从进程断开和SPDK主进程的Unix domain socket连接,并创建新的Unix domain socket服务,等待下一次的热升级从进程连接,至此,热升级动作完成。
[0124] 应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0125] 基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的程序升级方法的程序升级装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个程序升级装置实施例中的具体限定可以参见上文中对于程序升级方法的限定,在此不再赘述。
[0126] 在一个实施例中,如图11所示,提供了一种程序升级装置1100,包括:升级程序确定模块1102、从进程启动模块1104、和指示模块1106以及切换模块1108,其中:
[0127] 升级程序确定模块1102,用于在待升级程序的主进程运行的过程中,对待升级程序进行升级,获得升级后的程序;主进程通过第一命令通道获取针对待升级程序的命令。
[0128] 从进程启动模块1104,用于启动升级后的程序的从进程;从进程支持通过第二命令通道获取针对升级后的程序的命令。
[0129] 指示模块1106,用于指示主进程停止从第一命令通道获取命令,并清空主进程从第一命令通道已获得的命令。
[0130] 切换模块1108,用于当主进程结束对已获得命令的清空处理,切换成由从进程通过第二命令通道获取针对升级后的程序的命令,并执行所获得的命令。
[0131] 在一个实施例中,指示模块1106,还用于建立从进程和主进程之间的进程间通信连接;当进程间通信连接为连接成功,通过从进程指示主进程停止从第一命令通道获取命令,并指示主进程继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。
[0132] 在一个实施例中,指示模块1106包括通信连接建立模块和清空命令发送模块;其中,通信连接建立模块,用于确定由主进程创建的进程间通信接口,并基于进程间通信接口建立从进程和主进程之间的进程间通信连接;清空命令发送模块,用于通过从进程基于进程间通信接口向主进程发送清空命令;清空命令,用于指示主进程停止从第一命令通道获取命令,并指示主进程继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。
[0133] 在一个实施例中,程序升级装置还包括主进程控制模块;主进程控制模块,用于当启动主进程,通过主进程创建进程间通信接口;当主进程基于进程间通信接口接收到清空命令,确定针对待升级程序进行命令下发的命令下发端;通过主进程指示命令下发端停止通过第一命令通道进行命令下发,并通过主进程继续执行从第一命令通道已获得的命令,直至已获得的命令执行完成。
[0134] 在一个实施例中,切换模块1108,包括通道切换模块;通道切换模块,用于当通过从进程确定主进程结束对已获得命令的清空处理,通过从进程将命令获取通道从第一命令通道切换成第二命令通道;通过从进程从第二命令通道获取针对升级后的程序的命令,并通过从进程执行所获得的命令。
[0135] 在一个实施例中,通道切换模块,还用于当从进程基于进程间通信接口获得清空结束通知消息,通过从进程将命令获取通道从第一命令通道切换成第二命令通道;其中,清空结束通知消息,是主进程在结束对已获得命令的清空处理的情况下基于进程间通信接口向从进程发送的;进程间通信接口,用于建立从进程和主进程之间的进程间通信连接。
[0136] 在一个实施例中,程序升级装置还包括主进程退出模块;主进程退出模块,用于当命令获取通道成功切换成第二命令通道,通过从进程基于进程间通信接口向主进程发送退出命令;退出命令用于指示主进程结束运行。
[0137] 在一个实施例中,通道切换模块,还用于确定通过命令获取通道进行命令下发的命令下发端;第一命令通道包括命令下发端的第一命令接口;第二命令通道包括命令下发端的第二命令接口;通过从进程将命令下发端的命令接口从第一命令接口切换成第二命令接口。
[0138] 在一个实施例中,程序升级装置还包括命令处理模块;命令处理模块,用于通过从进程针对所获得的待执行命令进行解析,获得与待执行命令关联的命令参数;通过从进程按照命令参数执行待执行命令。
[0139] 在一个实施例中,程序升级装置还包括从进程控制模块;从进程控制模块,用于基于升级后的程序启动从进程;确定针对升级后的程序的第二命令通道,并对第二命令通道进行通道初始化;对从进程关联的数据存储空间进行存储初始化;其中,从进程支持基于存储初始化后的数据存储空间,执行从通道初始化后的第二命令通道获得的针对升级后的程序的命令。
[0140] 在一个实施例中,升级程序确定模块1102,还用于运行待升级程序的主进程;通过主进程从第一命令通道获取针对待升级程序的命令,并通过主进程执行所获得的命令;当触发针对待升级程序的升级,针对待升级程序的程序文件进行升级,获得升级后的程序。
[0141] 在一个实施例中,程序升级装置还包括通信接口建立模块;通信接口建立模块,用于通过从进程中断与主进程的通信连接,并创建针对下一次程序升级的下一进程间通信接口;其中,下一进程间通信接口,用于在针对升级后的程序触发进行下一次程序升级的情况下,将从进程作为下一次程序升级的主程序,并建立下一次程序升级的主程序与下一次程序升级的从程序之间的通信连接。
[0142] 上述程序升级装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0143] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器或终端,其内部结构图可以如图12所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储程序升级数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种程序升级方法。
[0144] 本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0145] 在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述程序升级方法的步骤。
[0146] 在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述程序升级方法的步骤。
[0147] 在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述程序升级方法的步骤。
[0148] 需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
[0149] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read‑Only Memory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random AccessMemory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
[0150] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0151] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。