CN111949740B - 基于多核处理器的并行网包分类方法、系统及网络设备 - Google Patents

基于多核处理器的并行网包分类方法、系统及网络设备 Download PDF

Info

Publication number
CN111949740B
CN111949740B CN201910406217.5A CN201910406217A CN111949740B CN 111949740 B CN111949740 B CN 111949740B CN 201910406217 A CN201910406217 A CN 201910406217A CN 111949740 B CN111949740 B CN 111949740B
Authority
CN
China
Prior art keywords
bit vector
network data
bit
dimension
data packet
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
CN201910406217.5A
Other languages
English (en)
Other versions
CN111949740A (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.)
Beijing Scv Technology Co ltd
Institute of Acoustics CAS
Original Assignee
Beijing Scv Technology Co ltd
Institute of Acoustics CAS
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 Scv Technology Co ltd, Institute of Acoustics CAS filed Critical Beijing Scv Technology Co ltd
Priority to CN201910406217.5A priority Critical patent/CN111949740B/zh
Publication of CN111949740A publication Critical patent/CN111949740A/zh
Application granted granted Critical
Publication of CN111949740B publication Critical patent/CN111949740B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/285Clustering or classification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供了基于多核处理器的并行网包分类方法、系统及网络设备,所述方法包括:接收网络数据包并放入队列,对该网络数据包进行预处理;多核处理器的多个核心同时以主动循环方式,采用相同的匹配过程对队列的网络数据包逐一进行分类处理,按照网络数据包输入顺序输出网络数据包的匹配分类结果。本发明提出了一种包内级别并行的多核并行网包分类方法,可以保证网络数据包输入与输出顺序一致,不会出现乱序,同时能消除多核间的竞争开销,充分发挥多核并行的性能优势;还可以实现无竞争的包内级别并行多核网包分类,充分发挥多核处理器多核并行的效率优势,加速网包分类过程。

Description

