一种实现网络处理器动态加载微码的方法及网络设备的制作方法

文档序号:6555883阅读:179来源:国知局
专利名称:一种实现网络处理器动态加载微码的方法及网络设备的制作方法
技术领域
本发明涉及数据通信领域,特别是涉及一种实现网络处理器动态加载微码的方法。
背景技术
目前,在数据通信领域,大容量的路由器为了提高转发效率,普遍采用分布式的转发结构。现有技术的分布式转发结构如图1所示,数据包的路由查找由转发引擎完成,不同转发引擎之间的包交换由交换网来实现。每个转发引擎对应一个接口板,占用路由器机框的一个槽位。路由计算则由独立于转发引擎和交换网的处理器来完成。这种体系结构的一个突出特点是转发层和控制层分离,因而使转发引擎的功能单一化,同时转发引擎在设计上更突出包转发的特点,使得高速大容量转发成为可能。目前业界的大容量路由器普遍采用此种体系结构。
转发引擎在实现上主要有以下三种方法1、逻辑芯片这种方法转发效率比较高,但是可维护性比较差。
2、专用集成电路(Application Specific Integrated Circuit,ASIC)以这种方法实现的转发引擎转发效率非常高,缺点是成本高,开发周期长,增加新的功能困难。
3、网络处理器(Network Processor)结合ASIC和通用CPU的特点,既具有ASIC的转发效率,又支持软件编程的灵活性。以这种方法实现的转发引擎转发效率非常高,增加新功能的成本少,开发周期短。
在当今IP(Internet Protocol,网际协议)网络迅猛发展的时代,路由器的功能以及所支持的接口种类和数量都在迅速膨胀。主流路由器在IP转发和MPLS(Multi-protocol Label Switch,多协议标签交换)转发的基础上,大部分都具备了三层VPN(Virtual Private Network,虚拟专用网络)、二层VPN、IPV6(IP Version 6)、IP隧道功能,同时还需要提供POS(Packet Over SDH)、以太网、ATM(Asynchronous Transfer Mode,异步传输模式)、E1、T1、E3、帧中继、RPR(Resilient Packet Ring,弹性分组环)、通道化E1等接口。网络处理器都有一定的指令空间,它所能容纳的代码量是有限且固定的。对于使用网络处理器作为转发引擎的路由器,增加上述功能和接口意味着网络处理器软件规模的膨胀,这就对网络处理器指令空间提出了挑战。只要使用网络处理器作为转发引擎都存在着指令空间不够的问题。即使目前代码空间尚且够用,以后开发新的路由器接口类型或者开发新的特性时也可能导致代码空间不够。
为解决网络处理器指令空间不足的缺陷,现有技术中有以下的解决方法1、使网络处理器只提供部分路由器转发功能(若全部提供,则网络处理器法无法支持相应容量的代码),即不支持的功能所对应的软件不参与编译。但是,使用这种办法,网络处理器只能加载一部分功能编译生成的目标文件,或者说是一种裁减软件功能的方法,对于购买路由器的人来说,每个转发引擎必须放弃一部分业务功能,要实现全部的软件功能,需要购买多个转发引擎,依靠增加转发引擎数量,牺牲路由器的槽位来弥补单个转发引擎功能上的不足。
2、一个接口板上使用两个网络处理器配合工作,这两个网络处理器在逻辑上构成一个转发引擎,各自承担一部分软件功能,完成一个网络处理器无法容纳的软件功能。但是采用这种方法必然会导致路由器硬件成本的升高。
3、只使用一个网络处理器,余外使用FPGA(Field Programable Gate Array,现场可编程门阵列)来分担一部分网络处理器的功能,通过这种办法来减少网络处理器所承担的功能,相应减少了代码量。这种方法的缺点也是明显的,对于路由器制造厂商来说,会导致生产周期加长,硬件成本升高。
4、按照接口类型和需要,动态加载相应代码,不加载该网络处理器不支持的接口的代码。使用该方法在一定程度上可以暂时缓解代码空间紧张的问题,但是随着新功能的开发,代码空间不足的问题仍会出现。
综上所述,现有技术并不能很好的解决网络处理器指令空间不足的缺陷。

