太阳城集团

  • / 12
  • 下载费用:30 金币  

基于FPGANPU的高速正则表达式匹配混合系统及方法.pdf

摘要
申请专利号:

太阳城集团CN201710036627.6

申请日:

2017.01.18

公开号:

太阳城集团CN106776456A

公开日:

2017.05.31

当前法律状态:

实审

有效性:

审中

法律详情: 实质审查的生效IPC(主分类):G06F 15/167申请日:20170118|||公开
IPC分类号: G06F15/167; G06F13/16; H04L12/26 主分类号: G06F15/167
申请人: 中国人民解放军国防科学技术大学
发明人: 苏金树; 陈曙晖; 赵宝康; 徐成成; 王小峰; 王飞; 张博锋; 孙一品
地址: 410000 湖南省长沙市开福区三一大道国防科学技术大学
优先权:
专利代理机构: 深圳市兴科达知识产权代理有限公司 44260 代理人: 王翀
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

太阳城集团CN201710036627.6

授权太阳城集团号:

|||

法律状态太阳城集团日:

2017.06.23|||2017.05.31

法律状态类型:

太阳城集团实质审查的生效|||公开

摘要

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

权利要求书

1.一种基于FPGA+NPU的高速正则表达式匹配混合系统,其特征在于,包括FPGA+NPU的
软硬件结合匹配的混合系统,
FPGA+NPU的软硬件结合匹配的混合系统,包括正则表达匹配引擎;正则表达式匹配引
擎由硬件引擎和软件引擎两部分组成,硬件引擎是通过FPGA芯片上的可编程逻辑元件布
局、布线、烧录生成,软件引擎通过在NPU上软件编程实现,硬件引擎和软件引擎之间通过数
据缓冲区连接;所述FPGA芯片上设计若干个硬件引擎,NPU上根据其支持的线程数实例化若
干个软件线程;硬件引擎的存储器包括两级,FPGA的片上RAM作为一级存储器,存储访问概
率较高的DFA状态;RAM存储器划分成多个存储块,每两个硬件引擎通过双端口RAM独占一个
RAM存储块;FPGA片外DDR3SDRAM作为二级存储器,存储整个混合自动机的状态表项,混合自
动机的状态表项由所有的硬件引擎和软件引擎共享。
2.如权利要求1所述的于FPGA+NPU的高速正则表达式匹配混合系统,其特征在于,所述
硬件引擎和软件引擎以流水化的方式工作,网络报文的匹配先由FPGA上的硬件引擎处理,
硬件引擎处理完成后,再由FPGA上的任务传输单元交由NPU的软件引擎处理。
3.一种基于FPGA+NPU的高速正则表达式匹配方法,其特征在于,基于该正则表达式匹
配方法的步骤为:
第一步、处理正则表达式,生成混合自动机;首先将正则表达式规则集编译成一个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上的任务传输单元传递给软件引擎,由软件引擎完成剩余
报文的匹配工作。

说明书

基于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 Access
Memory,缩写为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 packet
inspection)”中提出的算法将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 packet
inspection)”中提出的算法将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混合架构的正则表达式匹配技术的研究成果。

关 键 词:
基于 FPGANPU 高速 正则 表达式 匹配 混合 系统 方法
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
太阳城集团本文
本文标题:基于FPGANPU的高速正则表达式匹配混合系统及方法.pdf
链接地址:http://zh228.com/p-6019886.html
太阳城集团我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
葡京赌场|welcome document.write ('');