基于多核处理器的并行网包分类方法、系统及网络设备
技术领域
本发明涉及网络通信领域,具体涉及基于多核处理器的并行网包分类方法、系统及网络设备。
背景技术
网包分类技术是指对接收到的数据流中的网包与分类器中的规则集进行匹配,并根据所匹配的规则对应的动作类型对网包进行相应操作处理。分类器是一系列规则或者策略的集合,每一条分类规则都指定一个类别或者是一条特定的流,将收到的网包头部中特定的字段与规则集中对应的字段相比较匹配,可以判断该包符合哪些规则,进而判断其所属于的类别或网络流。许多网络服务都需要包分类功能,比如路由,防火墙,网络计费,服务质量(QOS)保证,虚拟专网(VPN)等等。随着网络技术的飞速发展,网络流量和带宽都在不断增长,对网络设备的处理能力提出了越来越高的要求。作为网络中最基本、应用最广泛的功能之一,包分类性能逐渐成为各类网络应用的瓶颈,亟待提高。
在一些性能要求较高的网络设备中,大多采用TCAM(Ternary contentaddressable memory,三态内容寻址存储器)或者FPGA等专用硬件来处理网包分类问题,然而专用硬件往往价格昂贵,开发周期长,而且往往存储空间比较宝贵,不适于较大的规则集,极大限制了硬件网包分类方案的适用性,因此许多基于软件的网包分类方法也在不断发展,以求同时满足高效与灵活的要求。软件的网包分类方法主要有两类,一类是利用决策树结构进行分类,另一类是基于分治的思想将网包分类问题分解为多个复杂度较低的子问题,再将通过子问题的解得到网包分类的结果。
软件的网包分类方法主要关注的是分类规则集的结构特性,并使用相应的数据结构对规则集进行构建,较少关注实际承担分类工作的处理器的体系结构,尤其对多核处理器的多核并行特性没有充分考虑。在多核处理器上对软件网包分类方法进行并行化扩展时,可以分为包级并行和包内级别并行两种并行方式:包级并行每个处理核心处理不同的网包,多个核心可以同时处理多个网包,实现并行加速;而包内级别的并行使用多个核心处理同一个网包,缩短单个网包的处理时间,使得相同时间使用多个处理核心可以处理更多的网包,实现并行加速。包级别的并行,无法保证输出顺序与输入顺序一致。而包内级别的并行,往往会带来包内共享资源的互斥访问和竞争开销,影响多核并行的效率。
发明内容
本发明的目的在于克服目前软件网包分类方法在多核处理器上并行化时,包级别并行方式输出与输入顺序不一致的问题以及包内级别并行方式大量的多核竞争开销导致并行效果不理想的问题,提出了一种基于多核处理器的并行网包分类方法,该方法针对基于规则集的网包查找匹配,将规则集的多个域分解为多个维度,对网络数据包进行规则匹配分类时,先在每个维度上分别进行查找,得出每个维度的子结果,再将所有维度的查找结果合并,得到最终匹配结果。多维查找和合并过程使用多核同时尽力而为的主动循环方式,实现无竞争开销的包内级别并行,提高网包分类的速度,同时保证输入与输出顺序一致。
为了实现上述目的,本发明提出了一种基于多核处理器的并行网包分类方法,所述方法包括:
接收网络数据包并放入队列,对该网络数据包进行预处理;
多核处理器的多个核心同时以主动循环方式,采用相同的匹配过程对队列的网络数据包逐一进行分类处理,按照网络数据包输入顺序输出网络数据包的匹配分类结果。
作为上述方法的一种改进,所述方法还包括:预先将规则集的多个域分解为多个维度的子集;具体包括:
将规则集的所有域以一定的比特长度为单位分解成多个子块,每个子块为一个维度;
列举每个维度上所有可能的取值空间,作为查找空间;为每个维度设置一个与查找空间长度相同的查找表,表中每个取值都对应一个位向量,并将位向量初始化为全0;
遍历每个维度的所有取值,将每个取值与规则集中相应维度下的所有规则逐一比对,当取值满足某条规则,则其对应位向量中的相应比特位置1,不满足则置0,得出该取值对应的位向量,遍历结束后,每个维度的查找表中的每一个取值对应的位向量都记录了其满足的规则。
作为上述方法的一种改进,所述队列为一个先进先出的任务队列,该队列使用多核共享内存,多个核心可并行访问。
作为上述方法的一种改进,所述对该网络数据包进行预处理,具体包括:
将每个网络数据包的头部中用于规则匹配的域按照规则集的方式分解为多个维度,记录每个维度的取值;
为该网络数据包的每个维度分配位向量指针,位向量指针初始化为null;
为该网络数据包的每个维度分配标记变量,初始化为0,表示该维度的位向量“未被标记”。
作为上述方法的一种改进,所述方法还包括:预先设置使用多核处理器中核心的数量。
作为上述方法的一种改进,所述多核处理器的多个核心同时以主动循环方式,采用相同的匹配过程对队列的网络数据包逐一进行分类处理,按照网络数据包输入顺序输出网络数据包的匹配分类结果;具体包括:
步骤1)从队列中读取第一个网络数据包;
步骤2)从为该网络数据包分配的第一个位向量开始逐一检查每一个位向量是否被标记,如果该位向量已经被标记,则直接检查下一个,如果找到没有被标记的位向量,则执行步骤3),如果一直检查到当前网络数据包的最后一个位向量,则执行步骤9);
步骤3)检查该位向量指针是否为当前网络数据包的最终位向量,即其它所有位向量均被标记且指针为null,如果该位向量是当前网络数据包的最终位向量,则执行步骤8),否则执行步骤4);
步骤4)记下这个位向量的编号,并从下一个位向量开始继续搜索当前网络数据包内第二个未被标记的位向量,如果找到,则记下其编号,并执行步骤5),如果没找到,则执行步骤9);
步骤5)将得到的两个未被标记的位向量标记为“正在处理”,即将对应的标记变量置1;
步骤6)检查这两个位向量指针是否为null,如果是,则记录的对应维度的取值,从这一维度的查找表中找出其位向量的值,将该位向量的值拷贝一份,并修改值为null的位向量指针,指向对应的拷贝;
步骤7)将这两个位向量合并,即执行按位与运算,合并结果存放在其中一个位向量中,成为新的位向量,并清除这个新位向量的标记,即将对应的标记变量置0,另一个位向量指针置为null,并且保持标记状态,然后返回步骤1);
步骤8)当前网络数据包的匹配结束,将其最终的位向量中从最低位起的第一个置1位对应的规则作为当前网络数据包的匹配分类结果并输出,然后将该网络数据包从队列移除,并返回步骤1),如果最终位向量为全0,则没有可匹配的规则,直接将网包从队列中移除并返回步骤1);
步骤9)放弃处理当前网络数据包,检查是队列中下一个包是否为空,如果是,则返回步骤1),如果否,则进入下一个网络数据包,并返回步骤2)。
此外,本发明还提供了一种基于多核处理器的并行网包分类系统,所述系统包括:
域分解模块,用于将规则集的多个域分解为多个维度的子集,为每个维度建立一个查找表;
接收模块,用于接收网络数据包并放入队列;
预处理模块,用于对该网络数据包进行预处理;和
分类处理模块,运行在多核处理器使用的每个核心上,用于在每个维度上对队列的网络数据包逐一进行匹配分类处理,按照网络数据包输入顺序输出网络数据包的匹配分类结果。
作为上述系统的一种改进,所述域分解模块包括:
维度生成单元,用于将规则集的每个域以一定的比特长度为单位分解成多个子块,每个子块为一个维度;
查找表生成单元,用于列举每个维度上所有可能的取值空间,作为查找空间;为每个维度安排一个与查找空间长度相同的查找表,表中每个取值都对应一个位向量,并将位向量初始化为全0;和
查找表更新单元,用于遍历每个维度的所有取值,将每个取值与规则集中相应维度下的所有规则逐一比对,当取值满足某条规则,则其对应位向量中的相应比特位置1,不满足则置0,得出该取值对应的位向量,遍历结束后,每个维度的查找表中的每一个取值对应的位向量都记录了其满足的规则。
作为上述系统的一种改进,所述预处理模块具体包括:
分解单元,用于将每个网络数据包的头部中用于规则匹配的域按照规则集的方式分解为多个维度,记录每个维度的取值;
位向量初始化单元,用于为该网络数据包的每个维度分配位向量指针,位向量指针初始化为null;和
标记变量初始化单元,用于为该网络数据包的每个维度分配标记变量,初始化为0,表示该维度的位向量“未被标记”。
本发明还提供了一种网络设备,包括存储器、多核处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述多核处理器执行所述计算机程序时实现上述的方法。
本发明的优势在于:
1、针对网包分类多核并行扩展的问题,本发明提出一种包内级别并行的多核并行网包分类方法,可以保证输入与输出顺序一致,不会出现乱序,同时能消除多核间的竞争开销,充分发挥多核并行的性能优势;
2、本发明的方法可以实现无竞争的包内级别并行多核网包分类,充分发挥多核处理器多核并行的效率优势,加速网包分类过程,同时保证输出域输入顺序一致,克服了包级别并行方式输出与输入顺序不一致的问题以及包内级别并行方式大量的多核竞争开销导致并行效果不理想的问题;
3、本发明的方法能够实现每个核对其他核的存在无感知,多核间无通信、无等待、无竞争,并行效率高,而且可以自动适应不同核心数目,在改变使用核心数量时,无需进行额外的设置和调整,而且对规则集中域的数量没有限制,可以适应多种类型的规则集。
附图说明
图1为本发明的实施例1的方法的整体步骤流程图;
图2为本发明实施例1的方法的每个核心的循环流程图;
图3为本发明实例中规则集示意图;
图4为本发明实例中规则集分解为多个维度的示意图;
图5为本发明实例中查找表的示意图;
图6为本发明实例中多核同时对网包进行分类过程的示意图;
图7为本发明实例中每个网包分类过程的示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细的说明。
本发明涉及一种基于多核处理器的并行网包分类方法,所述方法针对基于规则集的网包分类匹配,将规则集的多个域分解为多个维度,对网络数据包进行规则匹配时,先在每个维度上分别进行查找,得出每个维度的子结果,再将所有维度的查找结果使用多核进行并行合并,得到最终匹配结果。多维查找和合并过程使用多核同时尽力而为的主动循环方式,可以将同一个网包的匹配分类过程进行多核并行加速,实现包内级别的并行,不需要复杂的多核调度操作,避免多核并行时产生通信开销和多核间的竞争开销,而且处理核心一直处于工作状态,不会出现空闲等待,提升多核运行效率。另外,包内级别的并行,严格按照网包输入的顺序进行,避免了包级并行可能出现的输出与输入顺序不一致的情况。
如图1所示,本发明的实施例1提供了一种基于多核处理器的并行网包分类方法,该方法包括以下步骤:
步骤1.将规则集的所有域以一定的比特长度为单位分解成多个子块,每个子块为一个维度;
步骤2.列举每个维度上所有可能的取值空间,作为查找空间;
步骤3.为每个维度安排一个与查找空间长度相同的查找表,表中每个取值都对应一个位向量(Bit Vector,BV),并将位向量初始化为全0(位向量为一串由0和1组成的比特串,长度与规则集中总规则数相同,其中每一个比特对应规则集中的一条规则);
步骤4.遍历每个维度的所有取值,将每个取值与规则集中相应维度下的所有规则逐一比对,当取值满足某条规则,则其对应位向量中的相应比特位置1,不满足则置0,得出该取值对应的位向量,遍历结束后,每个维度的查找表中的每一个取值对应的位向量都记录了其满足的规则;
步骤5.接收网包(网络数据包),并按照网包输入的顺序加入到一个先进先出任务队列,该队列使用多核共享内存,可以由多核并行访问,每个网包中用于规则匹配的域按照步骤1的方式分解为多个维度,记录每个维度的取值,并为每个维度分配一个位向量,以指针的形式记录,且指针初始化为null,同时为每个维度分配一个标记变量,初始化为0,表示该维度的位向量“未被标记”;
步骤6.使用多个处理核心以主动循环方式对队列中的网包进行并行分类处理,所有核心独立工作,并从步骤7开始执行相同的循环流程;如图2所示;
步骤7.读取队列中的第一个网包;
步骤8.从为该网包分配的第一个位向量开始逐一检查每一个位向量是否被标记,如果该位向量已经被标记,则直接检查下一个,如果找到没有被标记的位向量,则执行步骤9,如果一直检查到当前网包的最后一个位向量,则执行步骤15;
步骤9.检查该位向量指针是否为当前网包的最终位向量,即其他所有位向量均被标记且指针为null,如果该位向量是当前网包的最终位向量,则执行步骤14,否则执行步骤10;
步骤10.记下这个位向量的编号,并从下一个位向量开始继续搜索当前网包内第二个未被标记的位向量,如果找到,则记下其编号,并执行步骤11,如果没找到,则执行步骤15;
步骤11.将得到的两个未被标记的位向量标记为“正在处理”,即将对应的标记变量置1,避免被其他核心获取;
步骤12.检查这两个位向量指针是否为null,如果是,则根据步骤5记录的对应维度的取值,从这一维度的查找表中找出其位向量的值,将该位向量的值拷贝一份,并修改值为null的位向量指针,指向对应的拷贝;
步骤13.将这两个位向量合并,即执行按位与运算,合并结果存放在其中一个位向量中,成为新的位向量,并清除这个新位向量的标记,即将对应的标记变量置0,另一个位向量指针置为null,并且保持标记状态,然后返回步骤7;
步骤14.当前网包的匹配结束,将其最终的位向量中从最低位起的第一个置1位对应的规则作为当前网包的匹配分类结果,并输出,然后将该网包从队列移除,并返回步骤7,如果最终位向量为全0,则没有可匹配的规则,直接将网包从队列中移除,并返回步骤7;
步骤15.放弃处理当前网包,检查是队列中下一个包是否为空,如果是,则返回步骤7,如果否,则进入下一个网包,并返回步骤8;
为了便于理解,下面结合一个具体的实例,对本发明所述的方法做详细说明。
参照图3,图3为一个五元组规则集,包含5条规则,按照此五元组规则集使用本发明所述方法对网包进行分类的流程包括:
根据所述方法步骤1,将规则集的所有域以一定的比特长度为单位分解成多个子块,每个子块为一个维度;
对于五元组规则集,其源IP、目的IP域由4个字节组成,源端口、目的端口域由2个字节组成,协议号域由1个字节组成,在分解时,以8个比特,即1个字节长度为单位,将IP域分解为4个维度,端口域分解为2个维度,协议号域为1个维度,整个五元组共分解为13个维度,每个维度上的取值都按照原始规则集限定了取值范围,如图4所示。
根据所述方法步骤2,列举每个维度上所有可能的取值空间,作为查找空间;
分解后每个维度包含1个字节,可以有28种可能的取值,即从0到255这256个取值,所以查找空间为0到255。
根据所述方法步骤3,为每个维度安排一个与查找空间长度相同的查找表,表中每个取值都对应一个位向量(Bit Vector,BV),并将位向量初始化为全0;
根据所述方法步骤4,遍历每个维度的所有取值,将每个取值与规则集中相应维度下的所有规则逐一比对,当取值满足某条规则,则其对应位向量中的相应比特位置1,不满足则置0,得出该取值最对应的位向量,遍历结束后,每个维度的查找表中的每一个取值对应的位向量都记录了其满足的规则;
以图4中维度1为例,其初始查找表中所有取值对应的位向量都是全0,对维度1的所有取值遍历,其中取值0满足第0条和第3条规则,对应的位向量为01001b,取值1到82满足0条规则,对应的位向量为00001b,取值83满足第0、1、2、4条规则,对应的位向量为10111b,取值84到255满足第0条规则,对应的位向量为00001b,维度1的查找表如图5所示。
根据所述方法步骤5,接收网包,并按照网包输入的顺序加入到一个先进先出任务队列,每个网包中用于规则匹配的域也按照所述方法步骤1的方式分解为多个维度,记录每个维度的取值,并为每个维度分配一个位向量,以指针的形式记录,且指针初始化为null,同时为每个维度分配一个标记变量,初始化为0,表示该维度的位向量“未被标记”;
为了简化说明,在网包实时分类的实施例中,只使用规则集中源IP和源端口这两个域进行分类,输入的三个网包的源IP和源端口分别为0.83.1.8/253,0.83.6.39/463,0.0.9.237/262,这两个域经过分解之后产生6个维度,每个维度的取值分别为0/83/1/8/0/253,0/83/6/39/1/207,0/0/9/237/1/6,每个网包都分配了6个位向量指针和6个标记变量,位向量指针全部初始化为null,标记变量全为0。
根据所述方法步骤6,使用多个处理核心同时以尽力而为的主动循环方式对队列中的网包进行并行分类处理,所有核心独立工作,并从所述方法步骤7开始执行相同的循环流程;
以三个处理核心为例,图6和图7分别从每个核心的角度和每个网包的角度描述了并行合并的过程,其中图6为多核同时对网包进行分类的过程,图7为每个网包分类的过程,图中的BV1~BV6分别对应每个网包的6个位向量,并用1(1,2)表示第1个网包的第1个和第2个位向量。
根据所述方法步骤7,读取队列中的第一个网包;
三个核心同时读取第一个网包。
根据所述方法步骤8,从网包的第一个位向量开始逐一检查每一个位向量是否被标记,如果该位向量已经被标记,则直接检查下一个,如果找到没有被标记的位向量,则执行所述方法步骤9,如果一直检查到当前网包的最后一个位向量,则执行所述方法步骤15;
根据所述方法步骤9,检查该位向量指针是否为当前网包的最终位向量,即其他所有位向量均被标记且指针为null,如果该位向量是当前网包的最终位向量,则执行所述方法步骤14,否则执行所述方法步骤10;
根据所述方法步骤10,记下这个位向量的编号,并从下一个位向量开始继续搜索当前网包内第二个未被标记的位向量,如果找到,则记下其编号,并执行所述方法步骤11,如果没找到,则执行所述方法步骤15;
根据所述方法步骤11,将得到的两个未被标记的位向量标记为“正在处理”,即将对应的标记变量置1,避免被其他核心获取;
核心1执行所述方法步骤8找到第一个网包的位向量1,继续执行所述方法步骤9判断它不是最终位向量,继而执行所述方法步骤10,得到第一个网包的位向量2,执行所述方法步骤11将位向量1和2标记;
核心2执行所述方法步骤8从位向量1开始检查,位向量1和2被标记,直到位向量3未被标记,继续执行所述方法步骤9判断它不是最终位向量,继而执行步骤10,得到位向量4,执行所述方法步骤11将位向量3和4标记;
核心3执行所述方法步骤8从位向量1开始检查,位向量1到4被标记,直到位向量5未被标记,继续执行所述方法步骤9判断它不是最终位向量,继而执行所述方法步骤10,得到位向量6,执行步骤11将位向量5和6标记;
根据所述方法步骤12,检查这两个位向量指针是否为null,如果是,则根据步骤5记录的对应维度的取值,从这一维度的查找表中找出其位向量的值,将该位向量的值拷贝一份,并修改值为null的位向量指针,指向对应的拷贝;
核心1检查发现位向量1和2指针为null,从其对应维度的查找表中查出其位向量的值,分别为11111b和10111b,将这两个位向量拷贝之后,分别修改位向量1和2的指针,指向对应的拷贝;
核心2检查发现位向量3和4指针为null,从其对应维度的查找表中查出其位向量的值,分别为00011b和01111b,将这两个位向量拷贝之后,分别修改位向量3和4的指针,指向对应的拷贝;
核心3检查发现位向量5和6指针为null,从其对应维度的查找表中查出其位向量的值,分别为11111b和11111b,将这两个位向量拷贝之后,分别修改位向量5和6的指针,指向对应的拷贝;
根据所述方法步骤13,将这两个位向量合并,即执行按位与运算,合并结果存放在其中一个位向量中,成为新的位向量,并清除这个新位向量的标记,即将对应的标记变量置0,另一个位向量指针置为null,并且保持标记状态,然后返回所述方法步骤7;
核心1将位向量1和2合并,结果为10111b,写入位向量1中,并清除位向量1的标记,位向量2指针置为null,保持标记状态,返回所述方法步骤7;
核心2将位向量3和4合并,结果为00011b,写入位向量3中,并清除位向量3的标记,位向量4指针置为null,保持标记状态,返回所述方法步骤7;
核心3将位向量5和6合并,结果为11111b,写入位向量5中,并清除位向量5的标记,位向量6指针置为null,保持标记状态,返回所述方法步骤7;
三个核心都返回所述方法步骤7,重新读取网包1,并继续执行步骤8及后续步骤,此时网包1中位向量1、3、5都非空且未被标记;
核心1执行所述方法步骤8,从网包1中获得位向量1,并执行所述方法步骤9,判断它不是最终位向量,继而执行所述方法步骤10,获得位向量3,执行所述方法步骤11将位向量1和3标记,经过所述方法步骤12检查位向量1和3不为null,进而执行所述方法步骤13进行合并,结果为00011b,写入位向量1并解除标记,同时将位向量3指针置null,返回所述方法步骤7;
核心2执行所述方法步骤8,从网包1中获得位向量5,并执行所述方法步骤9,判断它不是最终位向量,继而执行所述方法步骤10,无法获得第二个未被标记的位向量,转而执行所述方法步骤15,放弃网包1,进入网包2,再重复步骤8到11,从网包2中获得位向量1和2并标记,经过所述方法步骤12检查位向量1和2指针为null,则从查找表中查得位向量分别为11111b和10111b,执行所述方法步骤13进行合并,结果为10111b,写入位向量1并解除标记,同时将位向量2指针置为null,返回所述方法步骤7;
核心3执行所述方法步骤8,从网包1中获得位向量5,并执行所述方法步骤9,判断它不是最终位向量,继而执行所述方法步骤10,无法获得第二个未被标记的位向量,转而执行所述方法步骤15,放弃网包1,进入网包2,再重复所述方法步骤8到11,从网包2中获得位向量3和4并标记,经过所述方法步骤12检查位向量3和4指针为null,则从查找表中查得位向量分别为00101b和01111b,执行所述方法步骤13进行合并,结果为00101b,写入位向量3并解除标记,同时将位向量4指针置为null,返回所述方法步骤7;
三个核心都返回所述方法步骤7,重新开始循环。后续流程与前述过程类似,接下来将简化叙述,只描述关键步骤。
按照前述的步骤流程,核心1从网包中获取位向量1和5并进行合并,得到结果00011b,并写入位向量1,返回所述方法步骤7;
核心2从网包2中获取位向量1和3,经过合并得到结果00101b,并写入位向量1,返回所述方法步骤7;
核心3从网包2中获取位向量5和6,经过合并得到结果11111b并写入位向量5,返回所述方法步骤7;
在新一轮的循环中,核心1从网包1中获取位向量1,根据所述方法步骤9的判断,此时网包1中除了位向量1以外的其他位向量指针全为null,且都被标记,因此位向量1为网包1的最终位向量,执行所述方法步骤14,结束当前网包的分类过程,将其最终的位向量中从最低位起的第一个置1位对应的规则作为当前网包的匹配分类结果,并输出,即网包1的分类结果为匹配规则0,然后将该网包从队列移除,并返回所述方法步骤7;
核心1返回所述方法步骤7之后,网包2成为队列中的第一个包,核心1从网包2中获得位向量1和5,合并后得到00101b,写入位向量1,再次返回所述方法步骤7;
核心2和3同时在对网包2进行分类匹配处理;
再下一轮循环,核心1获取网包2的位向量1,根据所述方法步骤9的判断,此时网包2中除了位向量1以外的其他位向量指针全为null,执行所述方法步骤14,得出网包2的分类结果为匹配规则0,
多个核心不断重复上述循环流程,可以对不断输入的网包进行快速且保序的并行分类处理。每个核心的工作流程是完全主动自驱的,不断地执行相同的循环流程,当一次循环结束,马上开始下一次循环,不需要等待触发条件,也不需要对核心进行调度。所述方法每个核心执行的循环流程中,总是从队列中第一个网包开始,逐个读取为该网包分配的位向量指针,并检查所读取网包中的每个位向量是否被标记。
如果位向量被标记,则立即检测下一个位向量,如果未被标记,首先判断该位向量是否为当前网包的最终位向量,即其他所有位向量均被标记且指针为null,如果是,则该网包的匹配结束,根据此位向量输出该网包的分类结果,然后将该网包从队列头部移除,处理核心重新从队列的第一个网包开始,进入新一次的循环;如果否,则记下这个位向量的编号,并继续检查下一个位向量,直到获得两个未被标记的位向量。如果在当前网包中无法获得两个未被标记的位向量,则立即进入下一个网包继续尝试。所述方法在获得两个未被标记的位向量后,立即将这两个位向量标记为“正在处理”,避免被其他核心获取,然后检查这两个位向量的指针是否为null,如果是,则从这相应的查找表中找到位向量的值,并将这两个位向量合并;如果否则直接合并两个位向量。所述方法将两个位向量的合并结果存放在其中一个位向量中,成为新的位向量,并清除这个新位向量的标记,另一个位向量的指针则置为null,并且保持标记状态,此时处理核心结束一次循环,重新从队列的第一个网包开始,进入新一次的循环。所述方法多个核同时执行尽力而为的主动循环时,核心之间没有同步和通信,每个核对其他核的存在无感知,不需要空闲等待,多个核同时处理同一个网包时不存在竞争开销。
所述方法可以自动适应不同核心数目,在改变使用核心数量时,无需进行额外的设置和调整。所述方法对网包进行实时并行分类时,是保序的,即输出顺序与网包输入顺序一致。
实施例2
本发明的实施例2提供了一种基于多核处理器的并行网包分类系统,所述系统包括:
域分解模块,用于将规则集的多个域分解为多个维度的子集,为每个维度建立一个查找表;
接收模块,用于接收网络数据包并放入队列;
预处理模块,用于对该网络数据包进行预处理;和
分类处理模块,运行在多核处理器使用的每个核心上,用于在每个维度上对队列的网络数据包逐一进行匹配分类处理,按照网络数据包输入顺序输出网络数据包的匹配分类结果。
所述域分解模块包括:
维度生成单元,用于将规则集的每个域以一定的比特长度为单位分解成多个子块,每个子块为一个维度;
查找表生成单元,用于列举每个维度上所有可能的取值空间,作为查找空间;为每个维度安排一个与查找空间长度相同的查找表,表中每个取值都对应一个位向量,并将位向量初始化为全0;和
查找表更新单元,用于遍历每个维度的所有取值,将每个取值与规则集中相应维度下的所有规则逐一比对,当取值满足某条规则,则其对应位向量中的相应比特位置1,不满足则置0,得出该取值对应的位向量,遍历结束后,每个维度的查找表中的每一个取值对应的位向量都记录了其满足的规则。
所述预处理模块具体包括:
分解单元,用于将每个网络数据包的头部中用于规则匹配的域按照规则集的方式分解为多个维度,记录每个维度的取值;
位向量初始化单元,用于为该网络数据包的每个维度分配位向量指针,位向量指针初始化为null;和
标记变量初始化单元,用于为该网络数据包的每个维度分配标记变量,初始化为0,表示该维度的位向量“未被标记”。
实施例3
本发明的实施例3还提供了一种网络设备,包括存储器、多核处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述多核处理器执行所述计算机程序时实现实施例1的方法。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (9)