发明内容
本发明提供一种实现网络处理器动态加载微码的方法,用于解决现有技术中网络处理器指令空间不足的缺陷,在代码规模(机器码)超过指令空间无法下载到网络处理器的情况下保证实现其全部转发功能。
本发明提供一种网络设备,能够解决现有技术中网络处理器指令空间不足的缺陷,在代码规模(机器码)超过指令空间无法下载到网络处理器的情况下保证实现其全部转发功能。
一种实现网络处理器动态加载微码的方法,包括以下步骤A、将需要执行的指令代码从网络处理器的内存中读出,加载到网络处理器的内部预留指令空间;B、执行该指令代码。
其中,步骤A包括A1、将网络处理器中的指令代码进行分割;A2、将部分指令代码存储在网络处理器的内存中。
其中,步骤A1中,将指令代码按其所实现功能及对所述网络处理器的性能影响不同,分割成性能敏感代码和非性能敏感代码。
其中,所述的非性能敏感代码是与转发性能关系不大,对数据包的转发效率没有影响的代码。
其中,所述的性能敏感代码主要用于处理包转发;非性能敏感的代码主要用于资源的创建分配、协议报文及控制报文的处理。
其中,步骤A2中将非性能敏感代码进一步按功能分割后,以外部存储功能单元的形式存储在内存中。
其中,所述的外部存储功能单元是指将分割后的非性能敏感代码构造函数,各函数单独编译并以静态表的方式存储在内存中。
其中,所述的静态表的每个表项都有一个编号,分别对应一个外部存储功能单元,每个表项的大小固定,编号乘以表项的大小得到某个外部存储功能单元的偏移地址,通过将静态表的基址和某个外部存储功能单元的偏移地址相加,就可以得到该外部存储功能单元的绝对地址。
其中,所述的内部预留指令空间采用按需加载的办法,并且只加载即将被执行的指令代码,执行完指令代码后,内部预留指令空间恢复空闲状态。
其中,内部预留指令空间的代码执行完毕后需要返回调用内部预留指令空间的指令地址,可以采用函数的形式调用,这种方式将地址进行压栈处理,函数执行完成后地址自动弹出;或者在内部预留指令空间有效代码的最后面增加实现返回功能的跳转,采用从其它地址跳转到内部预留指令空间执行的方式。
其中,其特征在于,向内部预留指令空间动态写入指令代码时需要申请信号量,且指令代码在内部预留指令空间执行完毕后,再释放掉信号量。
一种网络设备,包括网络处理器,该网络处理器包括指令存储器及内存,该网络处理器中的一部分指令代码存储在内存中,该指令存储器具有一内部预留指令空间,用于动态加载存储在内存中的需要被执行的指令代码。
其中,存储在内存中的指令代码是与转发性能关系不大,对数据包的转发效率没有影响的非性能敏感代码。
其中,所述的非性能敏感代码按功能分割成外部存储功能单元,并以静态表的形式存储在内存中。
其中,所述的静态表的每个表项都有一个编号,分别对应一个外部存储功能单元外部存储功能单元。
本发明的有益效果如下本发明是利用内存容量大的特点,将一部分指令放到内存中存储,同时在指令存储器中开辟空闲的空间,在需要执行的时候,将指令从内存中调到指令存储器空闲的空间中执行,通过复用空闲的指令空间,来解决指令空间不够的问题。


