目标应用的数据包处理方法、装置及电子设备与流程

文档序号:19418101发布日期:2019-12-14 01:08阅读:156来源:国知局
目标应用的数据包处理方法、装置及电子设备与流程

本发明涉及计算机技术领域,尤其是涉及一种目标应用的数据包处理方法、装置及电子设备。



背景技术:

现有的多进程部署计算机软件在运行时,在服务器上部署一个主进程,其他进程为次进程。然而,现有的多进程部署计算机软件在处理网卡发送的数据包时,采用次进程释放完成处理操作的数据包,当次进程异常退出时,会影响软件对数据包的正常处理。因此,现有的数据包处理技术的稳定性还有待提升。



技术实现要素:

本发明实施例的目的在于提供一种目标应用的数据包处理方法、装置及电子设备,较好地提升了数据包处理的稳定性。

第一方面,本发明实施例提供一种目标应用的数据包处理方法,所述方法包括:通过所述目标应用的主进程检测所述目标应用占用的内存池中是否存在目标数据包;所述目标数据包是由所述目标应用的次进程对数据包进行处理操作后得到的;如果是,通过所述主进程释放所述目标数据包所占用的内存。

在可选的实施方式中,所述检测所述目标应用占用的内存池中是否存在目标数据包的步骤,包括:检测所述内存池中是否存在引用计数为0的数据包;如果是,将所述引用计数为0的数据包确定为目标数据包。

在可选的实施方式中,所述释放所述目标数据包所占用的内存的步骤,包括:将所述目标数据包所占用内存的地址确定为目标内存地址,并将所述目标内存地址发送至内存管理队列,以使所述内存池基于所述内存管理队列中的所述目标内存地址接收网卡发送的新的数据包。

在可选的实施方式中,所述方法还包括:从所述内存池中获取未经处理的数据包;从所述目标应用的多个次进程中查找用于处理所述未经处理的数据包的次进程,将查找到的所述次进程作为目标次进程;将所述未经处理的数据包的内存地址通过ring队列发送至所述目标次进程,以使所述目标次进程对所述未经处理的数据包进行处理操作。

在可选的实施方式中,所述处理操作包括:按照预设方式处理数据包且将经处理后的所述数据包的引用计数减1。

第二方面,本发明实施例提供一种目标应用的数据包处理装置,所述装置包括:检测模块,用于通过所述目标应用的主进程检测所述目标应用占用的内存池中是否存在目标数据包;所述目标数据包是由所述目标应用的次进程对数据包进行处理操作后得到的;释放模块,用于在所述内存池中存在目标数据包时,通过所述主进程释放所述目标数据包所占用的内存。

在可选的实施方式中,所述检测模块,进一步用于检测所述内存池中是否存在引用计数为0的数据包;如果存在引用计数为0的数据包,将所述引用计数为0的数据包确定为目标数据包。

在可选的实施方式中,所述释放模块,进一步用于将所述目标数据包所占用内存的地址确定为目标内存地址,并将所述目标内存地址发送至内存管理队列,以使所述内存池基于所述内存管理队列中的所述目标内存地址接收网卡发送的新的数据包s。

第三方面,本发明实施例提供一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述前述实施方式任一项所述的方法。

第四方面,本发明实施例提供一种计算机可读介质,所述计算机可读介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,所述计算机可执行指令促使所述处理器实现前述实施方式任一项所述的方法。

本发明实施例提供了一种目标应用的数据包处理方法、装置及电子设备,在该方法中,首先通过目标应用的主进程检测目标应用占用的内存池中是否存在目标数据包(目标数据包是由目标应用的次进程对数据包进行处理操作后得到的);如果目标应用占用的内存池中存在目标数据包,再通过主进程释放目标数据包所占用的内存。该方法在次进程对数据包完成处理操作后,通过主进程释放目标数据包内存,以便对目标数据包进行实质性释放,缓解了现有技术中次进程异常退出时目标应用无法正常处理数据包的问题,因此,本发明实施例提升了目标应用的数据包处理稳定性。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种数据包处理方法流程图;

图2为本发明实施例提供的一种目标应用的数据包处理方法流程图;

图3为本发明实施例提供的一种次进程数据包处理方法流程图;

图4为本发明实施例提供的一种数据包处理方法流程图;

图5为本发明实施例提供的一种目标应用的数据包处理装置结构示意图;

