CN114363276A - 流量分发方法、装置、终端设备及介质 - Google Patents

流量分发方法、装置、终端设备及介质 Download PDF

Info

Publication number
CN114363276A
CN114363276A CN202111549706.XA CN202111549706A CN114363276A CN 114363276 A CN114363276 A CN 114363276A CN 202111549706 A CN202111549706 A CN 202111549706A CN 114363276 A CN114363276 A CN 114363276A
Authority
CN
China
Prior art keywords
reference count
thread
target
traffic distribution
service
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111549706.XA
Other languages
English (en)
Inventor
董茂培
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing 6Cloud Technology Co Ltd
Beijing 6Cloud Information Technology Co Ltd
Original Assignee
Beijing 6Cloud Technology Co Ltd
Beijing 6Cloud Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing 6Cloud Technology Co Ltd, Beijing 6Cloud Information Technology Co Ltd filed Critical Beijing 6Cloud Technology Co Ltd
Priority to CN202111549706.XA priority Critical patent/CN114363276A/zh
Publication of CN114363276A publication Critical patent/CN114363276A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种流量分发方法、装置、终端设备以及计算机可读存储介质,基于多个线程中的第一线程获取目标报文和目标报文的数据指针,并通过第一线程将数据指针插入至多个线程中的第二线程的无锁队列得到目标无锁队列;通过第一线程对多个业务系统中的第一业务系统进行业务处理,获取关于目标报文的第一引用计数,判断第一引用计数是否满足预设的内存回收条件;若否,则根据目标无锁队列通过第二线程对多个业务系统中的第二业务系统进行业务处理,获取关于目标报文的第二引用计数,并判断第二引用计数是否满足内存回收条件;若判断到第二引用计数满足内存回收条件,则回收目标报文的内存,结束本次流量分发任务。本发明能够提升流量分发效率。

Description