图1为现有技术分布式转发结构示意图;图2为本发明网络处理器的逻辑结构示意图;图3为本发明动态加载微码的流程图。
具体实施例方式
网络处理器的代码一般都是统一编译的,所有代码编译生成一个目标文件,然后全部加载到网络处理器的指令存储器的指令空间中。随着接口类型和功能的增加,实际的代码容量对于有限的指令空间来说是难以承担的。
相对于指令存储器而言,由于网络处理器需要支持多种查表和统计的功能,因此其存放数据的内存(以下简称内存)容量非常大,有片内内存也有片外内存。如果能把一部分指令放到容量相对大的内存中存储,在需要执行的时候从内存中调到指令存储器中执行,则可以复用有限的指令空间,从而解决指令空间不够的问题。
本发明是利用内存容量大的特点,将一部分指令放到内存中存储,同时在指令存储器中开辟空闲的空间,在需要执行的时候,将指令从内存中调到指令存储器空闲的空间中执行,通过复用空闲的指令空间,来解决指令空间不够的问题。
根据代码所实现功能及对网络处理器的性能影响不同,可将网络处理器中运行的代码分割为性能敏感代码和非性能敏感代码。在传统的实现方式中,非性能敏感代码也驻留在指令空间中,并且占用了比较大的空间。如果能把这些非性能敏感代码转移到代码空间之外的内存中,并按照功能的不同进行划分,分别进行存储,需要执行某种功能的代码时,将相应的代码加载到指令存储器中,则可以有效地解决代码空间不足的问题。
请参考图2,是本发明网络处理器的逻辑结构示意图。网络处理器包括一指令存储器及内存,该网络处理器的一部分指令代码存储在内存中,该指令存储器具有一预留内部空间,用于动态加载存储在内存中的需要被执行的指令代码。
指令代码按照其所实现的功能和对网络处理器的性能影响的不同,包括性能敏感代码和非性能敏感代码。性能敏感代码主要用于处理包转发,非性能敏感代码则与转发性能关系不大,对数据包的转发效率没有影响,主要用于对资源的创建分配、协议报文和控制报文的处理等。
本实施方式中,存储在内存中的指令代码是非性能敏感代码。非性能敏感代码按其所执行的功能不同,分别以外部存储功能单元的形式存储在内存中。外部存储功能单元在内存中通过静态表的形式存在,该静态表称为外部存储功能单元表,外部存储功能单元表的每个表项都有一个编号,分别对应一个外部存储功能单元,比如创建freelist的流程调用编号是8的外部存储功能单元,而创建定时器的流程调用编号是9的外部存储功能单元。每个表项的大小固定,编号乘以表项的大小得到某个外部存储功能单元的偏移地址,通过将静态表的基址和某个外部存储功能单元的偏移地址相加,就可以得到该外部存储功能单元的绝对地址。
本发明的网络处理器可以用在需要对数据进行转发的网络设备上,例如路由器等。
请参考图3,本发明网络处理器动态加载微码的过程包括以下的步骤1.代码的分割和存储本实施方式中,将网络处理器中运行的代码分割为性能敏感代码和非性能敏感代码。由于在内存和指令存储器之间搬移指令会影响效率,因此本实施方式中只搬移非性能敏感代码。
非性能敏感代码需要进一步按照功能进行分割,并构造成函数。各个函数单独编译,生成的指令代码以静态表的方式存放在内存中,本发明中将这些函数称为外部存储功能单元。需要执行哪个外部函数时,将相应的指令从内存中读出,并加载到指令空间中特定的位置。
外部存储功能单元在内存中通过静态表的形式存在,这个表称为外部存储功能单元表,该表的每个表项都有一个编号,分别对应一个外部存储功能单元,比如创建freelist的流程调用编号是8的外部存储功能单元,而创建定时器的流程调用编号是9的外部存储功能单元。每个表项的大小固定,编号乘以表项的大小得到某个外部存储功能单元的偏移地址,通过将静态表的基址和某个外部存储功能单元的偏移地址相加,就可以得到该外部存储功能单元的绝对地址。
在指令空间中预留出一部分代码空间,称为内部预留指令空间,以供动态加载外部存储功能单元所使用。内部预留指令空间采用按需加载的办法,并且只加载即将被执行的外部存储功能单元,执行完外部存储功能单元后,内部预留指令空间恢复空闲状态。在以本实施方式所述方法动态加载代码的过程中,所有的外部存储功能单元就是利用这段指令空间实现指令空间复用的。
2.根据外部存储功能单元的编号读出外部存储功能单元的内容,加载到网络处理器的内部预留指令空间,并执行内部预留指令空间加载的代码。
网络处理器需要执行外部存储功能单元对应的功能时,从内存中取出相应要执行的函数,写到内部预留指令空间,然后调用该函数。为了节省指令空间,可以通过编写一个公共的函数实现这个过程。
3.从内部预留指令空间的代码返回内部预留指令空间的代码执行完毕后需要返回调用内部预留指令空间的指令地址,可以采用函数的形式调用,这种方式将地址进行压栈处理,函数执行完成后地址自动弹出。如果不支持函数调用的方式,可以采用从其它地址跳转到内部预留指令空间执行的方式,但是需要在内部预留指令空间有效代码的最后面增加实现返回功能的跳转。
对于多线程并行处理的网络处理器,为了防止多个线程同时访问内部预留指令空间而造成冲突的状况,需要使用信号量进行保护。因此,对于此类网络处理器,向内部预留指令空间动态搬移代码时需要申请信号量,且在外部存储功能单元执行完毕后,再释放掉信号量。
本发明实现了网络处理器通过动态加载非性能敏感代码来复用部分指令空间,从而使全部代码量超过指令空间时,实现全部功能。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种实现网络处理器动态加载微码的方法,包括以下步骤A、将需要执行的指令代码从网络处理器的内存中读出,加载到网络处理器的内部预留指令空间;B、执行该指令代码。
2.如权利要求1所述的方法,其特征在于,步骤A包括A1、将网络处理器中的指令代码进行分割;A2、将部分指令代码存储在网络处理器的内存中。
3.如权利要求2所述的方法,其特征在于,步骤A1中,将指令代码按其所实现功能及对所述网络处理器的性能影响不同,分割成性能敏感代码和非性能敏感代码。
4.如权利要求3所述的方法,其特征在于,所述的非性能敏感代码是与转发性能关系不大,对数据包的转发效率没有影响的代码。
5.如权利要求4所述的方法,其特征在于,所述的性能敏感代码主要用于处理包转发;非性能敏感的代码主要用于资源的创建分配、协议报文及控制报文的处理。
6.如权利要求3所述的方法,其特征在于,步骤A2中将非性能敏感代码进一步按功能分割后,以外部存储功能单元的形式存储在内存中。
7.如权利要求6所述的方法,其特征在于,所述的外部存储功能单元是指将分割后的非性能敏感代码构造函数,各函数单独编译并以静态表的方式存储在内存中。
8.如权利要求7所述的方法,其特征在于,所述的静态表的每个表项都有一个编号,分别对应一个外部存储功能单元,每个表项的大小固定,编号乘以表项的大小得到某个外部存储功能单元的偏移地址,通过将静态表的基址和某个外部存储功能单元的偏移地址相加,就可以得到该外部存储功能单元的绝对地址。
9.如权利要求1所述的方法,其特征在于,所述的内部预留指令空间采用按需加载的办法,并且只加载即将被执行的指令代码,执行完指令代码后,内部预留指令空间恢复空闲状态。
10.如权利要求1所述的方法,其特征在于,内部预留指令空间的代码执行完毕后需要返回调用内部预留指令空间的指令地址,可以采用函数的形式调用,这种方式将地址进行压栈处理,函数执行完成后地址自动弹出;或者在内部预留指令空间有效代码的最后面增加实现返回功能的跳转,采用从其它地址跳转到内部预留指令空间执行的方式。
11.如权利要求1至10任一权利要求所述的方法,其特征在于,向内部预留指令空间动态写入指令代码时需要申请信号量,且指令代码在内部预留指令空间执行完毕后,再释放掉信号量。
12.一种网络设备,包括网络处理器,该网络处理器包括指令存储器及内存,其特征在于,该网络处理器中的一部分指令代码存储在内存中,该指令存储器具有一内部预留指令空间,用于动态加载存储在内存中的需要被执行的指令代码。
13.如权利要求12所述的网络设备,其特征在于,存储在内存中的指令代码是与转发性能关系不大,对数据包的转发效率没有影响的非性能敏感代码。
14.如权利要求13所述的网络设备,其特征在于,所述的非性能敏感代码按功能分割成外部存储功能单元,并以静态表的形式存储在内存中。
15.如权利要求14所述的网络设备,其特征在于,所述的静态表的每个表项都有一个编号,分别对应一个外部存储功能单元外部存储功能单元。
全文摘要
本发明涉及一种实现网络处理器动态加载微码的方法,包括以下步骤将网络处理器中的指令代码进行分割;将分割的其中一部分指令代码存储在内存中;在网络处理器的指令空间中设置内部预留指令空间;将需要执行的指令代码从内存中取出,写入所述的内部预留指令空间并执行相应的功能。本发明利用内存容量大的特点,将一部分指令放到内存中存储,同时在指令存储器中开辟空闲的空间,在需要执行的时候,将指令从内存中调到指令存储器空闲的空间中执行,通过复用空闲的指令空间,来解决指令空间不够的问题。
文档编号G06F12/02GK1858705SQ20061003457
公开日2006年11月8日 申请日期2006年3月18日 优先权日2006年3月18日
发明者董书友, 姚娉 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1