本发明涉及一种网络通信领域技术,特别是涉及一种用于网络处理器中引擎分配的实现方法。
背景技术:
网络处理器是经过专门设计和高度优化来实现网络功能的可编程硬件,用于完成报文处理、协议分析、路由转发等通信工作。网络处理器拥有高性能和可编程的优点,支持不断涌现的网络技术。
图1是现有网络处理器的核心组成部分。网络处理器包括数据包解析模块、查找模块、更新转发模块和数据包修改四种模块。每种模块完成不同的任务。其中,数据包解析模块从帧存储器读出帧数据,分类解析后识别并提取关键信息,对信息进行组合构成多个查找关键字。查找模块接收来自查找关键字,对相关表进行查找和管理。更新转发模块根据查找结果决定帧的输出端口、输出队列。数据包修改模块从帧存储器中读出帧,根据需要修改内容后写回帧存储器。
每种模块都可以简单分为三个步骤:分配引擎并接收待处理数据、执行具体功能、保存处理结果传递给后级模块。模块之间需要用较多时间来传输数据。如果每种模块只有一个工作引擎,那么模块之间必须串行工作,处理速度非常慢。因此,每种模块均采用多个工作引擎执行相同的具体功能,并行处理数据,隐藏传输和处理的时间,如图2所示。
传统方法是通过状态机的形式来实现多个引擎的分配,每个周期只有一个引擎有优先权,如果该引擎没有空闲,则它下一个空闲的引擎可以被分配。这种方法只适合在较少引擎数目的场合运用。随着引擎数目的增加,状态机会变得异常复杂,难于管理且不易扩展。
技术实现要素:
本发明所要解决的技术问题是提供一种用于网络处理器中引擎分配的实现方法,其能够快速分配引擎资源,及时接受前级模块传来的数据,避免长时间占用模块,影响数据帧线性收发;不同应用场合灵活选择工作引擎的数目,便于选择处理速度和资源占用的最优情况;后续扩展引擎数目灵活方便,改动小。
本发明是通过下述技术方案来解决上述技术问题的:一种用于网络处理器中引擎分配的实现方法,其特征在于,所述用于网络处理器中引擎分配的实现方法包括以下步骤:
步骤一:根据当前可用的引擎和前一时刻分配的引擎,选择当前选用的工作引擎,将待处理的数据传递到该引擎中;
步骤二:实现多个相同的工作引擎,并行执行具体功能;
步骤三:保存处理结果供后级取用,释放占用的引擎,将空闲寄存器对应位清零。
优选地,所述用于网络处理器中引擎分配的实现方法涉及网络处理器,网络处理器包括解析模块、查找模块、更新转发模块、修改模块,且解析模块、查找模块、更新转发模块、修改模块均支持多个相同、独立的执行单元。
优选地,所述步骤一提供寄存器接口、供软件人员配置引擎数目。
优选地,所述步骤二隐藏数据传输时间,加快数据处理速度。
优选地,所述空闲寄存器反映当前空闲的引擎情况,由模块内部进行维护。
本发明的积极进步效果在于:本发明支持通过寄存器灵活配置实际工作的引擎数目,根据具体应用需求配置引擎数目、平衡资源和速度,实现性能最优;只要有一个以上空闲引擎,就可以接收数据,释放前级模块资源,隐藏模块之间数据传输和处理的时间,提高工作效率;后续引擎数目的扩展方便,只需要简单改动。
附图说明
图1为现有网络处理器的核心处理模块结构图。
图2为现有网络处理器中每种模块处理数据流程图。
图3为本发明用于网络处理器中引擎分配的实现方法的流程图。
具体实施方式
下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。
本发明也涉及网络处理器,网络处理器包括解析模块、查找模块、更新转发模块、修改模块,且四个模块均支持多个相同、独立的执行单元,即工作引擎。
如图3所示,本发明用于网络处理器中引擎分配的实现方法包括以下步骤:
步骤301:根据当前可用的引擎和前一时刻分配的引擎,选择当前选用的工作引擎,将待处理的数据传递到该引擎中;
步骤302:实现多个相同的工作引擎,并行执行具体功能,如解析、查找、更新转发或修改;
步骤303:保存处理结果供后级取用,释放占用的引擎,将FREE寄存器(空闲寄存器)对应位清零。
其中,步骤301提供寄存器接口、供软件人员配置引擎数目。
步骤302隐藏数据传输时间,加快数据处理速度,这样能尽早释放前级模块资源,保证帧的线性收发。
其中,寄存器包括ENABLE寄存器、FREE寄存器(空闲寄存器)、AVALABLE寄存器、SELECT寄存器。上述三个步骤流水执行,隐藏了数据传输和处理的时间,大大提高性能。同时,引擎分配部分实现十分简单,改动极其方便,方便后续扩展。
FREE寄存器反映当前空闲的引擎情况,由模块内部进行维护。在分配引擎后,将FREE寄存器的对应位置1。ENABLE寄存器和FREE寄存器按位与后得到AVAILABLE寄存器,也就是当前实际能使用的引擎情况。基于AVAILABLE寄存器和SELECT寄存器,采用仲裁逻辑(具体实现方式可以不同)得到新的SELECT寄存器值,并将前级传来的待处理数据传递给相应的引擎。传递结束后,释放前级模块资源。只要有一个或一个以上的空闲引擎,就可以继续传递和处理后续数据。某个引擎处理完数据后,会将数据传递给步骤303。此时,释放该引擎,并将FREE寄存器中对应位置1。
以下介绍各个寄存器:
ENABLE(使能)寄存器:当前使能的引擎情况。如bit0=1表示引擎0使能,0表示不使能。以此类推。根据支持的工作引擎数目来配置。如只允许一个引擎工作,那么ENABLE=‘b1;允许2个引擎工作,ENABLE=‘b11,以此类推;
FREE(空闲)寄存器:当前空闲的引擎情况。表示当前各引擎的空闲情况。bit0=1表示引擎0空闲,0表示忙碌。以此类推;
AVAILABLE(可用)寄存器:当前可用的引擎情况。可能有多位为1。由ENABLE寄存器和FREE寄存器按位与得到;
SELECT(选择)寄存器:当前实际选用的引擎情况,某时刻有且仅有1位为1。如Bit0=1表示选用引擎0,以此类推;根据当前SELECT的值和AVALIABLE的值,得到SELECT的新值,也就是由前一时刻选用的引擎和当前可用的引擎情况,得到当前可选用的引擎;
这四个寄存器的位宽可以和当前支持的引擎数目相同,但是,考虑到后续会增加引擎数目,所以将这些寄存器的位宽加大,超过当前支持的引擎数目。
举个例子,当前支持四个引擎,可以将上述寄存器的位宽定为8,此时只要将ENABLE寄存器设成8’b0000_1111。后续如果增加四个引擎,只要将ENABLE寄存器改成8’b1111_1111;如果减少四个引擎,只要将ENABLE寄存器改成8’b0000_1111。其他情况以此类推。表1列出当前支持的引擎数目和ENABLE寄存器的对应值,可以根据需要灵活配置引擎数目,改动很小。
表1
既支持只有一个引擎工作,方便硬件调试定位错误;也支持多个引擎并行工作,隐藏数据传输时间,提高工作效率。在具体应用中,根据实际情况灵活配置引擎数目,比较资源占用和处理速度,选择最优的情况。
某个时刻选择的引擎由前一时刻选择的引擎和当前可用的引擎来共同决定。
初始时刻,ENABLE为全1,FREE为全1,那么AVALIABLE也为全1,所有引擎均可用。一旦前级模块有数据准备好,SELECT仅bit0为1,立即分配到引擎0中处理,将FREE[0]清零。如果前级模块有数据准备好,此时SELECT仅bit1为1,将立即分配到引擎1中处理,将FREE[1]清零。当引擎0工作完成将结果保存好后,释放引擎0,将FREE[0]置1。以此类推,一旦前级模块准备好数据,从可用引擎中选择一个引擎,立即将数据传递到这个引擎中,释放前一级模块资源。
本发明均支持多个相同、独立的执行单元,即工作引擎,执行具体功能,对数据进行并行处理,隐藏模块之间数据的传输时间,加快处理速度,提高工作效率。只要有一个或一个以上的空闲引擎,就允许接收数据,这样能尽快释放前级模块资源,保证帧的线性收发。提供寄存器接口灵活配置工作引擎的数目。支持单引擎模式,即只有一个引擎工作,方便硬件调试定位错误;支持多个引擎并行工作,隐藏传输和处理时间,提高工作效率。在具体应用中,根据实际情况配置引擎数目,平衡资源和速度两者关系,实现性能的最优。监控所有引擎的空闲/忙碌状态,在前一次分配的引擎的基础上,选用一个可用引擎,将前级模块的数据保存到该引擎对应的寄存器中,尽快释放前级模块的资源,保证数据包的线性收发。
综上所述,本发明支持通过寄存器灵活配置实际工作的引擎数目,根据具体应用需求配置引擎数目、平衡资源和速度,实现性能最优;只要有一个以上空闲引擎,就可以接收数据,释放前级模块资源,隐藏模块之间数据传输和处理的时间,提高工作效率;后续引擎数目的扩展方便,只需要简单改动。本发明支持软件根据具体应用灵活配置工作引擎的数目,便于选择处理速度和资源占用的最优情况。
本发明支持灵活配置工作引擎的数目,根据具体应用需求选择合适的引擎数目,平衡资源占用和处理速度。既支持单个引擎工作,便于硬件调试;也支持多个工作引擎并行处理数据,隐藏数据传输的时间。只要有一个或一个以上空闲的引擎就可以接收前一级模块传来的数据,尽快释放前一级模块资源,保证帧的线性收发。本发明对引擎分配的结构进行优化,仅用4个寄存器和简单的仲裁逻辑,实现从当前可用的引擎中选择一个,接收前级模块的数据,加快处理速度,提高资源利用率,实现性能的最优。
以上所述的具体实施例,对本发明的解决的技术问题、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。