一种对报文进行批量处理的方法和装置
技术领域
本发明属于数据通信领域,更具体地,涉及一种对报文进行批量处理的方法和装置。
背景技术
随着互联网技术的发展、4G的普及以及5G的逐步建设,网络流量越来越大,网络设备的转发性能也面临越来越大的挑战,尤其是采用软转发技术的网络设备所面临的压力也日益凸显,这就对数据包高效转发提出了新的挑战。
传统的基于ASIC(Application Specific Integrated Circuit,简写为ASIC)或NP(Network Processor,简写为NP)的网络设备转发性能高,但相对的研发成本,功能灵活性都有极大的挑战。
因特尔基于X86提出的DPDK(Intel Data Plane Development Kit,简写为DPDK)技术,更极大的提高了数据处理性能和吞吐量,但DPDK只解决了数据报文输入输出的性能瓶颈,而传统的转发框架基于RTC模型的转发性能依旧较低。基于RTC模型的转发方式对cache的利用率较低,CPU的cache(高速缓冲存储器)访问速度远高于内存的访问速度,且会保存最近访问过的少量数据,如果CPU即将访问的数据已经存储在cache中,CPU可直接使用cache中的数据,称之为cache命中,如果cache中不存在该数据,则需要到内存中访问数据,称之为cachemiss,由于cache容量很小,因此cachemiss会导致cache满时的cache替换,将已存储在cache中的数据替换为cachemiss的数据。在转发过程中的cachemiss会导致转发性能降低。一个报文完整的转发流程过长,而cache的容量不足以缓存整个流程访问的所有数据,因此必然导致后续流程cachemiss的数据将之前加载到cache的数据替换出cache,所以当第一个报文处理完成后,第二个报文将无法复用cache中的数据,导致cachemiss频繁,最终导致报文转发处理性能低下。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种对报文进行批量处理的方法和装置,其目的在于报文完整的长处理流程划分为多个短小的子流程,因为该子流程较短小,其访问的数据量不大,足以让cache缓存所有数据,可以将原本每个报文都有一次的cachemiss减少到只有一次,cache的命中率将大为提升,可以提高报文处理效率,进而提升转发性能,由此解决报文转发效率低的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种对报文进行批量处理的方法,所述方法包括:
将报文处理流程划分为多个子流程,并为每个所述子流程分配流程标记;
接收多个待处理报文;
依次为所述待处理报文分配相应的目标流程标记;
根据所述目标流程标记确定目标子流程,基于所述目标子流程对所述待处理报文进行处理,并为所述待处理报文分配后续的目标流程标记,直至完成对所述待处理报文的处理后,将所述待处理报文转发至下游设备。
优选地,所述将报文处理流程划分为多个子流程,并为每个所述子流程分配流程标记包括:
针对每一个报文处理流程,根据报文的协议层次对所述处理流程进行划分,得到多个子流程,并为每个所述子流程分配流程标记。
优选地,所述将报文处理流程划分为多个子流程,并为每个所述子流程分配流程标记还包括:
判断不同的报文处理流程之间是否存在相同的子流程;
若存在相同的子流程,则复用相同的子流程。
优选地,所述依次为所述待处理报文分配相应的目标流程标记包括:
依次对所述待处理报文进行解析,得到所述待处理报文所属的协议号或所述待处理报文的类型;
根据所述待处理报文所属的协议号或所述待处理报文的类型,对所述待处理报文进行分类,为相同类型的所述待处理报文分配相同的目标流程标记,并将具有相同目标流程标记的所述待处理报文按照顺序存储在同一个批处理结构中。
优选地,所述报文处理流程包括以太IP报文处理流程,所述子流程包括:以太头解析、IP处理、原目的mac封装和接口发送。
优选地,所述报文处理流程还包括MPLS报文的处理流程,所述子流程还包括:标签解析和标签查找。
优选地,所述目标子流程为以太头解析,所述根据所述目标流程标记确定目标子流程,基于所述目标子流程对所述待处理报文进行处理,并为所述待处理报文分配后续的目标流程标记,直至完成对所述待处理报文的处理后,将所述待处理报文转发至下游设备包括:
采用所述以太头解析对所述待处理报文进行处理;
获取所述待处理报文的以太报文类型,若以太报文类型含有0x0800字段,则为所述待处理报文为以太IP报文,为所述待处理报分配“IP处理”所对应的流程标记。
优选地,所述方法还包括:若以太报文类型含有0x8847字段,则为所述待处理报文为MPLS报文,为所述待处理报分配“标签解析”所对应的流程标记。
优选地,所述接收多个待处理报文包括:
从DPDK接收队列一次性接收x个所述待处理报文,其中,x=32或64。
按照本发明的另一方面,提供了一种报文处理装置,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行本发明所述的方法。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明提供了一种对报文进行批量处理的方法和装置,该对报文进行批量处理的方法包括:将报文处理流程划分为多个子流程,并为每个所述子流程分配流程标记;接收多个待处理报文;依次为所述待处理报文分配相应的目标流程标记;根据所述目标流程标记确定目标子流程,基于所述目标子流程对所述待处理报文进行处理,并为所述待处理报文分配后续的目标流程标记,直至完成对所述待处理报文的处理后,将所述待处理报文转发至下游设备。
在本发明中,报文完整的长处理流程划分为多个短小的子流程,当一组报文的第一个报文经过子流程处理后,数据被加载到cache中,又因为该子流程较短小,其访问的数据量不大,足以让cache缓存所有数据,因此当该子流程继续处理第二个报文时,就可以复用cache中的数据,同理,这一组报文的所有后续报文,都可以复用cache中的数据。相当于将原本每个报文都有一次的cachemiss减少到只有一次,cache的命中率将大为提升,可以提高报文处理效率,进而提升转发性能。
附图说明
图1是本发明实施例提供的一种对报文进行批量处理的方法的流程示意图;
图2是本发明实施例提供的子流程对报文的处理过程示意图;
图3是本发明实施例提供的另一种对报文进行批量处理的方法的流程示意图;
图4是本发明实施例提供的一种报文处理装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
参阅图1,本实施例提供一种对报文进行批量处理的方法,所述方法包括如下步骤:
步骤101:将报文处理流程划分为多个子流程,并为每个所述子流程分配流程标记。
在本实施例中,将较长的报文处理流程拆分成多个较短的子流程,不同种类的报文所对应的报文处理流程,若要覆盖不同类型的报文,则需要对不同类型的报文处理流程进行子流程划分。
在本实施例中,针对每一个报文处理流程,根据报文的协议层次对所述处理流程进行划分,得到多个子流程,并为每个所述子流程分配流程标记。若不同报文处理流程对应的子流程划分有重叠的话,子流程可复用。具体实现过程为:判断不同的报文处理流程之间是否存在相同的子流程;若存在相同的子流程,则复用相同的子流程。
例如,一个以太IP报文,按照以太报文的协议层次,其完整的报文处理流程为以太头解析、IP处理、原目的mac封装和接口发送,那么可以将这个报文处理流程划分成四个子流程分别为:以太头解析,IP处理,原目的mac封装和接口发送。
一个MPLS报文,按照MPLS报文的协议层次,其完整的报文处理流程为:以太头解析,标签解析,标签查找,原目的mac封装,接口发送,那么可以将这个报文处理流程划分成五个子流程分别为:以太头解析,标签解析,标签查找,原目的mac封装和接口发送。
由于以太IP报文对应的报文处理流程和MPLS报文对应的报文处理流程之间具有相同的子流程(以太头解析、原目的mac封装和接口发送),则可以复用相同的子流程。以太IP报文对应的报文处理流程和MPLS报文对应的报文处理流程所对应的子流程为:子流程P1-以太头解析,子流程P2-IP处理,子流程P3-原目的mac封装,子流程P4-接口发送,子流程P5-标签解析和子流程P6-标签查找。
步骤102:接收多个待处理报文。
其中,从DPDK接收队列一次性接收x个所述待处理报文,其中,x=32或64。每次接收32或64个报文时,对于后续过程比较容易处理,不过每次接收报文的个数可以依据实际情况而定,在此不再具体限定。
步骤103:依次为所述待处理报文分配相应的目标流程标记。
在本实施例中,依次对所述待处理报文进行解析,得到所述待处理报文所属的协议号或所述待处理报文的类型;根据所述待处理报文所属的协议号或所述待处理报文的类型,对所述待处理报文进行分类,为相同类型的所述待处理报文分配相同的目标流程标记,并将具有相同目标流程标记的所述待处理报文按照顺序存储在同一个批处理结构中。即,具有相同流程标记的报文一起批量处理。
步骤104:根据所述目标流程标记确定目标子流程,基于所述目标子流程对所述待处理报文进行处理,并为所述待处理报文分配后续的目标流程标记,直至完成对所述待处理报文的处理,将所述待处理报文转发至下游设备。
在本实施例中,根据所述目标流程标记确定目标子流程,基于所述目标子流程对所述待处理报文进行处理,并按照所述待处理报文的报文类型或协议号对所述待处理报文进行分类,并为所述待处理报文分配后续流程标记,以使所述待处理报文流向下一个子流程。在此需要说明的是,不同报文的后续流程是各子流程所知道的,各子流程根据这一点给不同分类的报文进行后续流程的标记。
举例而言,结合图2,针对每一子流程,每个子流程对应的批处理结构中均分配有一个计数标志i,通过计数标志i来对报文进行计数,依次调用相应的子流程处理被分配至该子流程对应的批处理结构中的每一个报文,在子流程处理过程中:(1)首先令i等于0,然后从批处理结构中依次取出报文,对第i个报文进行该子流程对应的转发业务的处理,然后解析该报文是否有新特征,如果有新特征,则将该报文存入一个新的批处理结构中,如果没有新特征,则将该报文存入拥有相同特征的批处理结构中;(2)然后判断是否还有未处理的报文,若存在未处理的报文,则对计数变量i进行递增,取出下一个报文,对报文进行转发业务的处理和特征解析,直至完成本组报文的处理;若不存在未处理的报文,则该子流程结束。
在实际应用场景下,所述目标子流程为以太头解析,首先采用所述以太头解析对所述待处理报文进行处理;然后获取所述待处理报文的以太报文类型,若以太报文类型含有0x0800字段,则为所述待处理报文为以太IP报文,为所述待处理报分配“IP处理”所对应的流程标记;
若以太报文类型含有0x8847字段,则为所述待处理报文为MPLS报文,为所述待处理报分配“标签解析”所对应的流程标记。
以一组以太IP报文为例:在子流程P1(以太头解析)处理时,子流程P1除了解析每一个报文的以太头之外,还通过以太报文类型对报文进行分类,假如这一组报文的以太报文类型有0x0800(IP报文),0x8847(MPLS报文)两种,那么可以将这组以太报文分为两类,并给第一组0x0800的报文标记其后续处理流程为:子流程P2-IP处理,给第二组0x8847的报文标记其后续处理流程为:子流程P5-标签解析。
在本实施例中,报文完整的长处理流程划分为多个短小的子流程,当一组报文的第一个报文经过子流程处理后,数据被加载到cache中,又因为该子流程较短小,其访问的数据量不大,足以让cache缓存所有数据,因此当该子流程继续处理第二个报文时,就可以复用cache中的数据,同理,这一组报文的所有后续报文,都可以复用cache中的数据。相当于将原本每个报文都有一次的cachemiss减少到只有一次,cache的命中率将大为提升,可以提高报文处理效率,进而提升转发性能。
实施例2:
为了便于理解实施例1的方案,下面结合图3进行举例说明。
假设将报文处理流程划分为n个子流程,各个子流程对应的流程标记分别为P1,P2......Pn,其中,n=8。
从DPDK接收队列一次性接收x个报文,并给报文分配一个初始流程标记,初始流程标记为P1,则采用子流程P1对报文进行处理,并对不同报文进行分类,将分类后的报文称之为class1,class2......classx(最多分为x类,即x个报文各不相同),并给每类报文分配流程标记,以将报文流入下一个子流程,并依次将分类后的报文按先后顺序存放。
在此,假设将报文分为3类(class1,class2和class3),class1所对应的报文的流程标记为P2,则采用子流程P2对报文进行处理,并对报文进行分类,报文被分为class1-1,class1-1所对应的报文的流程标记为P5,采用子流程P5对报文进行处理后,转发至下游设备;class2所对应的报文的流程标记为P3,则采用子流程P3对报文进行处理,并对报文进行分类,报文进一步被分为class2-1和class2-2,报文被分为class2-1,class2-1所对应的报文的流程标记为P6,采用子流程P6对报文进行处理后,转发至下游设备,报文被分为class2-2,class2-2所对应的报文的流程标记为P7,采用子流程P6对报文进行处理后,转发至下游设备;class3所对应的报文的流程标记为P4,则采用子流程P4对报文进行处理,并对报文进行分类,报文被分为class3-1,class3-1所对应的报文的流程标记为P8,采用子流程P8对报文进行处理后,转发至下游设备。
在各个子流程处理完本批次的所有报文后,继续处理下一批报文。
实施例3:
请参阅图4,图4是本发明实施例提供的一种报文处理装置的结构示意图。本实施例的报文处理装置包括一个或多个处理器41以及存储器42。其中,图4中以一个处理器41为例。
处理器41和存储器42可以通过总线或者其他方式连接,图3中以通过总线连接为例。
存储器42作为一种基于对报文进行批量处理的方法的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,上述实施例的方法以及对应的程序指令。处理器41通过运行存储在存储器42中的非易失性软件程序、指令以及模块,从而执行各种功能应用以及数据处理,实现前述实施例的方法。
其中,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器42可选包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至处理器41。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
值得说明的是,上述装置和***内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(Read Only Memory,简写为ROM)、随机存取存储器(Random AccessMemory,简写为RAM)、磁盘或光盘等。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。