CN106776456B - 基于fpga+npu的高速正则表达式匹配混合系统及方法 - Google Patents

基于fpga+npu的高速正则表达式匹配混合系统及方法 Download PDF

Info

Publication number
CN106776456B
CN106776456B CN201710036627.6A CN201710036627A CN106776456B CN 106776456 B CN106776456 B CN 106776456B CN 201710036627 A CN201710036627 A CN 201710036627A CN 106776456 B CN106776456 B CN 106776456B
Authority
CN
China
Prior art keywords
state
dfa
message
fpga
matching
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
CN201710036627.6A
Other languages
English (en)
Other versions
CN106776456A (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.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
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 National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201710036627.6A priority Critical patent/CN106776456B/zh
Publication of CN106776456A publication Critical patent/CN106776456A/zh
Application granted granted Critical
Publication of CN106776456B publication Critical patent/CN106776456B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1657Access to multiple memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/02Capturing of monitoring data
    • H04L43/028Capturing of monitoring data by filtering

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提出了一种基于FPGA+NPU的高速正则表达式匹配混合系统及方法,该系统主要由现场可编程门阵列FPGA芯片和多核网络处理器NPU组成。在FPGA上实现多个并行的硬件匹配引擎,在NPU上实例化多个软件匹配引擎,硬件引擎和软件引擎以流水的方式工作。同时,利用FPGA片上高速的RAM和片外DDR3 SDRAM存储器构建两级存储架构。第二步、编译正则表达式规则集、生成混合自动机。第三步、对混合自动机的状态表项进行配置。第四步、网络报文处理。该发明大大提升复杂规则集条件下的匹配性能,解决在复杂规则集下性能低的问题。

Description

基于FPGA+NPU的高速正则表达式匹配混合系统及方法
技术领域
本发明主要支持高速网络中的深度报文检测技术,主要应用于入侵检测系统、协议识别系统中。
背景技术
名词解释
FPGA:(英语:Field Programmable Gate Array,缩写为FPGA),现场可编程门阵列。
NPU:(英语:Network Processing Unit,缩写为NPU),是一种专门应用于网络应用数据包的处理器。
FSM:(英语:finite state automata,缩写为FSM),有限状态自动机。
DFA:(英语:deterministic finite automata,缩写为DFA),确定性有限自动机
NFA:(英语:nondeterministic finite automata,缩写为NFA),非确定性有限自动机。
Hybrid-FA:(英语:hybrid finite automata,缩写为Hybrid-FA),混合自动机。
GPU:(英语:graphics processing unit,缩写为GPU),图形处理器。
TCAM:(ternary content addressable memory,缩写为TCAM),一种三态内容寻址存储器。
SDRAM:(Synchronous Dynamic Random Access Memory,缩写为SDRAM),同步动态随机存储器。
DDR3SDRAM:(Double-Data-Rate Three Synchronous Dynamic Random AccessMemory,缩写为DDR3SDRAM),第三代双倍数据率同步动态随机存取存储器,是一种电脑存储器规格。RAM:(random access memory,缩写为RAM),随机存取存储器。
当前的网络应用越来越依赖于对报文负载部分的处理。这些应用从报文负载中识别出相关特征,并用这些特征进行负载均衡、应用层协议识别、流量计费、网络入侵检测等。深度报文检测是特征识别的核心技术。预先给定一个特征(规则)集,深度报文检测用该规则集对报文负载部分逐字节地进行匹配,结束时返回匹配结果,即报文负载匹配上哪个或哪些规则。
在早期的时候,精确的字符串被广泛地用于深度报文检测中的特征描述。传统的算法如AC算法、WM算法及SBOM算法是经典的高效字符串匹配算法。然而随着特征越来越复杂,精确字符串已经无法有效地对特征进行描述。正则表达式以其强大而灵活的特征描述能力,已经广泛地应用于网络应用及设备中。例如,知名的开源入侵检测系统Snort、Bro及应用层协议识别系统L7-filter均已采用正则表达式来描述它们的规则集。在工业上,网络安全设备如思科安全系统、Cavium的匹配引擎、IBM PowerEN processor上的硬件加速器均支持正则表达式。
通常的匹配方法是将正则表达式规则集转换成等价的有限状态自动机(FSM,finite state automata),自动机中的每个状态代表一个匹配的中间过程。匹配引擎每次读取负载的一个字节,查询自动机的状态表,跳转到下一个活跃状态集。若匹配中某个活跃状态对应的给定的某个规则,则说明该负载命中了这条规则。传统上有两种类型的FSM:确定性有限自动机(DFA,deterministic finite automata)和非确定性有限自动机(NFA,nondeterministic finite automata)。NFA的优点是空间开销小,NFA状态数与规则集的数量及规则长度成线性关系。缺点是NFA处理的时间复杂度高,在任意状态NFA可能有多个活跃状态,处理一个字符可能需要多次访问状态表,效率非常低。DFA的优点是任意一个时刻只有一个活跃状态,因此处理一个字符只需要一次访存,时间复杂度固定为O(1)。但是在NFA生成DFA的过程中会引入状态膨胀、甚至状态爆炸,导致空间开销极大,有时甚至无法生成完整的DFA。由于NFA的时间复杂度由其理论模型决定,在不改变系统结构的情况下很难对其进行改进。而DFA匹配逻辑简单,当前研究主要都集中在基于DFA的匹配中。
深度报文检测中的正则表达式匹配目前主要面临两个方面的挑战。第一个挑战来自自动机,随着网络应用的扩展,需要检测的规则数量越来越多,规则也越来越复杂,进而导致DFA的规模越来越大。DFA存储开销可能高于当前网络设备中的存储资源,甚至在很多应用场合下无法生成完整的DFA。第二个挑战来自性能,当前因特网链路速率正以每年40%至50%的速率持续增长,而很多深度报文检测应用如入侵检测系统需要对报文的实时处理,因此对正则表达式匹配提出了线速要求。而深度报文检测本质是对报文负载的逐字节的扫描,本身就是一个复杂度极高的过程,因此需要从体系结构、访存逻辑多方面综合提升匹配性能。
对第一个挑战,研究人员提出了很多压缩方法来降低DFA的存储开销。DFA状态表本质是一个二维的矩阵,矩阵中每一个表项代表一个转移边。Kumar提出的D2FA是最经典的DFA压缩算法,它通过引入默认跳转边来消除不同状态间的相同转移边,大部分DFA压缩算法都是基于D2FA而改进的。D2FA的缺点是没有性能保证,Becchi在其基础上通过限定默认跳转边的方向来保证其性能不低于DFA的1/2。尽管当前压缩算法有很好的性能保证,但是它们都是构建在DFA的基础上,它们无法解决状态爆炸导致DFA无法生成的问题。针对状态爆炸问题,当前学者提出了多种解决方案,如规则分组,半确定自动机(hybrid-FA),基于特征分解的自动机(H-FA、XFA、PaCC)等。基于特征分解的自动机主要停留在理论层面无法实用,而规则分组会导致匹配性能的线速下降。本专利将使用半确定自动机hybrid-FA作为正则匹配的的自动机。
Hybrid-FA是介于NFA和DFA之间的一个非常实用的自动机。在NFA转换成DFA的子集合算法中,hybrid-FA中止了那些容易引起爆炸的NFA状态的确定化,生成了带有一个头部DFA和若干个尾部NFA的自动机。Hybrid-FA很好地对NFA和DFA进行了平衡,通过适度终止确定化,避免了DFA的状态爆炸;其次通过对规则头部确定化生成头部DFA,可以使大部分报文的处理有确定的性能保证,避免了NFA过大的时间开销。
对第二个挑战,在以存储为中心的体系结构下,匹配性能取决于访存性能。对给定的规则集和报文,访存次数是确定的,关键是要提高每次访存的效率。最好的方法是将自动机全部存储在高速存储器上,但是在通用的网络设备中高速存储器容量非常有限,并且远小于自动机的存储需求。因此,如何利用好网络设备中的高速存储器是一个关键问题。另一方面可以从并行的角度入手,通过实例化多个并行引擎来对匹配性能进行线速提升。当前网络设备中并行资源比较多,如FPGA中并行的硬件资源、通过多核处理器、GPU、多核NPU、TCAM等器件都可以提供并行的资源,当前通过挖掘硬件设备并行性来提高性能的研究也集中在这几个方面。但是,单一器件均无法满足正则表达式匹配需求。以硬件逻辑为中心的FPGA通常使用NFA作为自动机,它将NFA状态表编译成硬件逻辑,对多个状态的访问处理都可以在一个时钟周期内完成。但是基于NFA的FPGA硬件并行度的提升是以复制硬件逻辑为代价的,复杂的规则集加上线速的匹配要求会极大地增加硬件开销。无法实时更新是以硬件逻辑为中心的FPGA的另一个天生的缺陷,导致其无法应用于经常需要更新规则集的应用中。通用多核处理器和多核NPU虽然主频比较高,但是通常它们提供的并行度非常有限。GPU和TCAM一般需要非常规整的类似于DFA的自动机才能发挥效能,且它们的存储资源非常有限。
深度报文检测中的正则表达式匹配正面临着日益严峻的挑战。首先,随着网络应用的扩展,深度报文检测中的规则集的数量和复杂度都在急剧提升;其次,网络链路速率也随用户数量及新技术的提升而快速增长。这两方面的趋势都对正则表达式提出了越来越严苛的要求,状态爆炸是不可避免,要满足规则集的扩展就只能摒弃传统的DFA。而当前大部分研究都是基于DFA的压缩技术,且新型自动机的设计在理论和实践上都有诸多困难需要克服。
现有的匹配技术存在的不足:
1.忽略了实践中访存这一核心因素,访存时延是正则表达式匹配的最重要的决定性因素。
2.在实现中过于依赖单一的平台和体系结构,而每个平台都有自身的缺陷导致无法提供满意的解决方案。
3.自动机的设计未能与体系结构的设计充分结合,导致这两个研究方向有脱节。
针对当前研究的不足,我们主要从体系结构设计入手。在自动机的设计上,我们选择目前较为成熟且能解决状态爆炸问题的hybrid-FA。为最大化地提升hybrid-FA,我们设计了以存储为中心的FPGA+NPU的混合体系结构。FPGA部分主要解决hybrid-FA的头部DFA的匹配,NPU主要解决hybird-FA尾部NFA的匹配。FPGA和NPU是流水化处理,报文首先在FPGA部分进行匹配,匹配过程中若有NFA状态激活就将当前状态和剩余的报文传递给NPU,由NPU完成剩余的匹配。通常情况下,NFA状态很少激活,或者激活的位置都在报文比较靠后的位置。因此NPU流水段的任务量相较FPGA部分非常小,要提升整体匹配性能只要保证FPGA部分匹配性能即可。
在FPGA部分的设计中,为提升并行度,我们实例化多个匹配引擎,每个匹配引擎并行工作。为了提升匹配中的访存性能,设计了两级存储的层次化结构来存储hybrid-FA的DFA状态表。其中FPGA上的RAM作为高速存储器,存储DFA中频繁被访问的状态表项,每个硬件引擎对应一个专有的RAM块,硬件引擎之间互不干扰。另外,FPGA中RAM通常是双端口结构,两个读操作可以并行地进行。而匹配操作全是读操作,因此每个将每个RAM块对应两个引擎,使性能翻倍。使用外置的DDR3SDRAM作为外置存储器,存储hybrid-FA的整个状态表项。在NPU部分,为隐藏访存时延,同样实例化尽可能多的匹配引擎。
发明内容
考虑到状态爆炸与匹配性能两方面的要求,采用hybird-FA自动机,设计了一个FPGA+NPU的混合体系结构及方法。通过流水化结构将hybrid-FA的DFA部分处理和NFA部分处理分离。DFA部分任务量大但处理效率高,NFA部分效率低但任务量也少,以此实现两个流水的均衡。FPGA部分采用层次化存储和并行引擎的方式最大化提升流水段的性能,NPU部分实例化尽可能多的引擎来隐藏访存时延。该方案可有效地解决状态爆炸下匹配性能问题,为高速骨干网络安全设备的深度报文检测提供技术手段和工具。
为解决上述技术问题,技术方案包括以下系统和方法:
一、FPGA+NPU的高速正则表达式匹配混合系统结构
本发明的系统结构图如图1所示。核心的系统结构主要包括FPGA和NPU两部分,匹配任务由FPGA上的硬件引擎和NPU上的软件引擎协同完成。硬件引擎由FPGA上硬件逻辑编译而成,功能固定,软件引擎指NPU上的匹配线程。本发明的正则表达式匹配是以存储为中心的,即匹配过程是基于访问自动机状态表来驱动的。DDR3SDRAM作为外置存储器存放hybrid-FA的整个状态表,该状态表被所有的硬件引擎和软件引擎共享。此外对每个硬件引擎,我们还用FPGA上的片上RAM为其开辟专用的bank作为一级缓存,每个bank均存放访问频率最高的前100个DFA状态。FPGA上还有一个任务传送模块,用于将硬件引擎未完成的匹配任务传递给NPU。对应的NPU上有一个任务分配线程,用于将硬件引擎未完成的任务分配给空闲的线程。自动机的编译及配置是在系统的主CPU中完成的,未在图中完整表示。
二、基于FPGA+NPU混合匹配架构的正则表达式匹配方法
图2是本发明的软硬件匹配流程图。匹配流程主要包括硬件引擎和软件引擎两个流水段,对给定报文的匹配中只有访问到边界状态时才会激活相应的软件流水段工作。并且,硬件流水段和软件流水段是松散连接的,并不是一一对应的关系。硬件流水段只需要把未完成的任务交给NPU即可,NPU会将此任务再分配给空闲的软件线程。匹配工作从硬件引擎开始,硬件引擎每次从报文负载中读取一个字符,根据当前DFA状态和该字符更新DFA状态,这个更新的操作可能发生在RAM中,也可能发生在SDRAM中,取决于源DFA状态是否为高频DFA状态。每更新一次状态就需要判断当前状态是否为终止状态,若为终止状态则将终止状态对应的规则ID写入结果缓存区。然后再判断是否为边界状态,如果为边界状态说明NFA状态被激活,此时硬件引擎将当前状态及剩余任务发送给NPU,硬件引擎可以继续处理下一个报文。
软件引擎工作流程如下,首先从NPU的任务分配线程中领取任务。随后每次从负载中读取一个字符,更新DFA状态和NFA状态,NPU的更新操作均需访问外置的DDR3SDRAM。每次DFA状态更新后还要判断其是否为边界状态,若为边界状态,则需要将边界状态对应的NFA状态集加入到当前NFA状态集。同硬件引擎,若更新后的DFA状态或NFA状态中有终止状态的,则需将终止状态对应的规则ID写入到结果缓冲区中。
该方法主要包括以下步骤:
第一步、编译规则集,生成自动机
1.1使用KEN THOMPSON在1968年6月计算机通讯(Communications of the ACM)第11卷发表的论文“正则表达式搜索算法(Regular Expression Search Algorithm)”中提出的正则表达式编译算法将正则表达式模式集编译成一个NFA。
1.2使用Micheal Becchi在2007年ACM CoNEXT会议中的论文“一个适用于深度报文检测的混合自动机(A hybrid finite automaton for practical deep packetinspection)”中提出的算法将NFA编译成混合自动机hybrid-FA。Hybrid-FA的数据结构主要包括DFA、NFA和边界DFA状态与NFA状态对应关系。其中DFA是一个二维数组,数组行代表DFA状态标识,数组列对应256个ASCII字符的输入,数组元素代表在对应的状态和输入下跳转到的下一个状态。NFA状态是以矩阵加链表的形式存储,与DFA区别是每个矩阵元素是一个链表,该链表指向的是下一跳的状态集,而不是单个状态。Hybrid-FA中有一类特殊的DFA状态叫边界状态,每个边界状态映射到若干个NFA状态,当边界状态活跃时,其对应的NFA状态就被激活。
1.3为提升匹配效率对混合自动机的数据结构进一步改进。取每个DFA状态ID前两位作为标识位,第一位代表该DFA状态是否是终止状态,第二位代表该DFA状态是否为边界状态。类似地,取NFA状态ID的第一位来表示该NFA状态是否是终止状态。
第二步、求解hybird-FA中经常被访问的DFA状态,即高频DFA状态
2.1在实践中,对于高频DFA状态的计算我们采用了一种简便高效的方法。首先,生成随机长度和内容的报文100MB。其次,使用编译好的hybrid-FA对随机报文进行匹配。统计匹配过程中每个DFA状态的访问次数,将前100个DFA状态作为选定的高频状态。在具体的应用中,可以直接用实际应用中的报文进行匹配来确定高频DFA状态,效果比随机报文更好。
2.2状态标识重分配。由于高频DFA状态标识号是分散的,为方便高频状态的访问及配置,需将状态的标识ID重新分配。对DFA状态表进行100次遍历,第i次遍历时将访问概率排名第i的表项与当前标识ID为i的状态表项互换,每次互换需要扫描一次DFA状态表项,另外如果涉及到边界状态的标识更换,同时需要更换边界状态与NFA状态的对应关系。
第三步、混合自动机状态表项配置
3.1混合自动机状态表项包括以下几个部分,头部DFA状态表、NFA状态表、边界状态对应的NFA集合表、终止状态对应的规则ID表。其中DFA状态表是优化访存的核心,根据实际DFA状态数适当分配DFA的ID标识的比特位,注意需要留出两个比特位作为终止状态和边界状态的标识。计算100个DFA状态表项的空间需求,按该空间需求将FPGA的片上RAM划分成若干个RAM块,对每个RAM块实例化两个对应的匹配引擎。
3.2Hybrid-FA剩余的状态表项,包括全部的DFA状态表、NFA状态表、边界状态对应的NFA集合表、终止状态对应的规则ID表均配置到外置的DDR3SDRAM中。由于FPGA片上RAM存储的表项是固定配置的,匹配过程中不存在对表项的写或替换操作。另外,每个RAM块是块是专享的,而DDR3SDRAM中的表项是共享的。
第四步、报文匹配处理
报文处理流程主要包括两个步骤,报文接收与报文匹配,报文匹配又分为FPGA部分硬件引擎的匹配和NPU部分的软件引擎匹配,注意只有在NFA状态激活时才需要进行NPU部分的匹配。
报文接收需要设置相应的报文缓存区,设有m个硬件引擎,则需开辟m个报文缓存区,每个引擎对应一个专有的报文缓存区,另外还需要一个结果缓存区来缓存命中的规则。报文缓存区为循环队列,队列宽度设置为2KB,长度可以根据测试结果来确定。每个缓冲区都包括一个头指针和一个尾指针,分别指向下一个待处理的报文和下一个接收报文的位置。
4.1报文接收线程直接从链路上捕获报文,经过如下处理后转存至CPU内在中的报文缓冲区。
4.1.1去掉IP和TCP层报文头信息,只保留报文的负载部分。
4.1.2对报文进行填充处理。设报文内存缓冲区的长度为2KB,实际上报文长度不会超过1560字节,在负载的尾部填充0,使负载长度达到2KB。
4.1.3根据报文缓冲区的空闲情况,将报文分配置空闲率最高的那个报文缓冲区,同时将其当前尾指针加1。若所有缓冲区均满则说明当前已达到性能上限,丢弃该报文并记录报告。
4.1.4转4.1.1。
4.2报文匹配流程(FPGA部分)
4.2.1每个硬件匹配引擎根据其头指针,从对应的报文缓冲区取出宽度为2K的一段报文,将初始状态0设置为DFA的当前状态。
4.2.2读取报文负载的下一个字符。
4.2.3根据DFA当前状态和当前输入字符访问状态表。若当前状态ID小于100,则说明为存放在RAM中的高频状态,根据状态ID和输入字符计算相应地址,并从相应RAM中读取下一跳DFA状态标识作为当前状态。否则,说明当前状态存放在SDRAM中,根据当前状态及输入字符计算相应地址,并从SDRAM中读取下一跳DFA状态标识作为当前状态。
4.2.4判断当前DFA状态是否为终止状态或边界状态。若当前状态标识的第一个比特位为1,说明当前状态为终止状态,根据状态ID从SDRAM的状态规则对应表中读取相应的规则ID,并将规则ID写入到结果缓存区中,跳过当前报文,转至4.2.1。若当前状态标识的第二个比特位为1,说明当前DFA状态为边界状态,硬件引擎将当前DFA状态和报文负载的未处理部分传递给NPU部分,由NPU完成剩余部分的匹配,硬件引擎跳转至4.2.1。
4.2.5若当前字符为报文负载的最后一个字符,说明当前报文匹配完毕,跳转至4.2.1读取下一个报文负载,否则跳转至4.2.2读取下一个字符。
4.3报文匹配流程(NPU部分),NPU部分的软件引擎的匹配与FPGA部分的硬件引擎的匹配是相对独立的流水段,没有一一对应的关系。NPU部分实例化多个软件匹配线程及一个任务分配线程,硬件引擎将匹配任务发送到软件引擎的缓冲区,任务分配线程每次从缓冲区中读取一个任务(即DFA状态和报文负载对),然后根据各匹配线程忙闲情况将该任务分配到相应的匹配线程的任务缓冲区。各匹配线程的工作流程如下:
4.3.1从相应的任务缓冲区读取下一个任务,读取边界DFA状态,并从SDRAM中读取该边界状态对应的活跃NFA状态集,将该DFA状态和NFA状态集作为当前活跃状态集。判断当前NFA状态集中是否有终止状态,若有则从SDRAM中读取该NFA状态对应的规则ID,将该规则ID写入到结果缓冲区中,转4.3.1。否则,转4.3.2。
4.3.2读取负载的下一个字符。
4.3.3对每一个当前活跃的NFA状态,根据输入字符从SDRAM中查找其下一跳NFA状态集,并将其作为新的活跃NFA状态集。
4.3.4根据当前DFA状态和输入字符从SDRAM中查找下一跳DFA状态,并将其作为新的当前DFA状态。根据其标识的第一个比特位判断其是否为终止状态,若为终止状态则根据DFA状态标识从SDRAM中读取其对应的规则ID,并将规则ID写入结果缓冲区中,跳过当前报文,转4.3.1。根据DFA状态标识的第二位判断其是否为边界状态,若为边界状态,则从SDRAM中读取对应的NFA状态集,并将该NFA状态集加入到4.3.3的活跃NFA状态集。
4.3.5根据状态标识的第一比特位判断当前NFA状态集中是否有终止状态,若有终止状态则根据标识从SDRAM中读取对应的规则ID,并将规则ID写入结果缓冲区中,跳过当前报文,转4.3.1。否则,转4.3.2。
综合起来,本发明可达到以下效果:
1.采用hybrid-FA应对规则数量和复杂度提升带来的状态爆炸问题。
2.使用FPGA+NPU的混合体系结构将hybird-FA中的高效的DFA匹配和低效的NFA匹配分离并且流水。自动机本身的特征保证FPGA部分的硬件引擎处理大部分负载,NPU部分处理极小一部分负载。因为FPGA和NPU是流水处理的,并且NPU任务量较小,只要保证FPGA部分的性能即可。
3.FPGA部分依据DFA状态访问规律设置片上RAM加片外SDRAM的方式构建两级存储器,DFA访问特点保证绝大部分访存可以在片上RAM完成,因此可极大地提高访存性能。另外,借助RAM双端口实例化2倍的匹配引擎,大大提高并行度。
附图说明
图1是本发明的系统结构图。
图2是本发明的软硬件匹配流程图。
具体实施方式
第一步编译规则集,生成自动机
1.1使用KEN THOMPSON在1968年6月计算机通讯(Communications of the ACM)第11卷发表的论文“正则表达式搜索算法(Regular Expression Search Algorithm)”中提出的正则表达式编译算法将正则表达式模式集编译成一个NFA。
1.2使用Micheal Becchi在2007年ACM CoNEXT会议中的论文“一个适用于深度报文检测的混合自动机(A hybrid finite automaton for practical deep packetinspection)”中提出的算法将NFA编译成混合自动机hybrid-FA。Hybrid-FA的数据结构主要包括DFA、NFA和边界DFA状态与NFA状态对应关系。其中DFA是一个二维数组,数组行代表DFA状态标识,数组列对应256个ASCII字符的输入,数组元素代表在对应的状态和输入下跳转到的下一个状态。NFA状态是以矩阵加链表的形式存储,与DFA区别是每个矩阵元素是一个链表,该链表指向的是下一跳的状态集,而不是单个状态。Hybrid-FA中有一类特殊的DFA状态叫边界状态,每个边界状态映射到若干个NFA状态,当边界状态活跃时,其对应的NFA状态就被激活。
1.3为提升匹配效率对混合自动机的数据结构进一步改进。取每个DFA状态ID前两位作为标识位,第一位代表该DFA状态是否是终止状态,第二位代表该DFA状态是否为边界状态。类似地,取NFA状态ID的第一位来表示该NFA状态是否是终止状态。
第二步求解hybird-FA中经常被访问的DFA状态,即高频DFA状态
2.1在实践中,对于高频DFA状态的计算我们采用了一种简便高效的方法。首先,生成随机长度和内容的报文100MB。其次,使用编译好的hybrid-FA对随机报文进行匹配。统计匹配过程中每个DFA状态的访问次数,将前100个DFA状态作为选定的高频状态。在具体的应用中,可以直接用实际应用中的报文进行匹配来确定高频DFA状态,效果比随机报文更好。
2.2状态标识重分配。由于高频DFA状态标识号是分散的,为方便高频状态的访问及配置,需将状态的标识ID重新分配。对DFA状态表进行100次遍历,第i次遍历时将访问概率排名第i的表项与当前标识ID为i的状态表项互换,每次互换需要扫描一次DFA状态表项,另外如果涉及到边界状态的标识更换,同时需要更换边界状态与NFA状态的对应关系。
第三步混合自动机状态表项配置
3.1混合自动机状态表项包括以下几个部分,头部DFA状态表、NFA状态表、边界状态对应的NFA集合表、终止状态对应的规则ID表。其中DFA状态表是优化访存的核心,根据实际DFA状态数适当分配DFA的ID标识的比特位,注意需要留出两个比特位作为终止状态和边界状态的标识。计算100个DFA状态表项的空间需求,按该空间需求将FPGA的片上RAM划分成若干个RAM块,对每个RAM块实例化两个对应的匹配引擎。
3.2Hybrid-FA剩余的状态表项,包括全部的DFA状态表、NFA状态表、边界状态对应的NFA集合表、终止状态对应的规则ID表均配置到外置的DDR3SDRAM中。由于FPGA片上RAM存储的表项是固定配置的,匹配过程中不存在对表项的写或替换操作。另外,每个RAM块是块是专享的,而DDR3SDRAM中的表项是共享的。
第四步报文匹配处理
报文处理流程主要包括两个步骤,报文接收与报文匹配,报文匹配又分为FPGA部分硬件引擎的匹配和NPU部分的软件引擎匹配,注意只有在NFA状态激活时才需要进行NPU部分的匹配。
报文接收需要设置相应的报文缓存区,设有m个硬件引擎,则需开辟m个报文缓存区,每个引擎对应一个专有的报文缓存区,另外还需要一个结果缓存区来缓存命中的规则。报文缓存区为循环队列,队列宽度设置为2KB,长度可以根据测试结果来确定。每个缓冲区都包括一个头指针和一个尾指针,分别指向下一个待处理的报文和下一个接收报文的位置。
4.1报文接收线程直接从链路上捕获报文,经过如下处理后转存至CPU内在中的报文缓冲区。
4.1.1去掉IP和TCP层报文头信息,只保留报文的负载部分。
4.1.2对报文进行填充处理。设报文内存缓冲区的长度为2KB,实际上报文长度不会超过1560字节,在负载的尾部填充0,使负载长度达到2KB。
4.1.3根据报文缓冲区的空闲情况,将报文分配置空闲率最高的那个报文缓冲区,同时将其当前尾指针加1。若所有缓冲区均满则说明当前已达到性能上限,丢弃该报文并记录报告。
4.1.4转4.1.1。
4.2报文匹配流程(FPGA部分)
4.2.1每个硬件匹配引擎根据其头指针,从对应的报文缓冲区取出宽度为2K的一段报文,将初始状态0设置为DFA的当前状态。
4.2.2读取报文负载的下一个字符。
4.2.3根据DFA当前状态和当前输入字符访问状态表。若当前状态ID小于100,则说明为存放在RAM中的高频状态,根据状态ID和输入字符计算相应地址,并从相应RAM中读取下一跳DFA状态标识作为当前状态。否则,说明当前状态存放在SDRAM中,根据当前状态及输入字符计算相应地址,并从SDRAM中读取下一跳DFA状态标识作为当前状态。
4.2.4判断当前DFA状态是否为终止状态或边界状态。若当前状态标识的第一个比特位为1,说明当前状态为终止状态,根据状态ID从SDRAM的状态规则对应表中读取相应的规则ID,并将规则ID写入到结果缓存区中,跳过当前报文,转至4.2.1。若当前状态标识的第二个比特位为1,说明当前DFA状态为边界状态,硬件引擎将当前DFA状态和报文负载的未处理部分传递给NPU部分,由NPU完成剩余部分的匹配,硬件引擎跳转至4.2.1。
4.2.5若当前字符为报文负载的最后一个字符,说明当前报文匹配完毕,跳转至4.2.1读取下一个报文负载,否则跳转至4.2.2读取下一个字符。
4.3报文匹配流程(NPU部分),NPU部分的软件引擎的匹配与FPGA部分的硬件引擎的匹配是相对独立的流水段,没有一一对应的关系。NPU部分实例化多个软件匹配线程及一个任务分配线程,硬件引擎将匹配任务发送到软件引擎的缓冲区,任务分配线程每次从缓冲区中读取一个任务(即DFA状态和报文负载对),然后根据各匹配线程忙闲情况将该任务分配到相应的匹配线程的任务缓冲区。各匹配线程的工作流程如下:
4.3.1从相应的任务缓冲区读取下一个任务,读取边界DFA状态,并从SDRAM中读取该边界状态对应的活跃NFA状态集,将该DFA状态和NFA状态集作为当前活跃状态集。判断当前NFA状态集中是否有终止状态,若有则从SDRAM中读取该NFA状态对应的规则ID,将该规则ID写入到结果缓冲区中,转4.3.1。否则,转4.3.2。
4.3.2读取负载的下一个字符。
4.3.3对每一个当前活跃的NFA状态,根据输入字符从SDRAM中查找其下一跳NFA状态集,并将其作为新的活跃NFA状态集。
4.3.4根据当前DFA状态和输入字符从SDRAM中查找下一跳DFA状态,并将其作为新的当前DFA状态。根据其标识的第一个比特位判断其是否为终止状态,若为终止状态则根据DFA状态标识从SDRAM中读取其对应的规则ID,并将规则ID写入结果缓冲区中,跳过当前报文,转4.3.1。根据DFA状态标识的第二位判断其是否为边界状态,若为边界状态,则从SDRAM中读取对应的NFA状态集,并将该NFA状态集加入到4.3.3的活跃NFA状态集。
4.3.5根据状态标识的第一比特位判断当前NFA状态集中是否有终止状态,若有终止状态则根据标识从SDRAM中读取对应的规则ID,并将规则ID写入结果缓冲区中,跳过当前报文,转4.3.1。否则,转4.3.2。
采用主流FPGA芯片和NPU芯片,在通用规则集L7、Snort下可达到20~30Gbps的正则表达式匹配性能,而当前在复杂规则集下的单一体系结构中,匹配性能均不超过10Gbps。相较于当前正则表达式匹配结构和方法,本发明可以将性能提升两倍以上。本发明首次提出正则表达式匹配的混合架构,在状态爆炸的前提下提供高速的匹配性能,目前尚无其它基于FPGA+NPU混合架构的正则表达式匹配技术的研究成果。

Claims (2)

1.一种基于FPGA+NPU的高速正则表达式匹配方法,其特征在于包括以下步骤:
第一步,构建FPGA+NPU的软硬件结合匹配的混合系统,该系统包括正则表达匹配引擎;正则表达式匹配引擎由硬件引擎和软件引擎两部分组成,硬件引擎是通过FPGA芯片上的可编程逻辑元件布局、布线、烧录生成,软件引擎通过在NPU上软件编程实现,硬件引擎和软件引擎之间通过数据缓冲区连接;所述FPGA芯片上设计若干个硬件引擎,NPU上根据其支持的线程数实例化若干个软件线程;硬件引擎的存储器包括两级,FPGA的片上RAM作为一级存储器,存储访问概率较高的DFA状态;RAM存储器划分成多个存储块,每两个硬件引擎通过双端口RAM独占一个RAM存储块;FPGA片外DDR3SDRAM作为二级存储器,存储整个混合自动机的状态表项,混合自动机的状态表项由所有的硬件引擎和软件引擎共享;
第二步、处理正则表达式,生成混合自动机;首先将正则表达式规则集编译成一个NFA,然后将NFA再编译成混合自动机;对混合自动机的状态标识进行改写,对DFA状态标识,若该DFA状态为终止状态,则将其标识的第一个比特位置1,若该DFA为边界状态,则将其标识的第二个比特位置1;对NFA状态标识,若该NFA状态为终止状态,则将其标识的第一个比特位置1;
第三步、求解混合自动机中经常被访问的DFA状态,即高频DFA状态;首先,生成随机长度和内容的报文100MB;其次,使用编译好的混合自动机hybrid-FA对随机报文进行匹配;统计匹配过程中每个DFA状态的访问次数,将前100个DFA状态作为选定的高频状态;
第四步、混合自动机状态表项配置;混合自动机状态表项包括头部DFA状态表、NFA状态表、边界状态对应的NFA集合表、终止状态对应的规则ID表;将第二步计算的100个高频DFA状态表项配置到FPGA上每一个RAM存储块中,全部的DFA状态表、NFA状态表、边界状态对应的NFA集合表、终止状态对应的规则ID表均配置到外置的DDR3SDRAM中;
第五步、报文匹配处理流程;报文处理流程主要包括两个步骤,报文接收与报文匹配,报文匹配又分为FPGA部分硬件引擎的匹配和NPU部分的软件引擎匹配;报文接收线程直接从链路上捕获报文,去除报文头后转存至CPU内在中的报文缓冲区,硬件引擎从报文缓冲区中读取接收到的报文,随后进行匹配,硬件引擎匹配过程中若访问到边界状态,则将剩余的报文及当前的边界状态通过FPGA上的任务传输单元传递给软件引擎,由软件引擎完成剩余报文的匹配工作。
2.如权利要求1所述的一种基于FPGA+NPU的高速正则表达式匹配方法,其特征在于,所述硬件引擎和软件引擎以流水化的方式工作,网络报文的匹配先由FPGA上的硬件引擎处理,硬件引擎处理完成后,再由FPGA上的任务传输单元交由NPU的软件引擎处理。
CN201710036627.6A 2017-01-18 2017-01-18 基于fpga+npu的高速正则表达式匹配混合系统及方法 Active CN106776456B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710036627.6A CN106776456B (zh) 2017-01-18 2017-01-18 基于fpga+npu的高速正则表达式匹配混合系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710036627.6A CN106776456B (zh) 2017-01-18 2017-01-18 基于fpga+npu的高速正则表达式匹配混合系统及方法

Publications (2)

Publication Number Publication Date
CN106776456A CN106776456A (zh) 2017-05-31
CN106776456B true CN106776456B (zh) 2019-06-18

Family

ID=58943643

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710036627.6A Active CN106776456B (zh) 2017-01-18 2017-01-18 基于fpga+npu的高速正则表达式匹配混合系统及方法

Country Status (1)

Country Link
CN (1) CN106776456B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107330106B (zh) * 2017-07-07 2020-11-20 苏州浪潮智能科技有限公司 一种基于fpga的数据过滤方法及装置
CN110324204B (zh) * 2019-07-01 2020-09-11 中国人民解放军陆军工程大学 一种在fpga中实现的高速正则表达式匹配引擎及方法
CN112235198A (zh) * 2020-10-15 2021-01-15 东莞飞思凌通信技术有限公司 一种基于fpga实现的多用户tcam掩码匹配算法
CN112464047B (zh) * 2020-11-06 2021-07-02 广州竞远安全技术股份有限公司 一种采用混合匹配引擎的nids设备的优化系统及方法
CN112559812B (zh) * 2020-12-24 2022-03-08 中国船舶集团有限公司 一种基于cpu+fpga的大数据输出方法及系统
CN113596043B (zh) * 2021-08-03 2023-03-24 中国电信股份有限公司 攻击检测方法、攻击检测装置、存储介质与电子设备
CN113703715B (zh) * 2021-08-31 2024-02-23 深信服科技股份有限公司 一种正则表达式匹配方法、装置、fpga及介质
CN115348189B (zh) * 2022-10-18 2022-12-16 戎腾科技(长沙)有限公司 基于sav架构的报文匹配方法、装置和计算机设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1836245A (zh) * 2003-08-13 2006-09-20 感测网络公司 用于高吞吐量基于签名的网络应用的集成电路设备和方法
CN102023858A (zh) * 2010-12-03 2011-04-20 上海交通大学 软硬件协同工作的字符匹配系统及其匹配方法
CN101442540B (zh) * 2008-12-30 2012-09-05 合肥昊特信息科技有限公司 基于现场可编程门阵列的高速模式匹配算法
CN103312627B (zh) * 2013-05-30 2015-06-10 中国人民解放军国防科学技术大学 基于两级存储的正则表达式匹配方法
EP1960913B1 (en) * 2005-12-02 2017-01-11 IP Reservoir, LLC Method and device for high performance regular expression pattern matching

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1836245A (zh) * 2003-08-13 2006-09-20 感测网络公司 用于高吞吐量基于签名的网络应用的集成电路设备和方法
EP1960913B1 (en) * 2005-12-02 2017-01-11 IP Reservoir, LLC Method and device for high performance regular expression pattern matching
CN101442540B (zh) * 2008-12-30 2012-09-05 合肥昊特信息科技有限公司 基于现场可编程门阵列的高速模式匹配算法
CN102023858A (zh) * 2010-12-03 2011-04-20 上海交通大学 软硬件协同工作的字符匹配系统及其匹配方法
CN103312627B (zh) * 2013-05-30 2015-06-10 中国人民解放军国防科学技术大学 基于两级存储的正则表达式匹配方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
A Survey on Regular Expression Matching for Deep Packet Inspection: Applications, Algorithms, and Hardware Platforms;Xu, Chengcheng,et al.,;《IEEE COMMUNICATIONS SURVEYS AND TUTORIALS》;20161231;第18卷(第4期);2991-3029
BGP协议中正则表达式匹配系统的研究与软硬件实现;蓝维洲,;《中国优秀硕士学位论文全文数据库信息科技辑(月刊)》;20120215(第02期);I137-119
Intel_DPDK和Hyperscan的网络防御系统;赵旭涛;《网络与信息工程》;20161231;58-60
面向网络安全应用的硬件特征匹配结构研究;李凯,;《电脑知识与技术》;20161231;第12卷(第35期);13-16

Also Published As

Publication number Publication date
CN106776456A (zh) 2017-05-31

Similar Documents

Publication Publication Date Title
CN106776456B (zh) 基于fpga+npu的高速正则表达式匹配混合系统及方法
US20200394832A1 (en) Ray Tracing in Computer Graphics Using Intersection Testing at Selective Resolution
CN102064977B (zh) 基于gpu的高速网络报文内容检测方法
JP4091604B2 (ja) ビットストリングの照合方法および装置
CN1983196B (zh) 用于将执行线程分组的系统和方法
EP1660992B1 (en) Multi-core multi-thread processor
CN103678571B (zh) 应用于单台多核处理器主机的多线程网络爬虫执行方法
CN101814039B (zh) 一种基于GPU的Cache模拟器及其空间并行加速模拟方法
CN102855121B (zh) 分支处理方法与系统
KR100960120B1 (ko) 시그니처 스트링 저장 메모리 최적화방법과 그 메모리 구조및 시그니처 스트링 패턴 매칭방법
CN103106158A (zh) 包括键-值存储的存储器系统
CN104361296B (zh) 一种并行的大容量访问控制列表的查找方法
CN104834505B (zh) 一种多核多线程环境下numa感知的同步方法
CN106708626A (zh) 一种面向低功耗的异构多核共享cache划分方法
US20100057647A1 (en) Accommodating learned clauses in reconfigurable hardware accelerator for boolean satisfiability solver
CN116627892B (zh) 一种数据近存储计算方法、装置和存储介质
CN107102897B (zh) 一种多gpu并行处理的数据库主动防御方法
CN103176914B (zh) 一种低缺失率、低缺失惩罚的缓存方法和装置
CN104601562A (zh) 游戏服务器与数据库的交互方法和系统
CN115460128A (zh) 一种面向多芯粒组合芯片的片上网络仿真系统
CN109101276A (zh) 在cpu中执行指令的方法
CN105830160B (zh) 用于将经屏蔽数据写入到缓冲器的设备及方法
CN110324204A (zh) 一种在fpga中实现的高速正则表达式匹配引擎及方法
CN108389152A (zh) 一种图结构感知的图处理方法及装置
Lin et al. Efficient subgraph matching using gpus

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