流量分发方法、装置、终端设备及介质
技术领域
本发明涉及数据处理领域,尤其是涉及一种流量分发方法、装置、终端设备以及计算机可读存储介质。
背景技术
网络安全类设备往往内部包含不同业务系统,各个业务系统需要完成对流量报文的实时处理。传统报文捕获机制一般基于libpcap(libpcap是unix/linux平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础)和pfring(PF_RING是Luca研究出来的基于Linux内核级的高效数据包捕获技术),需要从内核态拷贝报文内容并传输至应用层,此种报文捕获方法存在拷贝开销,另外还需要加锁分发,导致在10Gbps(Gbps也称交换带宽,是衡量交换机总的数据交换能力的单位)至40Gbps流量场景下存在性能瓶颈。
基于传统报文捕获机制,在大流量场景下,如100Gbps流量场景下,整个业务系统更会面临业务处理性能严重不足等问题,尤其是综合类安全设备。因为综合类安全设备内部往往包含不同的安全业务引擎,并且每个业务引擎都需要独立处理网络报文,且各个业务引擎的处理网络报文的时间并不协同,所以需要将网络报文拷贝并分发给不同的业务引擎,但是拷贝报文和传输报文会引起较大的性能开销,大幅降低综合类安全设备的处理性能,并导致网络时延过大和网络抖动丢包等问题。
综上,传统流量分发机制下的报文分发和报文回收效率低下,且无法应用于大流量场景下的多业务处理系统。
发明内容
本发明的主要目的在于提供一种流量分发方法、装置、终端设备以及计算机可读存储介质,旨在提升流量分发系统中的流量分发效率。
为实现上述目的,本发明提供一种流量分发方法,所述展示方法包括:
基于多个所述线程中的第一线程获取目标报文和所述目标报文的数据指针,并通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程的无锁队列得到目标无锁队列;
通过所述第一线程对多个所述业务系统中的第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;
若否,则根据所述目标无锁队列通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理,同时获取关于所述目标报文的第二引用计数,并判断所述第二引用计数是否满足所述内存回收条件;
若判断到所述第二引用计数满足所述内存回收条件,则回收所述目标报文的内存,结束本次流量分发任务。
可选地,在所述通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程的无锁队列得到目标无锁队列的步骤之后,还包括:
获取关于所述目标报文的初始引用计数;
所述获取关于所述目标报文的第一引用计数的步骤,包括:
基于所述初始引用计数确定关于所述目标报文的第一引用计数。
可选地,在所述判断所述第一引用计数是否为0的步骤之后,还包括:
若所述第一引用计数为0,则回收所述目标报文的内存。
可选地,所述根据所述目标无锁队列通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理的步骤,包括:
根据所述目标无锁队列中的数据指针获取所述目标报文;
基于所述目标报文通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理。
可选地,所述获取关于所述目标报文的第二引用计数的步骤包括:
基于所述第一引用计数确定关于所述目标报文的第二引用计数。
可选地,在所述判断所述第二引用计数是否满足所述内存回收条件的步骤之后,还包括:
若判断到所述第二引用计数不满足所述内存回收条件,则继续通过多个所述线程中的第三线程对多个所述业务系统中的第三业务系统进行业务处理,同时获取关于所述目标报文的第三引用计数;
判断所述第三引用计数是否满足所述内存回收条件,并得到判断结果,进而根据所述判断结果确定是否需要对所述目标报文的内存进行回收。
可选地,所述基于多个所述线程中的第一线程获取目标报文的步骤,包括:
基于多个所述线程中的第一线程通过预设的数据平面开发套件从预设的网卡队列获取目标报文;
在所述基于多个所述线程中的第一线程通过预设的数据平面开发套件从预设的网卡队列获取目标报文的步骤之前,还包括:
通过所述第一线程对所述数据平面开发套件进行初始化。
为实现上述目的,本发明还提供一种流量分发装置,所述流量分发装置,包括:
插入模块,用于基于多个所述线程中的第一线程获取目标报文和所述目标报文的数据指针,并通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程的无锁队列得到目标无锁队列;
业务处理模块,通过所述第一线程对多个所述业务系统中的第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;
判断模块,用于若否,则根据所述目标无锁队列通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理,同时获取关于所述目标报文的第二引用计数,并判断所述第二引用计数是否满足所述内存回收条件;
回收模块,用于若判断到所述第二引用计数满足所述内存回收条件,则回收所述目标报文的内存,结束本次流量分发任务。
其中,本发明流量分发装置的各个功能模块各自在运行时均实现如上所述的流量分发方法的步骤。
为实现上述目的,本发明还提供一种终端设备,所述终端设备包括:存储器、处理器和存储在所述存储器上并可在所述处理器上运行的流量分发程序,所述流量分发程序被所述处理器执行时实现如上所述的流量分发方法的步骤。
此外,为实现上述目的,本发明还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有流量分发程序,所述流量分发程序被处理器执行时实现如上所述的流量分发方法的步骤。
此外,为实现上述目的,本发明还提供计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如上所述的流量分发方法的步骤。
本发明提供一种流量分发方法、装置、终端设备、计算机可读存储介质以及计算机程序产品,通过基于多个所述线程中的第一线程获取目标报文和所述目标报文的数据指针,并通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程的无锁队列得到目标无锁队列;通过所述第一线程对多个所述业务系统中的第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;若否,则根据所述目标无锁队列通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理,同时获取关于所述目标报文的第二引用计数,并判断所述第二引用计数是否满足所述内存回收条件;若判断到所述第二引用计数满足所述内存回收条件,则回收所述目标报文的内存,结束本次流量分发任务。
相比于现有技术中对报文进行拷贝和加锁的流量分发方式,本发明利用无锁队列缓冲报文的数据指针实现报文零拷贝,并利用引用计数保证报文内存准确回收,实现针对报文的一次捕获多次分发和零拷贝,并且降低了锁冲突,因此,本发明能够提高流量分析系统中的流量分发效率,进而能够提升流量分析系统性能。
附图说明
图1为本发明实施例方案涉及的硬件运行环境的结构示意图;
图2为本发明流量分发方法一实施例的流程示意图;
图3为本发明流量分发方法一实施例涉及到报文分发示意图;
图4为本发明流量分发装置一实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图。
需要说明的是,本发明实施例终端设备可以是用于流量分发的设备,该终端设备具体可以是智能手机、个人计算机和服务器等。
如图1所示,该设备可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的设备结构并不构成对设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及流量分发程序。操作系统是管理和控制设备硬件和软件资源的程序,支持流量分发程序以及其它软件或程序的运行。在图1所示的设备中,用户接口1003主要用于与客户端进行数据通信;网络接口1004主要用于与服务器建立通信连接;而处理器1001可以用于调用存储器1005中存储的流量分发程序,并执行以下操作:
基于多个所述线程中的第一线程获取目标报文和所述目标报文的数据指针,并通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程的无锁队列得到目标无锁队列;
通过所述第一线程对多个所述业务系统中的第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;
若否,则根据所述目标无锁队列通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理,同时获取关于所述目标报文的第二引用计数,并判断所述第二引用计数是否满足所述内存回收条件;
若判断到所述第二引用计数满足所述内存回收条件,则回收所述目标报文的内存。
进一步地,在所述通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程的无锁队列得到目标无锁队列的步骤之后,处理器1001还可以用于调用存储器1005中存储的流量分发程序,还执行以下操作:
获取关于所述目标报文的初始引用计数;
处理器1001还可以用于调用存储器1005中存储的流量分发程序,还执行以下操作:
基于所述初始引用计数确定关于所述目标报文的第一引用计数。
进一步地,在所述判断所述第一引用计数是否满足预设的内存回收条件的步骤之后,还包括:
若所述第一引用计数满足所述内存回收条件,则回收所述目标报文的内存。
进一步地,处理器1001还可以用于调用存储器1005中存储的流量分发程序,执行以下操作:
根据所述目标无锁队列中的数据指针获取所述目标报文;
基于所述目标报文通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理。
进一步地,所述获取关于所述目标报文的第二引用计数的步骤包括:
基于所述第一引用计数确定关于所述目标报文的第二引用计数。
进一步地,在所述判断所述第二引用计数是否满足所述内存回收条件的步骤之后,处理器1001还可以用于调用存储器1005中存储的流量分发程序,还执行以下操作:
若判断到所述第二引用计数不满足所述内存回收条件,则继续通过多个所述线程中的第三线程对多个所述业务系统中的第三业务系统进行业务处理,同时获取关于所述目标报文的第三引用计数;
判断所述第三引用计数是否满足所述内存回收条件,并得到判断结果,进而根据所述判断结果确定是否需要对所述目标报文的内存进行回收。
进一步地,处理器1001还可以用于调用存储器1005中存储的流量分发程序,还执行以下操作:
基于多个所述线程中的第一线程通过预设的数据平面开发套件从预设的网卡队列获取目标报文;
在所述基于多个所述线程中的第一线程通过预设的数据平面开发套件从预设的网卡队列获取目标报文的步骤之前,处理器1001还可以用于调用存储器1005中存储的流量分发程序,还执行以下操作:
通过所述第一线程对所述数据平面开发套件进行初始化。
参照图2,图2为本发明流量分发方法第一实施例的流程示意图。
在本实施例中,提供了流量分发方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以不同于此处的顺序执行所示出或描述的步骤。
步骤S10,基于多个所述线程中的第一线程获取目标报文和所述目标报文的数据指针,并通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程的无锁队列得到目标无锁队列;
需要说明的是,在本实施例中,终端设备在基于多个所述线程中的第一线程从预设的网卡队列获取目标报文之前,需要预先启动第一线程,以通过该第一线程对流量分发系统进行业务处理。并且,除了启动第一线程,还需要启动第二线程、第三线程等,由于每一个业务系统都有一个对应的线程,因此在本实施例中不对线程和业务系统的数量做具体限定。在本实例中的流量分发系统可以为100Gbps流量分发系统,在本实施例中不对流量分发系统做具体限定。本发明不仅适用于10Gbps至40Gbps流量场景,更适用于大流量场景,能够实现多流量场景下的高效流量分发和业务处理。
终端设备在启动第一线程后将根据该第一线程从预设的网卡队列获取目标报文,并获取该目标报文的内存地址,即目标报文的数据指针,进而将该数据指插入第一线程中的无锁队列中,并得到一个包含目标报文数据指针的无锁队列,即目标无锁队列。
需要说明的是,在本实施例中,无锁队列是DPDK(Data Plane Development Kit,数据平面开发套件)中提供的一种线程间通信数据结构。无锁队列是典型的生产者-消费者模型,即,生产者将数据的指针插入到队列头部,消费者从队列尾部取出数据的指针,以对数据进行处理,并且上述过程不断循环进行。在实际使用中会出现多个生产者竞争性地插入数据指针的情况,也会出现多个消费者竞争性取出数据指针的情况,以上两种情况都属于“临界区”冲突。针对该问题,本实施例提出了基于DPDK的无锁队列,该无锁队列提供了多生产者-多消费者API,该API内部设有pinlock,以基于该pinlock进行临界区保护,使用X86体系结构中的汇编指令cmpxchg来保证操作的原子性,该指令将“临界区”冲突交由硬件去处理,替代了传统的软件锁,使得处理效率更高。
进一步地,在上述步骤S10中,“通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程中的无锁队列得到目标无锁队列”之后,还可以包括:
步骤S50,获取关于所述目标报文的初始引用计数;
终端设备在通过第一线程将数据指针插入至第二线程的无锁队列得到目标无锁队列之后,将得到关于目标报文的初始引用计数。
具体地,例如,终端设备在从预设的网卡队列获取目标报文后会默认当前的目标报文的引用计数为1,并在将数据指针插入至第二线程中的无锁队列后调整引用计数为2,即此时的初始引用计数为2。
需要说明的是,在本实施例中,若是除了第一线程和第二线程,还包括第三线程等,那么终端设备在获取到目标报文并默认当前目标报文的引用计数为1后,将该数据指针插入至第二线程中的无锁队列和将数据指针插入至第三线程中的无锁队列的同时,调整目标报文的引用计数为3,即此时的初始引用计数为3。综上,初始引用计数值与线程数目保持一致。
进一步地,本发明流量分发方法,还包括:
步骤S20,通过所述第一线程对多个所述业务系统中第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;
需要说明的是,在本实施例中,预设的内存回收条件可以为目标报文的当前引用计数为0,即,终端设备在判断到目标报文当前的引用计数为0时将回收目标报文的内存。应当理解的是,基于实际应用的不同设计需要,在其它不同的可行实施方式当中,该内存回收条件当然还可以设置为与本实施例不相同的条件内容,本发明流量分发方法并不针对该内存回收条件的具体内容进行限定,只要该条件是用于根据目标报文当前的引用计数判定是否进行内存回收即可。
终端设备在通过第一线程将目标报文的数据指针插入至第二线程的无锁队列中后,将通过该第一线程对第一业务系统进行业务处理,并在完成第一业务系统的业务处理后获取此时相对于初始引用计数的第一引用计数,并判断该第一引用计数是否为0。
需要说明的是,在本实施例中,第一引用计数为0意味着当前业务系统都已处理完毕,终端设备可将目标报文的数据指针进行释放,并回收目标报文的内存。而第一引用计数不为0意味着当前业务系统仍旧有未处理的业务,比如,若此时的第一引用计数为1,表明此时还有一个业务系统的业务未被处理。
进一步地,上述步骤S20中,“获取关于所述目标报文的第一引用计数”,可以包括:
步骤S201,基于所述初始引用计数确定关于所述目标报文的第一引用计数。
需要说明的是,在本实施例中,第一引用计数的值是根据初始引用计数得到的,即终端设备在通过一线程对一业务处理完成后将在初始引用计数的基础上减去1得到当前的引用计数。
具体地,例如,若是初始引用计数为3,终端设备在通过第一线程对第一业务系统进行业务处理的后,需要在初始引用计数为3的基础上减去1得到当前的第一引用计数为2,在此种情况下,终端设备判断到的第一引用计数并不为0。但是,若终端设备在通过第一线程对第一业务进行处理之前,已经完成了通过第二线程对第二业务的处理,和通过第三线程对第三业务的处理,对应的当前的引用计数已经从初始引用计数3变更为1,那么终端设备再通过第一线程对第一业务进行处理后,此时的引用技术将再次变更为0。总的来说,由于在本实施例中不对多个业务系统的业务处理顺序做具体限定,因此终端设备在每完成一次业务处理后都需要判断当前的引用计数是否为0,以确实是否需要获取目标报文的内存。
需要说明的是,在本实施例中,引用计数的实现依赖原子变量和原子操作,在本实施例中,基于Linux系统C语言使用到的原子变量和原子操作有包括:
void atomic_set(atomic_t*v,int i);
int atomic_dec_and_test(atomic_t*v);
void atomic_inc();
其中,硬件体系结构(比如x86)和编译系统(比如linux C编译器)保证了在本实施例中的API实现原子操作的语义,并将该API应用于本实施例中的流量分发系统,并且该流量分发系统适用于各种被动流量分析系统,包括入侵检测系统、全流量安全分系统、网络性能监控以及各类安全运营中心、态势感知、用户行为分析系统的探针子系统等。
进一步地,在上述步骤S20,“判断所述第一引用计数是否满足预设的内存回收条件”之后,还可以包括:
步骤S60,若所述第一引用计数满足所述内存回收条件,则回收所述目标报文的内存。
终端设备在判断到当前关于目标报文的第一引用计数为0后,将确定当前已完成针对所有业务系统的业务处理,可将目标报文的数据指针进行释放,将目标报文的内存进行回收。
需要说明的是,在本实施例中,终端设备判断到当前目标报文的引用计数为0意味着此次流量分发任务已全部完成,即终端设备已对所有业务系统的业务进行了处理,目标报文已无用处,因此需要回收该目标报文的内存,实现高效地报文分发和报文回收,进而提升流量分发系统的处理性能。
进一步地,本发明流量分发方法,还可以包括:
步骤S30,若否,则根据所述目标无锁队列通过所述第二线程对多个所述业务系统中第二业务系统进行业务处理,同时获取关于所述目标报文的第二引用计数,并判断所述第二引用计数是否满足所述内存回收条件;
终端设备在判断到第一引用计数不为0后,将根据目标无锁队列通过第二线程对第二业务系统进行业务处理,并在业务处理完成之后确定当前的目标报文的第二引用计数,同时判断该第二引用计数当前是否为0,以根据判断结果确定是否需要进行下一个业务系统的业务处理。
需要说明的是,在本实施例中,由于在上述步骤S20中已确定了目标报文的第一引用计数不为0,在此基础上,终端设备在通过第二线程对第二业务系统完成业务处理之后,将在该第一引用计数的基础上获取当前的第二引用计数。
进一步地,在上述步骤S30中,“根据所述目标无锁队列通过所述第二线程对预设的第二业务系统进行业务处理”,可以包括:
步骤S301,根据所述目标无锁队列中的数据指针获取所述目标报文;
步骤S302,基于所述目标报文通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理。
终端设备在判断到第一引用数据不为0后,将从目标无锁队列中获取数据指针,进而根据该数据指针获取目标报文,并基于该目标报文通过第二线程对第二业务系统进行业务处理。
需要说明的是,在本实施例中,终端设备基于DPDK套件,利用无锁队列缓冲目标报文的数据指针以实现报文零拷贝。终端设备可通过第一线程将目标报文的数据指针分发至多个业务系统,包括第二业务系统、第三业务系统和第四业务系统等,即除了第一线程所对应的第一业务系统,其它业务系统都可以通过获取数据指针的方式得到目标报文,进而基于目标报文对业务系统中的业务进行处理,实现了报文的一次捕获多次分发和零拷贝,提高了流量分发的效率。
进一步地,上述步骤S30中,“获取关于所述目标报文的第二引用计数”,可以包括:
步骤S303,基于所述第一引用计数确定关于所述目标报文的第二引用计数。
终端设备在通过第二线程对第二业务系统的进行业务处理之后,需要基于第一引用计数变更当前引用计数得到第二引用计数。
需要说明的是,在本实施例中,终端设备在判断到目标报文的第一引用计数不为0时意味着当前仍由待处理的业务系统,因此,终端设备将继续通过第二线程对第二业务系统进行业务处理,并在处理完成后将第一引用计数减去1得到第二引用计数,并当即判断该第二引用计数是否为0。
进一步地,本发明流量分发方法,还可以包括:
步骤S40,若判断到所述第二引用计数满足所述内存回收条件,则回收所述目标报文的内存,结束本次流量分发任务。
终端设备在判断到当前关于目标报文的第二引用计数为0后,将确定当前不存在待处理的业务系统,即所有业务系统的业务已处理完毕,因此可将目标报文的数据指针进行释放,将目标报文的内存进行回收。
需要说明的是,在本实施例中,终端设备判断到当前目标报文的引用计数为0意味着此次流量分发任务已全部完成,即终端设备已对所有业务系统的业务进行了处理,需要回收该目标报文的内存,若是判断到第二引用计数不为0意味着仍有待处理的业务,终端设备需要继续通过相应的线程对业务系统进行处理。
在本实施例中,终端设备在启动第一线程后将根据该第一线程从预设的网卡队列获取目标报文,并获取该目标报文的内存地址,即目标报文的数据指针,和关于目标报文的初始引用计数,进而将该数据指插入第一线程中的无锁队列中,并得到一个包含目标报文数据指针的无锁队列,即目标无锁队列。终端设备通过该第一线程对第一业务系统进行业务处理,并在完成第一业务系统的业务处理后获取此时相对于初始引用计数的第一引用计数,并判断该第一引用计数是否为0。终端设备在判断到当前关于目标报文的第一引用计数为0后,将确定当前已完成针对所有业务系统的业务处理,可将目标报文的数据指针进行释放,将目标报文的内存进行回收。终端设备在判断到第一引用计数不为0后,将根据目标无锁队列通过第二线程对第二业务系统进行业务处理,并在业务处理完成之后确定当前的目标报文的第二引用计数,同时判断该第二引用计数当前是否为0。终端设备在判断到当前关于目标报文的第二引用计数为0后,将确定当前不存在待处理的业务系统,即所有业务系统的业务已处理完毕,因此可将目标报文的数据指针进行释放,将目标报文的内存进行回收。
相比于现有技术中对报文进行拷贝、加锁和传输的方式,本发明基于DPDK利用无锁队列缓冲报文的数据指针实现报文零拷贝,并利用引用计数实现目标报文内存的准确回收,实现针对报文的一次捕获多次分发和零拷贝,并且降低了锁冲突。总的来说,本发明能够实现高效地报文分发和报文回收,进行实现了高性能地流量分发。
进一步地,基于上述本发明流量分发方法的第一实施例,提出本发明流量分发方法的第二实施例。
本实施例与上述第一实施例之间的主要区别在于,在上述步骤S30,“判断所述第二引用计数是否满足所述内存回收条件”之后,还可以包括:
步骤a,若判断到所述第二引用计数不满足所述内存回收条件,则继续通过多个所述线程中的第三线程对多个所述业务系统中的第三业务系统进行业务处理,同时获取关于所述目标报文的第三引用计数;
步骤b,判断所述第三引用计数是否满足所述内存回收条件,并得到判断结果,进而根据所述判断结果确定是否需要对所述目标报文的内存进行回收。
终端设备在判断到第二引用计数不为0时,需要继续通过预设的第三线程对待处理的第三业务系统进行业务处理,并在处理完毕后将基于第二引用计数得到第三引用计数,并判断该第三引用计数是否为0,若是判断到该第三引用计数为0则回收所述目标报文的内存,若判断该第三引用计数不为0,则继续针对剩余的待处理业务系统进行业务处理。
具体地,例如,如图3所示的报文分发示意图,终端设备在通过第一线程将目标报文的数据指针插入至各个其它线程对应的无锁队列后,将通过第一线程对业务系统A进行业务处理得到第一引用计数、通过第二线程对业务系统B进行业务处理得到第二引用计数、通过第三线程对业务系统C进行业务处理得到第三引用计数和通过第四线程对业务系统D进行业务处理得到第四引用计数等,由于在本实施例中不对业务系统的处理顺序做具体限定,终端设备在得到每一个引用计数时都需要判断该引用计数是否为0,只有在判断到当前引用计数为0时才会回收目标报文的内存,不然就继续对下一个待处理的业务系统进行业务处理,直至判断到引用计数为0。
进一步地,上述步骤S10中,“基于多个所述线程中的第一线程获取目标报文”,可以包括:
步骤S101,基于多个所述线程中的第一线程通过预设的数据平面开发套件从预设的网卡队列获取目标报文;
终端设备在启动多个线程后,将基于第一线程去通过DPDK从预设的网卡队列获取所需的目标报文,以通过该第一线程将目标报文的数据指针插入至其余各个线程中的无锁队列。
需要说明的是,在本实施例中,流量分发系统主要适用于安全设备内部包含多个业务系统的场景,其中每个业务系统负责一个独立的业务且相互之间不影响,并且往多个业务系统并行运行,以充分发挥多核cpu的性能优势。通常多核并行架构有多进程和多线程两种方案,多进程方案的优势是进程资源独享且安全性高,但是需要拷贝一份报文,且业务之间通信需要使用进程间通讯,导致性能开销大。而多线程方案优势是业务之间通信效率高,但是无法保障安全性。在本实施例中将多线程方案应用于100Gbps流量分发系统,利用DPDK开发套件捕获目标报文,并利用无锁队列和引用计数将报文分发给各个业务系统,提升了报文分发和报文回收的效率。
进一步地,在上述步骤S101,“基于多个所述线程中的第一线程通过预设的数据平面开发套件从预设的网卡队列获取目标报文”之前,还可以包括:
步骤c,通过所述第一线程对所述数据平面开发套件进行初始化。
终端设备在利用DPDK捕获目标报文之前,需要对该DPDK进行初始化。
需要说明的是,在本实施例中,由于终端设备在检测到当前的目标报文的引用计数为0后,将释放目标报文的数据指针,以及时回收该目标报文的内存,提高流量分发中报文处理的效率。
在本实施例中,终端设备在利用DPDK捕获目标报文之前,需要对该DPDK进行初始化。终端设备在判断到第二引用计数不为0时,需要继续通过预设的第三线程对待处理的第三业务系统进行业务处理,并在处理完毕后将基于第二引用计数得到第三引用计数,并判断该第三引用计数是否为0,若是判断到该第三引用计数为0则回收所述目标报文的内存,若判断该第三引用计数不为0,则继续针对剩余的待处理业务系统进行业务处理。
本发明利用无锁队列和引用计数将报文分发给各个业务系统后,在确认已完成所有业务系统的业务处理后将释放目标报文的指针,进而回收所述目标报文的内存,实现对目标报文的及时回收,提高了报文分发速率和报文回收速率,并释放了系统内存,节约了系统资源。
此外,本发明实施例还提出一种流量分发装置,参照图4,图4为本发明流量分发装置一实施例的功能模块示意图。如图4所示,本发明流量分发装置,包括:
插入模块,用于通过所述第一线程对多个所述业务系统中的第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;
业务处理模块,用于通过所述第一线程对多个所述业务系统中的第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;
判断模块,用于若否,则根据所述目标无锁队列通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理,同时获取关于所述目标报文的第二引用计数,并判断所述第二引用计数是否满足所述内存回收条件;
回收模块,用于若判断到所述第二引用计数满足所述内存回收条件,则回收所述目标报文的内存,结束本次流量分发任务。
进一步地,本发明流量分发装置,还包括:
获取模块,用于获取关于所述目标报文的初始引用计数;
进一步地,所述业务处理模块,包括:
第一确定单元,基于所述初始引用计数确定关于所述目标报文的第一引用计数。
进一步地,本发明流量分发装置,还包括:
回收单元,用于若所述第一引用计数满足所述内存回收条件,则回收所述目标报文的内存。
进一步地,所述判断模块,包括:
第一获取单元,用于根据所述目标无锁队列中的数据指针获取所述目标报文;
第一业务处理单元,用于基于所述目标报文通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理。
进一步地,所述判断模块,还包括:
第二确定单元,用于基于所述第一引用计数确定关于所述目标报文的第二引用计数。
进一步地,本发明流量分发装置,还包括:
第二业务处理单元,用于若判断到所述第二引用计数不满足所述内存回收条件,则继续通过多个所述线程中的第三线程对多个所述业务系统中的第三业务系统进行业务处理,同时获取关于所述目标报文的第三引用计数;
第二确定单元,用于判断所述第三引用计数是否满足所述内存回收条件,并得到判断结果,进而根据所述判断结果确定是否需要对所述目标报文的内存进行回收。
进一步地,所述插入模块,包括:
第二获取单元,用于基于多个所述线程中的第一线程通过预设的数据平面开发套件从预设的网卡队列获取目标报文;
进一步地,本发明流量分发装置,还包括:
初始模块,用于通过所述第一线程对所述数据平面开发套件进行初始化。
本发明流量分发装置的各个功能模块的具体实施方式与上述流量分发方法各实施例基本相同,在此不做赘述。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有流量分发程序,所述流量分发程序被处理器执行时实现如上所述的流量分发方法的步骤。
本发明流量分发装置和计算机可读存储介质的各实施例,均可参照本发明流量分发方法各个实施例,此处不再赘述。
此外,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如以上流量分发方法的任一项实施例所述的流量分发方法的步骤。
本发明计算机程序产品的具体实施例与上述流量分发方法的各实施例基本相同,在此不作赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种流量分发方法,其特征在于,所述流量分发方法应用于流量分发系统,所述流量分发系统包括多个线程,所述流量分发系统与多个业务系统相连接,所述流量分发方法包括以下步骤:
基于多个所述线程中的第一线程获取目标报文和所述目标报文的数据指针,并通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程的无锁队列得到目标无锁队列;
通过所述第一线程对多个所述业务系统中的第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;
若否,则根据所述目标无锁队列通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理,同时获取关于所述目标报文的第二引用计数,并判断所述第二引用计数是否满足所述内存回收条件;
若判断到所述第二引用计数满足所述内存回收条件,则回收所述目标报文的内存,结束本次流量分发任务。
2.如权利要求1所述的流量分发方法,其特征在于,在所述通过所述第一线程将所述数据指针插入至多个所述线程中的第二线程的无锁队列得到目标无锁队列的步骤之后,还包括:
获取关于所述目标报文的初始引用计数;
所述获取关于所述目标报文的第一引用计数的步骤,包括:
基于所述初始引用计数确定关于所述目标报文的第一引用计数。
3.如权利要求1所述的流量分发方法,其特征在于,在所述判断所述第一引用计数是否满足预设的内存回收条件的步骤之后,还包括:
若所述第一引用计数满足所述内存回收条件,则回收所述目标报文的内存。
4.如权利要求1所述的流量分发方法,其特征在于,所述根据所述目标无锁队列通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理的步骤,包括:
根据所述目标无锁队列中的数据指针获取所述目标报文;
基于所述目标报文通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理。
5.如权利要求1至4中任一项所述的流量分发方法,其特征在于,所述获取关于所述目标报文的第二引用计数的步骤包括:
基于所述第一引用计数确定关于所述目标报文的第二引用计数。
6.如权利要求1所述的流量分发方法,其特征在于,在所述判断所述第二引用计数是否满足所述内存回收条件的步骤之后,还包括:
若判断到所述第二引用计数不满足所述内存回收条件,则继续通过多个所述线程中的第三线程对多个所述业务系统中的第三业务系统进行业务处理,同时获取关于所述目标报文的第三引用计数;
判断所述第三引用计数是否满足所述内存回收条件,并得到判断结果,进而根据所述判断结果确定是否需要对所述目标报文的内存进行回收。
7.如权利要求1所述的流量分发方法,其特征在于,所述基于多个所述线程中的第一线程获取目标报文的步骤,包括:
基于多个所述线程中的第一线程通过预设的数据平面开发套件从预设的网卡队列获取目标报文;
在所述基于多个所述线程中的第一线程通过预设的数据平面开发套件从预设的网卡队列获取目标报文的步骤之前,还包括:
通过所述第一线程对所述数据平面开发套件进行初始化。
8.一种流量分发装置,其特征在于,所述流量分发装置应用于流量分发系统,所述流量分发系统包括多个线程,所述流量分发系统与多个业务系统相连接,所述流量分发装置包括:
插入模块,用于通过所述第一线程对多个所述业务系统中的第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;
业务处理模块,用于通过所述第一线程对多个所述业务系统中的第一业务系统进行业务处理,同时获取关于所述目标报文的第一引用计数,并判断所述第一引用计数是否满足预设的内存回收条件;
判断模块,用于若否,则根据所述目标无锁队列通过所述第二线程对多个所述业务系统中的第二业务系统进行业务处理,同时获取关于所述目标报文的第二引用计数,并判断所述第二引用计数是否满足所述内存回收条件;
回收模块,用于若判断到所述第二引用计数满足所述内存回收条件,则回收所述目标报文的内存,结束本次流量分发任务。
9.一种终端设备,其特征在于,所述终端设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的流量分发程序,所述流量分发程序被所述处理器执行时实现如权利要求1至7中任一项所述的流量分发方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有流量分发程序,所述流量分发程序被处理器执行时实现如权利要求1至7中任一项所述的流量分发方法的步骤。
CN202111549706.XA 2021-12-17 2021-12-17 流量分发方法、装置、终端设备及介质 Pending CN114363276A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111549706.XA CN114363276A (zh) 2021-12-17 2021-12-17 流量分发方法、装置、终端设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111549706.XA CN114363276A (zh) 2021-12-17 2021-12-17 流量分发方法、装置、终端设备及介质