图6为本发明实施例提供的一种电子设备结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面结合附图,对本发明的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。

现有的数据包处理技术,参见如图1所示的数据包处理方法流程图,图1中的内存池是通过主进程预先申请得到的,内存池包括多块内存和内存池的管理队列(管理队列用于存放内存池中被分为多块内存的内存地址)。网卡接收数据包后,从内存池的管理队列中获取可以存放数据包的内存地址,并将接收到的数据包放置在对应的内存地址中。主进程将网卡接收的数据包a的内存地址传递给次进程,次进程根据数据包a的内存地址,从内存池中获取数据包a,对数据包a处理完成后,将数据包a的内存地址释放回内存池。然而,现有的数据包处理技术,采用次进程释放完成处理操作的数据包,当次进程异常退出时,会影响到对数据包的正常处理。因此,现有的数据包处理技术的稳定性还有待提升。基于此,本发明实施例提供了一种目标应用的数据包处理方法、装置及电子设备,该方法可以应用于提升数据包处理的稳定性。

为便于对本实施例进行理解,首先对本发明实施例所公开的一种目标应用的数据包处理方法进行详细介绍。

参见如图2所示的目标应用的数据包处理方法流程图,该方法可以由运行上述主进程的处理器执行,该方法包括以下步骤:

步骤s202:通过目标应用的主进程检测目标应用占用的内存池中是否存在目标数据包;目标数据包是由目标应用的次进程对数据包进行处理操作后得到的。

上述目标应用为具有多进程部署的计算机软件,该目标应用在运行时在服务器上部署一个主进程,其他进程为次进程(包括多个次进程),例如,该目标应用可以是数据平面开发套件(dpdk,dataplanedevelopmentkit),该dpdk软件为多进程部署软件,主进程负责内存的初始化及内存池的申请,次进程与内存池连接以获取内存池中的数据包。上述目标应用还可以是其他与上述dpdk相类似的多进程部署软件。上述内存池为目标应用开始运行时主进程申请得到的,该内存池包括多个内存块,内存块用于存放数据包。通过目标应用的主进程遍历内存池中的各内存块,检测各内存块中是否存在经过次进程处理完成的数据包,并将经过次进程处理完成的数据包作为目标数据包。

步骤s204:如果是,通过主进程释放目标数据包所占用的内存。

当目标应用的内存池中存在目标数据包时,即内存池中存在经过次进程处理完成的数据包,通过目标应用的主进程将目标数据包所占用的内存进行释放。

本发明实施例提供的上述目标应用的数据包处理方法,在次进程对数据包完成处理操作后,通过主进程释放目标数据包内存,以便对目标数据包进行实质性释放,缓解了现有技术中次进程异常退出时目标应用无法正常处理数据包的问题,因此,该方法提升了目标应用的数据包处理稳定性。

为了快速准确地检测出内存池中是否存在目标数据包,本实施例提供了检测目标应用占用的内存池中是否存在目标数据包的具体实施方式:检测内存池中是否存在引用计数为0的数据包;如果是,将引用计数为0的数据包确定为目标数据包。上述引用计数为0的数据包即为经次进程处理完成的数据包,通过检测内存池存放的数据包中是否存在引用计数为0的数据包,可以快速确定目标数据包及目标数据包所占用内存的内存地址。

为了完全释放目标数据包所占用的内存,本实施例提供了释放目标数据包所占用内存的具体实施方式:将目标数据包所占用内存的地址确定为目标内存地址,并将目标内存地址发送至内存管理队列,以使内存池基于内存管理队列中的目标内存地址接收网卡发送的新的数据包。上述内存管理队列为内存池的内存管理队列,内存管理队列中存储了内存池中各内存块的地址,包括未经次进程处理的数据包占用的内存地址及目标数据包占用的内存地址。由于目标数据包为通过次进程完成处理操作的数据包(目标数据包的引用计数为0),因此,目标数据包所占用的内存块可以接收新的数据包,将目标数据包所占用内存的地址发送至内存管理队列,内存管理队列将目标内存地址标记为可以接收新数据包的内存地址,以使内存池基于内存管理队列中的目标内存地址接收网卡发送的新的数据包,即网卡接收到新的数据包后,将新的数据包放置在目标内存地址中,该目标内存地址为内存池内存管理队列中记录的可以接收新数据包的内存地址。上述放置的新的数据包即为未经次进程处理的数据包,内存池中的目标内存地址放置新的数据包后,内存管理队列将目标内存地址更新为未经次进程处理的数据包占用的内存地址。