1.一种基于多核处理器的并行网包分类方法,所述方法包括:
接收网络数据包并放入队列,对该网络数据包进行预处理;
多核处理器的多个核心同时以主动循环方式,采用相同的匹配过程对队列的网络数据包逐一进行分类处理,按照网络数据包输入顺序输出网络数据包的匹配分类结果,具体包括:
步骤1)从队列中读取第一个网络数据包;
步骤2)从为该网络数据包分配的第一个位向量开始逐一检查每一个位向量是否被标记,如果该位向量已经被标记,则直接检查下一个,如果找到没有被标记的位向量,则执行步骤3),如果一直检查到当前网络数据包的最后一个位向量,则执行步骤9);
步骤3)检查该位向量指针是否为当前网络数据包的最终位向量,即其它所有位向量均被标记且指针为null,如果该位向量是当前网络数据包的最终位向量,则执行步骤8),否则执行步骤4);
步骤4)记下这个位向量的编号,并从下一个位向量开始继续搜索当前网络数据包内第二个未被标记的位向量,如果找到,则记下其编号,并执行步骤5),如果没找到,则执行步骤9);
步骤5)将得到的两个未被标记的位向量标记为“正在处理”,即将对应的标记变量置1;
步骤6)检查这两个位向量指针是否为null,如果是,则记录对应维度的取值,从这一维度的查找表中找出其位向量的值,将该位向量的值拷贝一份,并修改值为null的位向量指针,指向对应的拷贝;
步骤7)将这两个位向量合并,即执行按位与运算,合并结果存放在其中一个位向量中,成为新的位向量,并清除这个新位向量的标记,即将对应的标记变量置0,另一个位向量指针置为null,并且保持标记状态,然后返回步骤1);
步骤8)当前网络数据包的匹配结束,将其最终的位向量中从最低位起的第一个置1位对应的规则作为当前网络数据包的匹配分类结果并输出,然后将该网络数据包从队列移除,并返回步骤1),如果最终位向量为全0,则没有可匹配的规则,直接将网包从队列中移除并返回步骤1);
步骤9)放弃处理当前网络数据包,检查队列中下一个包是否为空,如果是,则返回步骤1),如果否,则进入下一个网络数据包,并返回步骤2)。
2.根据权利要求1所述的基于多核处理器的并行网包分类方法,其特征在于,所述方法还包括:预先将规则集的多个域分解为多个维度的子集;具体包括:
将规则集的所有域以一定的比特长度为单位分解成多个子块,每个子块为一个维度;
列举每个维度上所有可能的取值空间,作为查找空间;为每个维度设置一个与查找空间长度相同的查找表,表中每个取值都对应一个位向量,并将位向量初始化为全0;
遍历每个维度的所有取值,将每个取值与规则集中相应维度下的所有规则逐一比对,当取值满足某条规则,则其对应位向量中的相应比特位置1,不满足则置0,得出该取值对应的位向量,遍历结束后,每个维度的查找表中的每一个取值对应的位向量都记录了其满足的规则。
3.根据权利要求2所述的基于多核处理器的并行网包分类方法,其特征在于,所述队列为一个先进先出的任务队列,该队列使用多核共享内存,多个核心可并行访问。
4.根据权利要求3所述的基于多核处理器的并行网包分类方法,其特征在于,所述对该网络数据包进行预处理,具体包括:
将每个网络数据包的头部中用于规则匹配的域按照规则集的方式分解为多个维度,记录每个维度的取值;
为该网络数据包的每个维度分配位向量指针,位向量指针初始化为null;
为该网络数据包的每个维度分配标记变量,初始化为0,表示该维度的位向量“未被标记”。
5.根据权利要求1或2所述的基于多核处理器的并行网包分类方法,其特征在于,所述方法还包括:预先设置使用多核处理器中核心的数量。
6.一种基于多核处理器的并行网包分类系统,其特征在于,所述系统包括:
域分解模块,用于将规则集的多个域分解为多个维度的子集,为每个维度建立一个查找表;
接收模块,用于接收网络数据包并放入队列;
预处理模块,用于对该网络数据包进行预处理;和
分类处理模块,运行在多核处理器使用的每个核心上,用于在每个维度上对队列的网络数据包逐一进行匹配分类处理,按照网络数据包输入顺序输出网络数据包的匹配分类结果,具体包括:
步骤1)从队列中读取第一个网络数据包;
步骤2)从为该网络数据包分配的第一个位向量开始逐一检查每一个位向量是否被标记,如果该位向量已经被标记,则直接检查下一个,如果找到没有被标记的位向量,则执行步骤3),如果一直检查到当前网络数据包的最后一个位向量,则执行步骤9);
步骤3)检查该位向量指针是否为当前网络数据包的最终位向量,即其它所有位向量均被标记且指针为null,如果该位向量是当前网络数据包的最终位向量,则执行步骤8),否则执行步骤4);
步骤4)记下这个位向量的编号,并从下一个位向量开始继续搜索当前网络数据包内第二个未被标记的位向量,如果找到,则记下其编号,并执行步骤5),如果没找到,则执行步骤9);
步骤5)将得到的两个未被标记的位向量标记为“正在处理”,即将对应的标记变量置1;
步骤6)检查这两个位向量指针是否为null,如果是,则记录对应维度的取值,从这一维度的查找表中找出其位向量的值,将该位向量的值拷贝一份,并修改值为null的位向量指针,指向对应的拷贝;
步骤7)将这两个位向量合并,即执行按位与运算,合并结果存放在其中一个位向量中,成为新的位向量,并清除这个新位向量的标记,即将对应的标记变量置0,另一个位向量指针置为null,并且保持标记状态,然后返回步骤1);
步骤8)当前网络数据包的匹配结束,将其最终的位向量中从最低位起的第一个置1位对应的规则作为当前网络数据包的匹配分类结果并输出,然后将该网络数据包从队列移除,并返回步骤1),如果最终位向量为全0,则没有可匹配的规则,直接将网包从队列中移除并返回步骤1);
步骤9)放弃处理当前网络数据包,检查队列中下一个包是否为空,如果是,则返回步骤1),如果否,则进入下一个网络数据包,并返回步骤2)。
7.根据权利要求6所述的基于多核处理器的并行网包分类系统,其特征在于,所述域分解模块包括:
维度生成单元,用于将规则集的每个域以一定的比特长度为单位分解成多个子块,每个子块为一个维度;
查找表生成单元,用于列举每个维度上所有可能的取值空间,作为查找空间;为每个维度安排一个与查找空间长度相同的查找表,表中每个取值都对应一个位向量,并将位向量初始化为全0;和
查找表更新单元,用于遍历每个维度的所有取值,将每个取值与规则集中相应维度下的所有规则逐一比对,当取值满足某条规则,则其对应位向量中的相应比特位置1,不满足则置0,得出该取值对应的位向量,遍历结束后,每个维度的查找表中的每一个取值对应的位向量都记录了其满足的规则。
8.根据权利要求7所述的基于多核处理器的并行网包分类方法,其特征在于,所述预处理模块具体包括:
分解单元,用于将每个网络数据包的头部中用于规则匹配的域按照规则集的方式分解为多个维度,记录每个维度的取值;
位向量初始化单元,用于为该网络数据包的每个维度分配位向量指针,位向量指针初始化为null;和
标记变量初始化单元,用于为该网络数据包的每个维度分配标记变量,初始化为0,表示该维度的位向量“未被标记”。
9.一种网络设备,包括存储器、多核处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述多核处理器执行所述计算机程序时实现权利要求1至5中任一项所述的方法。
CN201910406217.5A 2019-05-15 2019-05-15 基于多核处理器的并行网包分类方法、系统及网络设备 Active CN111949740B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910406217.5A CN111949740B (zh) 2019-05-15 2019-05-15 基于多核处理器的并行网包分类方法、系统及网络设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910406217.5A CN111949740B (zh) 2019-05-15 2019-05-15 基于多核处理器的并行网包分类方法、系统及网络设备

