专利名称:不中断业务对处理系统的程序版本进行升级的方法
技术领域:
本发明涉及对处理系统的程序版本进行升级的技术,尤其涉及一种在不中断业务的情况下对处理系统的程序版本进行升级的方法。
背景技术:
可靠性和可用性是对高端通信处理系统的一个基本要求。一般通信处理系统的可靠性和可用性都使用一定时间内(比如一年内)业务中断的时间来衡量。通信处理系统一般由程序和硬件组成,其中的硬件部分在设计成熟以后,可以非常耐用;但是对于程序部分,由于代码量巨大(比如一般的高端路由器的代码量有几百万行),所以不可避免的有一些不足(Bug),另外由于技术的发展日新月异,新的业务特性也在不断的出现,所以对程序版本的升级就不可避免。
处理系统的程序分为控制平面和数据平面。其中控制平面类似通信处理系统的大脑,用于处理通信处理系统之间的协议包,同时对系统进行管理、配置、监控;数据平面也称业务平面,是通信处理系统处理业务的平面,比如上网时的数据包都走数据平面转发。
如果要升级通信处理系统的程序版本,对于控制平面,一般都有备份,可以通过主备倒换来实现程序升级,并可以做到不影响业务;但是对于数据平面业务平面,由于所有的业务都在此处理,升级程序版本需要重新启动,因此必然导致业务的中断。
目前,随着因特网(Internet)的发展,网络用户迅猛增加,各种类型的应用共存在一个物理网络上,网络节点的处理能力、服务质量(QoS)保障和网络带宽逐渐成为Internet继续发展的主要障碍。但是随着光传输技术的发展,传输带宽不再成为网络的瓶颈,而网络交换节点的处理能力显得尤为重要。为了满足IP网络的新变化,千兆交换路由器(GSR)和百万兆交换路由器(TSR)应运而生,这些高端路由器采用大容量交换结构和硬件高速转发技术,大大提高了报文转发速度;作为这些设备交换核心的网络处理器(NP,Network Processor)技术也得到了迅猛的发展和应用。
网络处理器是一种可编程器件,应用于通信领域的各种特定任务,例如包处理、协议分析、路由查找、声音/数据的汇聚、防火墙、QOS等等。网络处理器目前的应用主要集中在数据通信网络的中高端设备上,与以前的程序转发、FPGA实现转发、ASIC实现转发相比,它有以下特点或优点1,性能高。网络处理器的很多算法都用硬件实现,其内部一般都集成了几个甚至几十个转发微引擎(ME)和硬件协处理器、硬件加速器,在实现复杂的拥塞管理、队列调度、流分类和QOS功能的前提下,还可以达到很高的查找、转发性能,实现所谓的“硬转发”。
2,可以进行灵活的功能扩展。由于网络处理器可以进行编程,一旦有新的技术或者需求出现,可以很方便的通过软件编程进行实现,系统的功能可以通过程序模块方便的添加删除。所以对于特殊的用户需求,可以进行定制开发,即可以在短时间内通过模块删减开发能满足不同用户需求的产品。而以前用硬件逻辑实现的情况下,需要修改管脚功能,重新调试升级,而且大多情况下其他的硬件设计也要改动,为系统可靠性带来很大隐患。用ASIC实现的情况下,无法对新的功能进行添加,只能重新设计,更新芯片。
3,可靠性高。由于网络处理器的大部分功能都使用一个或者两个芯片实现,芯片转产前都经过了严格的测试和各种抗干扰和破坏性试验,从而使采用NP的处理系统的可靠性大大提高。所以NP特别适合用于开发电信级数据通信产品。
4,管理、开发方便。NP都提供了和上层中央处理器(CPU)标准的接口或者内置管理CPU,可以和其它CPU实现高速通讯。NP一般都提供了大量硬件计数器,可以方便的实现各种MIB统计功能,为网管提供支持。NP一般都提供了编译系统和程序样例,而且目前主流的NP都提供程序仿真开发平台,可以进行离线开发和验证,甚至可以用仿真平台将程序的效率仿真到时钟周期(Cycle)级;在在线调试时有单步跟踪、设置断点等手段,可以使设备开发商在较短时间内开发出适合产品需要的程序。
5,可以实现灵活组态。NP作为一个器件,都提供了灵活的配置功能,可以通过NP的不同形式组合或者和其它CPU的组合,实现系统的灵活配置,满足不同设备的需求,方便系统设计,加快了设备的开发进度。
鉴于上述的优点,网络处理器正在成为数据平面进行转发的一个主流技术。目前称采用网络处理器进行数据平面处理的路由器为“第五代路由器”。
然而在数据平面上,对于如何实现网络处理器上在不中断业务的情况下升级程序版本,已成为实现高端路由器和其他的利用网络处理器的处理系统进行不中断升级的关键。
目前,在采用NP的处理系统中,实现在不中断业务的情况下升级处理系统的程序版本的方法主要有热补丁(Hot Patch)技术。该技术的主要方案是指当程序出现小的缺陷(Bug)时,可以通过对二进制文件的覆盖或者增加跳转语句来实现修复。所述的补丁为所升级的程序代码段。例如,在如下二进制执行文件中,n~n+m之间的程序有Bug。
.................................
nxxxxxxxxn+1 xxxxxxxx......
n+m xxxxxxxx.....................
打热补丁的方式通常有两种方法第一种、在网络处理器的指令空间(即内存)中开辟一块专门用于存放补丁的区域,此处假定为从地址a1到地址a2,然后在a1~a1+x中存放正确的程序的二进制代码,在a1+x+1存放go to n+m+1的代码,最后修改n处的指令为go to a1,这样在程序运行到n时将跳转到a1来运行正确的处理代码,因此可以在不中断业务的情况下进行补丁以升级程序版本。
第二种、如果补丁代码所占的空间小于等于故障代码的空间,假定需要x条指令,x<=m,可以直接覆盖从n开始的二进制文件。如果x小于m还需要在最后一句存放go to a1,这样就可以不中断业务而修正Bug,达到升级目的。
但是,现有的这种热补丁技术存在以下缺点1、由于网络处理器的指令空间十分有限,所以其修改范围有限,只能对有限的指令进行修改。对于数据平面,在补丁代码数大于原来指令代码数时,网络处理器的指令空间非常有限,所以空余的用于热补丁的指令空间不能太大,因此一些稍微大的修改无法实施加载。
2、热补丁修改会涉及修改数据结构,但是如果修改涉及到太多的数据结构,则会涉及的到一些中间状态,导致处理故障。
3、对于增加新功能、对微码中打了补丁地方需要修改时,由于打了过多的补丁,浪费了大量的指令空间,因此无法使用热补丁或者实现非常困难。
发明内容
有鉴于此,本发明的主要目的在于提供一种不中断业务对处理系统的程序版本进行升级的方法,从而在实现不中断业务对处理系统的程序版本进行升级的同时,升级的规模不受处理系统指令空间的限制。
为了实现上述发明目的,本发明的主要技术方案为一种不中断业务对处理系统的程序版本进行升级的方法,适用于利用一个以上的具有独立指令空间的处理单元进行业务处理的处理系统,在处理系统进行业务处理的过程中,逐个对需升级的处理单元进行程序升级;对单个处理单元进行程序升级时指定替代处理单元,将需升级的处理单元的升级程序加载到替代处理单元的指令空间中,用替代处理单元代替该需升级的处理单元工作。
所述指定替代处理单元为在处理系统中预留空闲处理单元,将预留的空闲处理单元指定为替代处理单元。
所述指定替代处理单元为将处理系统程序流水线中可临时停止工作而不影响当前业务处理的处理单元指定为替代处理单元。
所述指定替代处理单元为将处理系统程序流水线中进行并行处理的一个以上处理单元中的任一处理单元指定为替代处理单元。
所述逐个对需升级的处理单元进行程序升级的具体过程为A、将处理系统程序的流水线中第一个需要升级的处理单元设置为当前处理单元;B、将当前处理单元的升级程序加载到替代处理单元的指令空间;C、将替代处理单元加入流水线,并将当前处理单元从流水线中摘除;D、判断当前处理单元的任务是否处理结束,是则执行下一步骤;否则重复执行本步骤;E、停止当前处理单元的任务,将当前处理单元指定为替代处理单元,将流水线中的下一个需要升级的处理单元设置为当前处理单元;F、重复执行上述步骤B到步骤E,直到流水线中所有需升级的处理单元都升级完毕。
所述逐个对需升级的处理单元进行程序升级的具体过程为a、将处理系统程序的流水线中第一个需要升级的处理单元设置为当前处理单元;b、将当前处理单元的升级程序加载到替代处理单元的指令空间;c、将替代处理单元加入流水线,并将当前处理单元从流水线中摘除;d、判断当前处理单元的任务是否处理结束,是则执行下一步骤;否则重复执行本步骤;e、停止当前处理单元的任务,将当前处理单元的升级程序加载到当前处理单元的指令空间;f、将当前处理单元加入到流水线,将替代处理单元从流水线中摘除;
g、判断替代处理单元的任务是否处理结束,是则执行下一步骤;否则重复执行本步骤;h、停止替代处理单元的任务,将流水线中的下一个需要升级的处理单元设置为当前处理单元;i、重复执行上述步骤b到步骤h,直到流水线中所有需升级的处理单元都升级完毕。
所述的处理单元为微引擎或中央处理单元。
所述的处理系统为网络处理器。
所述方法对临时停止工作不影响业务处理的处理单元进行升级时,不需替代处理单元代替工作,直接将升级程序加载到该处理单元的指令空间进行升级。
相对于现有的热补丁技术,由于本发明的方法利用替代处理单元分别逐个地对处理系统中需升级的处理单元进行程序升级,因此在升级过程中不会中断处理系统的业务处理;由于本发明中是用升级程序后处理单元代替原处理单元进行工作,不必占用额外的指令空间打补丁,因此利用本发明的方法进行升级的规模相对现有技术较大,只要升级后程序的整体占用空间不超过处理系统的指令空间,可对原程序作较大的修改;同时可以大量节省处理系统的指令空间;另外,由于本发明的升级方式为用升级程序后的处理单元代替原处理单元工作,处理单元的程序整个被替换掉,不涉及数据结构的修改,因此不会出现由于数据结构修改而导致的问题。
图1为2800网络处理器的系统框图;图2为网络处理器中ME的分配情况示意图;图3为本发明第一实施例的流程图;图4为对一个ME进行升级的示意图;图5为本发明第二实施例的流程图;
图6为本发明第三实施例所述不预留ME而指定替代ME的示意图。
具体实施例方式
下面通过具体实施例和附图对本发明做进一步详细说明。
本发明的核心技术方案为一种不中断业务对处理系统的程序版本进行升级的方法,适用于利用一个以上的具有独立指令空间的处理单元进行业务处理的处理系统,在处理系统进行业务处理的过程中,逐个对需升级的处理单元进行程序升级;对单个处理单元进行程序升级时指定替代处理单元,将需升级的处理单元的升级程序加载到替代处理单元的指令空间中,用替代处理单元代替该需升级的处理单元工作。
本发明所适用的处理系统为利用一个以上的具有独立指令空间的处理单元进行业务处理的处理系统,例如高端通信设备中采用的网络处理器,或者其他的利用一个以上具有独立指令空间的通用中央处理器(CPU)进行处理的处理系统。所述的处理单元为微引擎(ME)或中央处理单元(CPU)。
以下实施例中以Intel公司的IXP2800网络处理器(以下简称2800网络处理器)为例,对该方法进行说明。
图1为2800网络处理器的系统框图。参见图1,2800网络处理器中包含了16个微引擎(ME)和一个嵌入式CPU,该CPU名字叫Xscale。每个微引擎是一个简单指令集计算机(RISC)CPU,每个微引擎包含8个线程,每个线程都有自己物理上独立的一套存储器和程序计数器(PC)指针以及相关的堆栈。另外还包含一些和本发明无关的协处理器单元和接收发送等特殊硬件部件。ME用于转发数据,Xscale用于NP的管理以及和上层管理平面的CPU进行通信等。每个ME的指令空间是独立的,即每个ME的指令可以不同。ME上的编程语言为一种特殊的汇编语言,叫“微码”。
图2为网络处理器中ME的分配情况示意图。参见图2,在该网络处理器的16个ME中,2~4个用于数据包的接收、发送,剩余的ME用于业务处理。
图3为本发明第一实施例的流程图。本第一实施例中,为了实现不中断业务加载,在处理系统中预留出一个ME为空闲ME,专门用于加载程序时协助其他ME升级程序。在升级程序版本时,通过用这个空闲ME替换正在工作的ME,来逐个实现ME指令升级的目的。
参见图3,假定ME0为预留的ME,该流程包括步骤301、将程序流水线中第一个需要升级的ME1设置为当前ME,将ME0指定为最初的替代ME,用于替代正在工作的ME,并停止替代ME的工作;步骤302、将当前ME的升级程序加载到替代ME的指令空间;步骤303、将替代ME加入程序的流水线,并将当前ME从流水线中摘除;此处的摘除是指切断该ME的业务处理的输入端,但是不切断其业务处理的输出端,因为在切断其输入端后,其还要对最后输入的数据进行处理并输出。
步骤304、判断当前ME的任务是否处理结束,即输入当前ME的数据是否处理并输出完毕,是则执行下一步骤;否则重复执行本步骤;本步骤的目的是保证在升级当前ME的程序时,不中断业务处理。
步骤305、停止当前ME的工作,即切断其输入端和输出端,停止对数据的处理,将当前ME指定为替代ME,将程序流水线中的下一个需要升级的ME设置为当前ME;步骤306、判断处理系统中是否所有需升级的ME都已经过上述的升级处理,如果是,则结束流程;否则返回步骤302。
在本第一实施例中,在下一个ME升级时,可以使用本次空闲出来的ME作为替代ME协助升级。
ME在流程设计中,都设计成流水线的方式,执行每个流水线步骤的ME之间通过循环队列来传递信息,ME从循环队列中读取任务,处理完毕后通过下一个循环队列发送给下一个ME。图4为对一个ME进行升级的示意图。参见图4,此处假设对ME-a进行升级,主要包括4I、4II、4III三个部分。首先参见4I,将ME-a的升级程序加载到替代ME 41中;其次参见4II、将替代ME 41加入程序的流水线替代ME-a,并将ME-a从流水线中摘除,即切断其输入数据;最后参见4III、ME-a的任务处理结束后,则停止ME-a的工作,即将其输入和输出都切断,此时ME-a为一个空闲的ME,因此可以作为一个替代ME来代替后续的ME,例如ME-b,利用同样的方法可以升级ME-b,直到所有的ME都升级完毕。
第一实施例中,替代ME是逐个变化的,是将每次升级后空闲出的ME指定为替代ME协助下一个ME进行升级。在第二实施例中,可以始终采用一个替代ME协助所有需升级的ME进行升级。图5为本发明第二实施例的流程图。参见图5,假定ME0为预留的ME,该流程包括步骤501、将程序流水线中第一个需要升级的ME1设置为当前ME,指定所述ME0为替代ME,停止ME0的工作;步骤502、将当前ME的升级程序加载到ME0的指令空间;步骤503、将ME0加入流水线,并将当前ME从流水线中摘除;步骤504、判断当前ME的任务是否处理结束,是则执行下一步骤;否则重复执行本步骤504;步骤505、停止当前ME的工作,将当前ME的升级程序加载到当前ME的指令空间;步骤506、将当前ME加入到流水线,将ME0从流水线中摘除;步骤507、判断ME0的任务是否处理结束,是则执行下一步骤;否则重复执行本步骤;步骤508、停止ME0的工作,该ME0还是替代ME,将流水线中的下一个需要升级的ME设置为当前ME;步骤509、判断处理系统中是否所有需升级的ME都已经过上述的升级处理,如果是,则结束流程;否则返回步骤502。
上述两个实施例的都是利用在网络处理器中预留的空闲ME作为最初的替代ME进行升级,本发明也可以采用不预留ME的方法进行升级,这种方法适用于所述程序流水线中具有可临时停止工作而不影响网络处理器当前业务处理的ME,可以将这个ME作为替代ME协助完成程序升级。尤其是在网络处理器的处理设计中,程序流水线上的某个环节有一个以上的ME并行处理,那么可以将并行处理的ME中的任一个ME指定为替代ME协助完成程序升级。
图6为第三实施例所述不预留ME而指定替代ME的示意图。参见图6,对于一个流水线环节上有一个以上ME并行处理的情况,例如参见6I,ME-a和ME-a1在一个环节上并行处理,可以从中任选一个ME指定为升级的载体,即替代ME,对网络处理器中的需升级的ME逐个进行升级。例如此处指定ME-a1为最初的替代ME,其指定过程参见6II和6III6II、将ME-a1从流水线中摘除;在ME-a1的任务处理结束后,停止该ME-a1的工作,将该ME-a1指定为最初的替代ME,利用该替代ME进行升级,其具体升级过程可以与图3所示的流程相同,也可以与图5所示的流程相同,只是将ME-a作为其中的ME0进行处理。且在此第三实施例中,由于没有空闲ME,如果ME-a1也需升级,则最后指定的替代ME协助ME-a1进行程序升级,此时有两种情况如果利用图3所示流程进行升级,则最后指定的替代ME中加载ME-a1的升级程序,并代替ME-a1工作;如果利用图5所示流程进行升级,则最后指定的替代ME还是ME-a1,直接加载其自身的升级程序,加入流水线进行工作。
由于在网络处理器的处理的某些业务流水线中,可能包括临时停止工作不影响业务处理的ME,对这些ME的程序进行升级时,可以不需替代ME协助,而是直接将该ME从流水线中摘除,在该ME的任务处理结束后,停止该ME的工作,并将升级程序加载到该ME的指令空间进行升级后再加入到流水线;而对于临时停止工作影响业务处理的ME则利用上述第一、二、三的实施例所述的方法进行升级。
本发明在逐个对ME进行升级时,也可调整ME在程序流水线中的位置,因此本发明不但适用于在不中断业务情况下小规模的程序升级优化,也适用于在不中断业务情况下的大规模程序修改。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
权利要求
1.一种不中断业务对处理系统的程序版本进行升级的方法,适用于利用一个以上的具有独立指令空间的处理单元进行业务处理的处理系统,其特征在于,在处理系统进行业务处理的过程中,逐个对需升级的处理单元进行程序升级;对单个处理单元进行程序升级时指定替代处理单元,将需升级的处理单元的升级程序加载到替代处理单元的指令空间中,用替代处理单元代替该需升级的处理单元工作。
2.根据权利要求1所述的方法,其特征在于,所述指定替代处理单元为在处理系统中预留空闲处理单元,将预留的空闲处理单元指定为替代处理单元。
3.根据权利要求1所述的方法,其特征在于,所述指定替代处理单元为将处理系统程序流水线中可临时停止工作而不影响当前业务处理的处理单元指定为替代处理单元。
4.根据权利要求1所述的方法,其特征在于,所述指定替代处理单元为将处理系统程序流水线中进行并行处理的一个以上处理单元中的任一处理单元指定为替代处理单元。
5.根据权利要求1、2、3、或4所述的方法,其特征在于,所述逐个对需升级的处理单元进行程序升级的具体过程为A、将处理系统程序的流水线中第一个需要升级的处理单元设置为当前处理单元;B、将当前处理单元的升级程序加载到替代处理单元的指令空间;C、将替代处理单元加入流水线,并将当前处理单元从流水线中摘除;D、判断当前处理单元的任务是否处理结束,是则执行下一步骤;否则重复执行本步骤;E、停止当前处理单元的任务,将当前处理单元指定为替代处理单元,将流水线中的下一个需要升级的处理单元设置为当前处理单元;F、重复执行上述步骤B到步骤E,直到流水线中所有需升级的处理单元都升级完毕。
6.根据权利要求5所述的方法,其特征在于,所述的处理单元为微引擎或中央处理单元。
7.根据权利要求1、2、3、或4所述的方法,其特征在于,所述逐个对需升级的处理单元进行程序升级的具体过程为a、将处理系统程序的流水线中第一个需要升级的处理单元设置为当前处理单元;b、将当前处理单元的升级程序加载到替代处理单元的指令空间;c、将替代处理单元加入流水线,并将当前处理单元从流水线中摘除;d、判断当前处理单元的任务是否处理结束,是则执行下一步骤;否则重复执行本步骤;e、停止当前处理单元的任务,将当前处理单元的升级程序加载到当前处理单元的指令空间;f、将当前处理单元加入到流水线,将替代处理单元从流水线中摘除;g、判断替代处理单元的任务是否处理结束,是则执行下一步骤;否则重复执行本步骤;h、停止替代处理单元的任务,将流水线中的下一个需要升级的处理单元设置为当前处理单元;i、重复执行上述步骤b到步骤h,直到流水线中所有需升级的处理单元都升级完毕。
8.根据权利要求7所述的方法,其特征在于,所述的处理单元为微引擎或中央处理单元。
9.根据权利要求1、2、3、或4所述的方法,其特征在于,所述的处理系统为网络处理器。
10.根据权利要求1所述的方法,其特征在于,所述方法对临时停止工作不影响业务处理的处理单元进行升级时,不需替代处理单元代替工作,直接将升级程序加载到该处理单元的指令空间进行升级。
全文摘要
本发明公开了一种不中断业务对处理系统的程序版本进行升级的方法,适用于利用一个以上的具有独立指令空间的处理单元进行业务处理的处理系统,在处理系统进行业务处理的过程中,逐个对需升级的处理单元进行程序升级;对单个处理单元进行程序升级时指定替代处理单元,将需升级的处理单元的升级程序加载到替代处理单元的指令空间中,用替代处理单元代替该需升级的处理单元工作。本发明在实现不中断业务对处理系统的程序版本进行升级的同时,升级的规模不受处理系统指令空间的限制。
文档编号H04L12/24GK1852156SQ20051011738
公开日2006年10月25日 申请日期2005年11月3日 优先权日2005年11月3日
发明者刘少伟 申请人:华为技术有限公司