CN106371921B - 一种多线程分析的均衡分流方法 - Google Patents

一种多线程分析的均衡分流方法 Download PDF

Info

Publication number
CN106371921B
CN106371921B CN201610761812.7A CN201610761812A CN106371921B CN 106371921 B CN106371921 B CN 106371921B CN 201610761812 A CN201610761812 A CN 201610761812A CN 106371921 B CN106371921 B CN 106371921B
Authority
CN
China
Prior art keywords
thread
data packet
value
packet
data
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.)
Active
Application number
CN201610761812.7A
Other languages
English (en)
Other versions
CN106371921A (zh
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.)
Kelai Network Technology Co.,Ltd.
Original Assignee
CHENGDU COLASOFT 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 CHENGDU COLASOFT Co Ltd filed Critical CHENGDU COLASOFT Co Ltd
Priority to CN201610761812.7A priority Critical patent/CN106371921B/zh
Publication of CN106371921A publication Critical patent/CN106371921A/zh
Application granted granted Critical
Publication of CN106371921B publication Critical patent/CN106371921B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供了一种多线程分析的均衡分流方法。首先查询当前数据包的四元组信息是否在哈希表中,如果是,则在哈希表找到该数据包实际应该对应的线程序列值,将该数据包直接分配给该线程等待处理;如果否,则查询当前数据包的数据包线程序列值,从数组空间中读取其所对应的待处理的数据包个数是不是最多的一个线程,如果不是则直接分配给线程;如果是,则检查该数据包是不是会话的第一个数据包,如果不是,则将该数据包分配给线程;如果是,则将该数据包分配到当前等待处理的数据个数最少的线程。能够实现对待处理数据包高效、均匀的分配。

Description