在一种具体的实施方式中,本实施例提供的目标应用的数据包处理还包括对未经处理的数据包进行处理的步骤,具体可参照如下步骤(1)~步骤(3)执行:

步骤(1):从内存池中获取未经处理的数据包。根据内存池的内存管理队列中记录的未经次进程处理的数据包占用的内存地址,从内存池中未经次进程处理的数据包占用的内存地址上获取未经处理的数据包。

步骤(2):从目标应用的多个次进程中查找用于处理未经处理的数据包的次进程,将查找到的次进程作为目标次进程。由于上述目标应用包括多个次进程,网卡接收到的数据包可能需要多个次进程对其进行处理,根据未经处理的数据包信息,将目标应用中用于处理该未经处理的数据包的次进程确定为目标次进程。

步骤(3)将未经处理的数据包的内存地址通过ring队列发送至目标次进程,以使目标次进程对未经处理的数据包进行处理操作。上述ring队列的个数与上述次进程的个数相匹配,即ring队列与次进程为一一对应的关系,主进程通过目标次进程的ring队列,将未经处理的数据包的内存地址分别发送至各目标次进程,以使目标次进程从内存池的未经处理的数据包的内存地址上,获取未经处理的数据包进行处理操作。

在一种实施方式中,上述处理操作包括:按照预设方式处理数据包且将经处理后的数据包的引用计数减1。上述目标次进程按照预设方式(可以是常用的数据包处理方式)处理数据包,并将处理后的数据包的引用计数减1。例如,未经处理的数据包b,数据包b的初始引用计数为n,主进程将数据包b的内存地址分别发送至目标次进程后,目标次进程从内存池中获取数据包b后按照预设方式进行处理,每个目标次进程处理后将数据包b的引用计数减1,当n个目标次进程都对数据包b执行处理操作后,即目标应用的次进程完成了处理操作,数据包b的引用计数变为0,数据包b变为目标数据包。

在一种实施方式中,本实施例提供了次进程对数据包的执行处理操作的具体实施方式,参见如图3所示的次进程数据包处理方法流程图,该方法由次进程上的处理器执行,具体可参照如下步骤s302~步骤s308执行:

步骤s302:初始化大页内存。通过初始化大页内存,获取目标应用的主进程用于接收数据包所创建的内存池地址,并使用初始化大页内存生产的内存空间,保证网卡接收数据包的地址空间相同。

步骤s304:查找ring队列,并读取ring队列中的数据包地址。

步骤s306:根据读取到的数据包地址,按照预设方式对数据包进行处理。

步骤s308:对数据包处理后,将处理后的数据包的引用计数减1。

当所有的目标次进程都完成上述步骤s302~步骤s308后,目标应用的次进程完成对数据包的处理操作。

在实际应用中,参见如图4所示的数据包处理方法流程图,可以采用以下方式实现对数据包的处理,该方法由目标应用的主进程上的处理器执行,具体可参照如下步骤s402~步骤s410执行:

步骤s402:初始化大页内存,并在大页内存中创建内存池。该内存池包括多个内存块和内存管理队列。主进程在获取数据包(该数据包为多个网卡接收到的数据包)之前,需要初始化大页内存,以便为创建的内存池提供存放地址空间。

步骤s404:启动网卡,并设置网卡队列。设置网卡队列的个数和网卡队列的长度,启动网卡后,网卡开始接收数据包。

步骤s406:创建与次进程相匹配的ring队列。ring队列用于将数据包从主进程发送至次进程,ring队列的个数与次进程的个数相同,且为一一对应的关系。

步骤s408:重复从内存池中获取网卡接收到的数据包,并将数据包通过ring队列发送至此进程,以使次进程对数据包进行处理操作。

步骤s410:循环遍历内存池中的数据包,将引用计数为0的数据包的内存地址放入内存管理队列。以使内存池根据内存管理队列接收新的数据包,即将新的数据包放置在计数为0的数据包的内存地址上。

本发明实施例提供的上述目标应用的数据包处理方法,主进程可以快速确定目标数据包及目标数据包所占用内存的内存地址,且由主进程完成将目标数据包的内存地址放回内存管理队列的操作,次进程对数据包进行处理后只对数据包的引用计数进行减一操作,提升了数据包处理的可靠性。