Publications (2)

Publication Number Publication Date
CN111949740A CN111949740A (zh) 2020-11-17
CN111949740B true CN111949740B (zh) 2024-03-26

Family

ID=73336438

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910406217.5A Active CN111949740B (zh) 2019-05-15 2019-05-15 基于多核处理器的并行网包分类方法、系统及网络设备

Country Status (1)

Country Link
CN (1) CN111949740B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080021491A (ko) * 2006-08-31 2008-03-07 영남대학교 산학협력단 차등화 서비스 엠피엘에스망에서 네트워크 프로세서를이용한 플로우별 패킷 처리 방법
CN101478551A (zh) * 2009-01-19 2009-07-08 清华大学 基于多核处理器的多域网包分类方法
CN101714948A (zh) * 2009-10-27 2010-05-26 清华大学 一种多域的网包的分类方法和装置
CN107483451A (zh) * 2017-08-25 2017-12-15 西安电子科技大学 基于串并行结构网络安全数据处理方法及系统、社交网络
CN108200086A (zh) * 2018-01-31 2018-06-22 四川九洲电器集团有限责任公司 一种高速网络数据包过滤装置
CN108494705A (zh) * 2018-03-13 2018-09-04 山东超越数控电子股份有限公司 一种网络报文高速处理系统和方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080021491A (ko) * 2006-08-31 2008-03-07 영남대학교 산학협력단 차등화 서비스 엠피엘에스망에서 네트워크 프로세서를이용한 플로우별 패킷 처리 방법
CN101478551A (zh) * 2009-01-19 2009-07-08 清华大学 基于多核处理器的多域网包分类方法
CN101714948A (zh) * 2009-10-27 2010-05-26 清华大学 一种多域的网包的分类方法和装置
CN107483451A (zh) * 2017-08-25 2017-12-15 西安电子科技大学 基于串并行结构网络安全数据处理方法及系统、社交网络
CN108200086A (zh) * 2018-01-31 2018-06-22 四川九洲电器集团有限责任公司 一种高速网络数据包过滤装置
CN108494705A (zh) * 2018-03-13 2018-09-04 山东超越数控电子股份有限公司 一种网络报文高速处理系统和方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
一种基于IXP2400的多维包分类引擎设计;肖小林;徐成;李克军;;计算机工程与应用(22);全文 *
高性能网包分类理论与算法综述;亓亚烜;李军;;计算机学报(02);全文 *