一种多线程分析的均衡分流方法
技术领域
本发明涉及一种多线程分析的均衡分流方法,特别是涉及一种适用于网络通信领域的多线程分析的均衡分流方法。
背景技术
在网络分析领域,通常都是通过采集网络通信中的数据包,然后再通过分析数据包的tcp/ip层及具体的应用层数据,进而得到网络中存在的诸如网络性能问题,网络攻击安全问题等相关信息;
在网络数据包分析中,数据包数据通常能达到100W个每秒到最高1000W个每秒;同时按照数据包的tcp/ip的4层协议属性,将具体相同的ip地址对和端口对的相同的数据包,称之为同一个通信会话的数据包;正常网络中将这些数据按照通信会话数来统计,一般会话数能达到10W到最多1000W,不等;在现有的计算机刀片服务器的架构下,为了保证服务器能够对每秒1000W个数据包及1000W通信会话的状态下能够及时处理分析掉,一般都需要充分的利用CPU(电脑处理器)的多核心特性,通过多线程的方式,将数据以通信会话为单位分散在各个分析线程中;
由于每个分析线程处理能力是有限的,而单位时间内的数据包又需要保证被及时的分析处理完,故而必须保证每个分析线程都处理于均衡的状态,所谓均衡的状态,就是指的将单位时间内的数据包,以通信会话聚合形式,保证具有相同通信会话属性的数据包能够分配给相同的线程,同时,保证每个分析线程都能够在单位时间内分析处理完其被分配的数据包;
若分析线程出现了数据包分配不均衡时,将导致某一些分析线程分析过多的数据包,而某些分析线程将分析较少的数据包,进而出现分析很多数据包的线程占用更多的分析时间,使其不能够在单位时间内分析处理完毕,从而拖慢系统整体的分析性能,出现数据包分析处理不及时的问题,这个问题就是系统分析性能问题。
发明内容
本发明要解决的技术问题是提供一种能够对待处理数据包进行高效、均匀分配的多线程分析的均衡分流方法。
本发明采用的技术方案如下:一种多线程分析的均衡分流方法,具体方法为,对于N个线程,从线程0-(N-1),依次为每个线程分配一个线程序列值ThreadIndexID;所述N为大于1的整数;所述线程每个线程用于分析分配得到的数据包;
创建一个数组空间,该数组空间包括N个数组,一一对应N个线程;每个线程所对应的那个数组用于存放该线程当前等待处理的数据个数;当向一个线程投递一个数据包时,该线程所对应的那个数组中用于存放该线程当前等待处理的数据个数值自加;当线程分析完一个数据包时,数组中用于存放该线程当前等待处理的数据个数值自减;
数据包采集线程采集到数据包,按照tcp/ip协议的规范,得到每个数据包的四元组信息,即ip地址对和端口对信息,进而通过哈希算法计算得到每个数据包的哈希值;使用得到的哈希值与分析线程个数求模得到每个数据包关于线程的数据包线程序列值ThreadIndex;所述数据包线程序列值ThreadIndex指示该数据包所应该分配到的实际线程,该实际线程的线程序列值ThreadIndexID等于该数据包线程序列值ThreadIndex;
定义一个用于均匀分流的哈希表,将数据包的四元组信息作为哈希表的key值,用于查询,将该数据包的实际分配线程序列值ThreadIndexID作为哈希表的value值写入;
数据包分配的具体方法步骤为:
S1、查询当前数据包的四元组信息是否在哈希表中,如果是,则找到其在哈希表中对应的value值,从而找到该数据包实际应该对应的线程序列值ThreadIndexID,将该数据包直接分配给该线程等待处理;如果否,则进入下一步;
S2查询当前数据包的数据包线程序列值ThreadIndex,从数组空间中读取其所对应的待处理的数据包个数是不是最多的一个线程,如果不是则直接分配给线程;如果是,进入下一步;
S2、检查该数据包是不是会话的第一个数据包,如果不是,则将该数据包分配给线程;如果是,则将该数据包分配到当前等待处理的数据个数最少的线程,并将该数据包的四元组信息作为key值,实际分配的线程序列值ThreadIndexID作为value值记录在哈希表中。
通过创建的数组空间,检查分析线程的负载,解决不能完全保证数据包分配均匀的问题。
哈希值的目的是尽可能将不同的四元组信息经常处理后得到不的整数,并且尽可能的保证这些整数的离散分布率良好。
如果数据包本身的四元组分布是均匀的,那么基本上所有分析线程都可以得到均匀的数据包数量,但是当四元组分布不均匀时,就会出现某些线程被分配的数据包多,某些线程被分配的数据包少,引起性能问题。通过哈希表保证了数据包的均匀分流。如果哈希表的key值中存在某数据包的四元组信息,则说明该数据包所属于的会话所分配的线程不是其哈希值计算出的线程,被更改过,则需要读取该key值所对应的value值,找到其实际应该分配的线程。
数据包要被分配到别的线程上去时,通过检查该数据包是不是会话的第一个数据包,保证所有数据包进入同一个线程。
其中,哈希值的具体算法为:将ip地址(IPv4为4字节长,IPv6为16字节长)对和端口对数据依次赋值到一个连续的内存数组空间HashData中,初始化一个零的哈希初始值,然后将HashData的每一个字节当做一个uint8_t数据处理,具体处理步骤为:
S01、通过让初始的哈希值与一个素数a的乘积结果加上HashData的第一个字节值,然后产生一个新的哈希值;
S02、然后让上一步中产生的新的哈希值再与所述素数a的乘积的结果加上HashData的下一个字节的值,再产生一个新的哈希值;
S03、重复S02的操作,直至处理完所有HashData的字节,最终产生我们需要的哈希值。
对于内存数组空间HashData,IPv4时,其总字节长度为:4+4+2+2=12字节,IPv6时,其总字节长度为:16+16+2+2=36字节。
所述素数a为131或151或191。
所述素数a为131。
与现有技术相比,本发明的有益效果是:通过创建的数组空间,检查分析线程的负载,解决不能完全保证数据包分配均匀的问题;通过计算哈希值,尽可能将不同的四元组信息经常处理后得到不的整数,并且尽可能的保证这些整数的离散分布率良好;通过哈希表保证了数据包的均匀分流。数据包要被分配到别的线程上去时,通过检查该数据包是不是会话的第一个数据包,保证所有数据包进入同一个线程。
附图说明
图1为本发明其中一实施例的原理示意图。
图2为本发明其中一实施例中内存数组空间HashData结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本说明书(包括摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或者具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
具体实施例1
如图1所示,一种多线程分析的均衡分流方法,具体方法为,对于N个线程,从线程0-(N-1),依次为每个线程分配一个线程序列值ThreadIndexID;所述N为大于1的整数;所述线程每个线程用于分析分配得到的数据包;
创建一个数组空间PacketCounters,该数组空间包括N个数组,一一对应N个线程;每个线程所对应的那个数组用于存放该线程当前等待处理的数据个数;当向一个线程投递一个数据包(即根据数据包的数据包线程序列值ThreadIndex值分配了一个数据包)时,该线程所对应的那个数组中用于存放该线程当前等待处理的数据个数值PacketCounters[ThreadIndex]对应自加;当线程分析完一个数据包时,数组中用于存放该线程当前等待处理的数据个数值PacketCounters[ThreadIndex]对应自减;
数据包采集线程采集到数据包,按照tcp/ip协议的规范,得到每个数据包的四元组信息,即ip地址对和端口对信息,进而通过哈希算法计算得到每个数据包的哈希值;使用得到的哈希值与分析线程个数求模得到每个数据包关于线程的数据包线程序列值ThreadIndex;所述数据包线程序列值ThreadIndex指示该数据包所应该分配到的实际线程,该实际线程的线程序列值ThreadIndexID等于该数据包线程序列值ThreadIndex;
定义一个用于均匀分流的哈希表SplitHashTable,将数据包的四元组信息作为哈希表的key值,用于查询,将该数据包的实际分配线程序列值ThreadIndexID作为哈希表的value值写入;
数据包分配的具体方法步骤为:
S1、查询当前数据包的四元组信息是否在哈希表中,如果是,则找到其在哈希表中对应的value值,从而找到该数据包实际应该对应的线程序列值ThreadIndexID,将该数据包直接分配给该线程等待处理;如果否,则进入下一步;
S2查询当前数据包的数据包线程序列值ThreadIndex,从数组空间中读取其所对应的待处理的数据包个数是不是最多的一个线程,如果不是则直接分配给线程;如果是,进入下一步;
S2、检查该数据包是不是会话的第一个数据包(检查方法是传递四元组信息给线程ID为当前数据包ThreadIndex值的线程,处理线程确定是不是会话的第一个数据包),如果不是,为保证所有数据包进入同一个线程,则将该数据包分配给线程;如果是,则将该数据包分配到当前等待处理的数据个数最少的线程,并将该数据包的四元组信息作为key值,实际分配的线程序列值ThreadIndexID作为value值记录在哈希表中。
具体实施例2
在具体实施例1的基础上,其中,哈希值的具体算法为:将ip地址(IPv4为4字节长,IPv6为16字节长)对和端口对数据依次赋值到一个连续的内存数组空间HashData中,初始化一个零的哈希初始值,然后将HashData的每一个字节当做一个uint8_t数据处理,具体处理步骤为:
S01、通过让初始的哈希值与一个素数a的乘积结果加上HashData的第一个字节值,然后产生一个新的哈希值;
S02、然后让上一步中产生的新的哈希值再与所述素数a的乘积的结果加上HashData的下一个字节的值,再产生一个新的哈希值;
S03、重复S02的操作,直至处理完所有HashData的字节,最终产生我们需要的哈希值。
如图2所示,对于内存数组空间HashData,IPv4时,其总字节长度为:4+4+2+2=12字节,IPv6时,其总字节长度为:16+16+2+2=36字节。
具体实施例3
在具体实施例2的基础上,所述素数a为131。
具体实施例4
在具体实施例2的基础上,所述素数a为151。
具体实施例5
在具体实施例2的基础上,所述素数a为191。

Claims (4)

1.一种多线程分析的均衡分流方法,具体方法为,对于N个线程,从线程0-(N-1),依次为每个线程分配一个线程序列值ThreadIndexID;所述N为大于1的整数;所述线程每个线程用于分析分配得到的数据包;
创建一个数组空间,该数组空间包括N个数组,一一对应N个线程;每个线程所对应的那个数组用于存放该线程当前等待处理的数据个数;当向一个线程投递一个数据包时,该线程所对应的那个数组中用于存放该线程当前等待处理的数据个数值自加;当线程分析完一个数据包时,数组中用于存放该线程当前等待处理的数据个数值自减;
数据包采集线程采集到数据包,按照tcp/ip协议的规范,得到每个数据包的四元组信息,进而得到每个数据包的哈希值;使用得到的哈希值与分析线程个数求模得到每个数据包关于线程的数据包线程序列值ThreadIndex;所述数据包线程序列值ThreadIndex指示该数据包所应该分配到的实际线程,该实际线程的线程序列值ThreadIndexID等于该数据包线程序列值ThreadIndex;
定义一个用于均匀分流的哈希表,将数据包的四元组信息作为哈希表的key值,用于查询,将该数据包的实际分配线程序列值ThreadIndexID作为哈希表的value值写入;
数据包分配的具体方法步骤为:
S1、查询当前数据包的四元组信息是否在哈希表中,如果是,则找到其在哈希表中对应的value值,从而找到该数据包实际应该对应的线程序列值ThreadIndexID,将该数据包直接分配给该线程等待处理;如果否,则进入下一步;
S2查询当前数据包的数据包线程序列值ThreadIndex,从数组空间中读取其所对应的待处理的数据包个数是不是最多的一个线程,如果不是则直接分配给线程;如果是,进入下一步;
S3、检查该数据包是不是会话的第一个数据包,如果不是,则将该数据包分配给线程;如果是,则将该数据包分配到当前等待处理的数据个数最少的线程,并将该数据包的四元组信息作为key值,实际分配的线程序列值ThreadIndexID作为value值记录在哈希表中。
2.根据权利要求1所述的多线程分析的均衡分流方法,其中,哈希值的具体算法为:将ip地址对和端口对数据依次赋值到一个连续的内存数组空间HashData中,其中IPv4为4字节长,IPv6为16字节长,初始化一个零的哈希初始值,然后将HashData的每一个字节当做一个uint8_t数据处理,具体处理步骤为:
S01、通过让初始的哈希值与一个素数a的乘积结果加上HashData的第一个字节值,然后产生一个新的哈希值;
S02、然后让上一步中产生的新的哈希值再与所述素数a的乘积的结果加上HashData的下一个字节的值,再产生一个新的哈希值;
S03、重复S02的操作,直至处理完所有HashData的字节,最终产生我们需要的哈希值。
3.根据权利要求2所述的多线程分析的均衡分流方法,所述素数a为131或151或191。
4.根据权利要求2或3所述的多线程分析的均衡分流方法,所述素数a为131。
CN201610761812.7A 2016-08-31 2016-08-31 一种多线程分析的均衡分流方法 Active CN106371921B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610761812.7A CN106371921B (zh) 2016-08-31 2016-08-31 一种多线程分析的均衡分流方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610761812.7A CN106371921B (zh) 2016-08-31 2016-08-31 一种多线程分析的均衡分流方法

Publications (2)

Publication Number Publication Date
CN106371921A CN106371921A (zh) 2017-02-01
CN106371921B true CN106371921B (zh) 2019-10-29

Family

ID=57901709

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610761812.7A Active CN106371921B (zh) 2016-08-31 2016-08-31 一种多线程分析的均衡分流方法

Country Status (1)

Country Link
CN (1) CN106371921B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107222579A (zh) * 2017-07-25 2017-09-29 郑州云海信息技术有限公司 一种iSCSI协议会话建立的方法及装置
CN108536535A (zh) * 2018-01-24 2018-09-14 北京奇艺世纪科技有限公司 一种dns服务器及其线程控制方法和装置
CN110688203B (zh) * 2018-07-05 2022-05-13 武汉斗鱼网络科技有限公司 一种任务执行方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7257633B2 (en) * 2003-03-03 2007-08-14 Sun Microsystems, Inc. Dynamic allocation of a pool of threads
CN102866922B (zh) * 2012-08-31 2014-10-22 河海大学 一种海量数据多线程并行处理中的负载均衡方法
CN103179116B (zh) * 2013-01-18 2016-02-03 厦门市美亚柏科信息股份有限公司 一种万兆协议解析方法及系统
CN104734993B (zh) * 2013-12-24 2018-05-18 杭州华为数字技术有限公司 数据分流方法及分流器
CN105207946B (zh) * 2015-08-27 2018-05-01 国家计算机网络与信息安全管理中心 一种网络数据包负载均衡和预解析方法

Also Published As

Publication number Publication date
CN106371921A (zh) 2017-02-01

Similar Documents

Publication Publication Date Title
US9397901B2 (en) Methods, systems, and computer readable media for classifying application traffic received at a network traffic emulation device that emulates multiple application servers
CN103391312B (zh) 资源离线下载方法及装置
CN112261094B (zh) 一种报文处理方法及代理服务器
CN106371921B (zh) 一种多线程分析的均衡分流方法
US10795744B2 (en) Identifying failed customer experience in distributed computer systems
CN110719215B (zh) 虚拟网络的流信息采集方法及装置
US9692642B2 (en) Offloading to a network interface card
WO2020224300A1 (zh) 基于用户态协议栈的报文分流方法、装置及系统
CN106357726B (zh) 负载均衡方法及装置
CN107465693B (zh) 请求消息处理方法和装置
US9680774B2 (en) Network interface card offloading
CN108933829A (zh) 一种负载均衡方法及装置
Saino et al. Understanding sharded caching systems
US10123190B2 (en) System and method for testing a CoAP server
CN104333483A (zh) 互联网应用流量识别方法、系统及识别装置
CN109347647A (zh) 群组消息分发方法及装置
CN104333461A (zh) 互联网应用流量识别方法、系统及识别装置
CN104052679A (zh) 网络流量的负载均衡方法和装置
CN106716974B (zh) 访问分发方法、装置及系统
KR101880705B1 (ko) 인터넷을 이용하여 장치정보를 수집하는 시스템 및 그 방법
CN114513465A (zh) 负载均衡方法、负载均衡装置、电子设备和存储介质
EP3993366B1 (en) Network load balancer, request message distribution method, program product and system
Li et al. An parallelized deep packet inspection design in software defined network
US10904719B2 (en) Message shunting method, device and system based on user mode protocol stack
WO2019041499A1 (zh) 数据发送对象的选择方法、装置、计算机设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20210113

Address after: 41401-41406, 14th floor, unit 1, building 4, No. 966, north section of Tianfu Avenue, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu hi tech Zone, Sichuan 610041

Patentee after: Chengdu Kelai Network Technology Co., Ltd

Address before: B6-7, Tianfu Software Park, 99 Tianhua 1st Road, high tech Zone, Chengdu, Sichuan 610041

Patentee before: COLASOFT Co.,Ltd.

TR01 Transfer of patent right
CP03 Change of name, title or address

Address after: 610041 12th, 13th and 14th floors, unit 1, building 4, No. 966, north section of Tianfu Avenue, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan

Patentee after: Kelai Network Technology Co.,Ltd.

Address before: 41401-41406, 14th floor, unit 1, building 4, No. 966, north section of Tianfu Avenue, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu hi tech Zone, Sichuan 610041

Patentee before: Chengdu Kelai Network Technology Co.,Ltd.

CP03 Change of name, title or address