现有的数据包处理技术采用次进程释放数据包,次进程将处理完成的数据包的内存地址放入内存管理队列时,次进程需要对内存管理队列生产者的头尾进行修改,当次进程调整生产者的头时,次进程异常退出。此时,次进程还未调整生产者的尾,导致内存管理队列无法正常运行,处于阻塞状态,当内存管理队列满时,网卡无法从内存管理队列获取存放数据包的内存地址,最终导致无法接收网卡数据包。基于上述问题,本发明实施例提供了一种目标应用的数据包处理方法,由主进程完成将次进程处理完成的数据包内存地址放回内存管理队列的操作,次进程对数据包进行处理后只对数据包的引用计数进行减一操作,不会发生内存管理队列的生产者头尾不一致而导致管理队列阻塞的问题,从而避免了次进程异常退出导致的内存管理队列阻塞问题,提升了数据包处理的可靠性。

对应于前述目标应用的数据包处理方法,本发明实施例提供了一种目标应用的数据包处理装置,参见如图5所示的目标应用的数据包处理装置结构示意图,该装置包括:

检测模块51,用于通过目标应用的主进程检测目标应用占用的内存池中是否存在目标数据包;目标数据包是由目标应用的次进程对数据包进行处理操作后得到的。

释放模块52,用于在内存池中存在目标数据包时,通过主进程释放目标数据包所占用的内存。

本发明实施例提供的上述目标应用的数据包处理装置,在次进程对数据包完成处理操作后,通过主进程释放目标数据包内存,以便对目标数据包进行实质性释放,缓解了现有技术中次进程异常退出时目标应用无法正常处理数据包的问题,因此,该装置提升了目标应用的数据包处理稳定性。

在一种实施方式中,上述检测模块51,进一步用于检测内存池中是否存在引用计数为0的数据包;如果存在引用计数为0的数据包,将引用计数为0的数据包确定为目标数据包。

在一种实施方式中,上述释放模块52,进一步用于将目标数据包所占用内存的地址确定为目标内存地址,并将目标内存地址发送至内存管理队列,以使内存池基于内存管理队列中的目标内存地址接收网卡发送的新的数据包。

在一种实施方式中,上述装置还包括:

数据包处理模块,用于从内存池中获取未经处理的数据包;从目标应用的多个次进程中查找用于处理未经处理的数据包的次进程,将查找到的次进程作为目标次进程;将未经处理的数据包的内存地址通过ring队列发送至目标次进程,以使目标次进程对未经处理的数据包进行处理操作。

在一种实施方式中,上述处理操作包括:按照预设方式处理数据包且将经处理后的数据包的引用计数减1。

本发明实施例提供的上述目标应用的数据包处理装置,主进程可以快速确定目标数据包及目标数据包所占用内存的内存地址,且由主进程完成将目标数据包的内存地址放回内存管理队列的操作,次进程对数据包进行处理后只对数据包的引用计数进行减一操作,提升了数据包处理的可靠性。

本实施例所提供的装置,其实现原理及产生的技术效果和前述实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

本发明实施例提供了一种电子设备,如图6所示的电子设备结构示意图,电子设备包括处理器61、存储器62,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例提供的目标应用的数据包处理方法的步骤。

参见图6,电子设备还包括:总线64和通信接口63,处理器61、通信接口63和存储器62通过总线64连接。处理器61用于执行存储器62中存储的可执行模块,例如计算机程序。

其中,存储器62可能包含高速随机存取存储器(ram,randomaccessmemory),也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个通信接口63(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。

总线64可以是isa(industrystandardarchitecture,工业标准体系结构)总线、pci(peripheralcomponentinterconnect,外设部件互连标准)总线或eisa(extendedindustrystandardarchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

其中,存储器62用于存储程序,所述处理器61在接收到执行指令后,执行所述程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器61中,或者由处理器61实现。

处理器61可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器61中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器61可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等。还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现成可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器62,处理器61读取存储器62中的信息,结合其硬件完成上述方法的步骤。

本发明实施例提供了一种计算机可读介质,其中,所述计算机可读介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,所述计算机可执行指令促使所述处理器实现上述实施例所述的目标应用的数据包处理方法。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1