Also Published As

Publication number Publication date
CN111949740A (zh) 2020-11-17

Similar Documents

Publication Publication Date Title
US9154442B2 (en) Concurrent linked-list traversal for real-time hash processing in multi-core, multi-thread network processors
CN112491901B (zh) 一种网络流量精细化筛选装置及方法
CN111371779B (zh) 一种基于dpdk虚拟化管理系统的防火墙及其实现方法
Taylor Survey and taxonomy of packet classification techniques
US6775737B1 (en) Method and apparatus for allocating and using range identifiers as input values to content-addressable memories
US9009448B2 (en) Multithreaded DFA architecture for finding rules match by concurrently performing at varying input stream positions and sorting result tokens
US8995449B2 (en) Lookup cluster complex
US9531723B2 (en) Phased bucket pre-fetch in a network processor
US7684400B2 (en) Logarithmic time range-based multifield-correlation packet classification
US6871265B1 (en) Method and apparatus for maintaining netflow statistics using an associative memory to identify and maintain netflows
Meiners et al. Topological transformation approaches to TCAM-based packet classification
US9356844B2 (en) Efficient application recognition in network traffic
US8555374B2 (en) High performance packet processing using a general purpose processor
CN112558948A (zh) 一种海量流量下报文识别的方法和装置
US7317723B1 (en) Action based termination of multidimensional lookup
CN111988231B (zh) 一种掩码五元组规则匹配的方法及装置
US20190052553A1 (en) Architectures and methods for deep packet inspection using alphabet and bitmap-based compression
US9985885B1 (en) Aggregating common portions of forwarding routes
CN114327833A (zh) 一种基于软件定义复杂规则的高效流量处理方法
Meiners et al. Topological transformation approaches to optimizing TCAM-based packet classification systems
CN113810337A (zh) 用于网络报文去重的方法、装置、以及存储介质
CN111949740B (zh) 基于多核处理器的并行网包分类方法、系统及网络设备
Nottingham et al. GPU packet classification using OpenCL: a consideration of viable classification methods
Nikolenko et al. How to represent IPv6 forwarding tables on IPv4 or MPLS dataplanes
Chang et al. Hash-based OpenFlow packet classification on heterogeneous system architecture

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
GR01 Patent grant
GR01 Patent grant