Publications (1)

Publication Number Publication Date
CN114363276A true CN114363276A (zh) 2022-04-15

Family

ID=81099607

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111549706.XA Pending CN114363276A (zh) 2021-12-17 2021-12-17 流量分发方法、装置、终端设备及介质

Country Status (1)

Country Link
CN (1) CN114363276A (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110145835A1 (en) * 2009-12-14 2011-06-16 Verisign, Inc. Lockless Queues
CN104834506A (zh) * 2015-05-15 2015-08-12 北京北信源软件股份有限公司 一种采用多线程处理业务应用的方法
CN110719234A (zh) * 2019-10-17 2020-01-21 南京中孚信息技术有限公司 一种基于dpdk的数据包处理方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110145835A1 (en) * 2009-12-14 2011-06-16 Verisign, Inc. Lockless Queues
CN104834506A (zh) * 2015-05-15 2015-08-12 北京北信源软件股份有限公司 一种采用多线程处理业务应用的方法
CN110719234A (zh) * 2019-10-17 2020-01-21 南京中孚信息技术有限公司 一种基于dpdk的数据包处理方法及装置

Similar Documents

Publication Publication Date Title
US8245207B1 (en) Technique for dynamically restricting thread concurrency without rewriting thread code
KR100898315B1 (ko) 인핸스드 런타임 호스팅
CN107766101B (zh) App启动事件的处理方法、装置和设备
EP0783150B1 (en) System, method, storage medium and computer-readable modules for space efficient object locking
US7934220B2 (en) Method and system for optimizing file table usage
EP2645674B1 (en) Interrupt management
US20070011687A1 (en) Inter-process message passing
Tokuda et al. Evaluation of Real-Time Synchronization in Real-Time Mach.
JP2002505471A (ja) 遠隔処理の中断および継続の方法と装置
US9047121B2 (en) System and method for scheduling jobs in a multi-core processor
CN114928579B (zh) 数据处理方法、装置、计算机设备及存储介质
CN113641410A (zh) 一种基于Netty的高性能网关系统的处理方法及系统
CN110851276A (zh) 一种业务请求处理方法、装置、服务器和存储介质
CN112035255A (zh) 线程池资源管理任务处理方法、装置、设备及存储介质
Kalkov et al. Predictable broadcasting of parallel intents in real-time android
WO2021238259A1 (zh) 一种数据传输方法、装置、设备及计算机可读存储介质
CN114363276A (zh) 流量分发方法、装置、终端设备及介质
CN115858123A (zh) 一种多线程任务调度处理方法
CN116360930A (zh) 一种任务处理的方法及装置
US9069625B2 (en) Method of parallel processing of ordered data streams
CN115904644A (zh) 任务调度方法、电子设备和计算机程序产品
CN112181641A (zh) 线程处理方法、装置、设备及存储介质
CN113360525B (zh) 查询请求处理方法、装置及设备、键值查询系统
CN112559054B (zh) 用于同步指令的方法和计算系统
CN104932946B (zh) 用于处理电信网络中的事件的设备和方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20220415

RJ01 Rejection of invention patent application after publication