发明名称 基于GPU的高速网络报文内容检测方法
摘要 本发明公开了一种基于GPU的高速网络报文内容检测方法,要解决的技术问题是减少GPU匹配时出现分支的次数以及优化存储器访问策略,提高报文内容检查的性能。技术方案是先预处理模式集和分配缓冲区,对DFA的状态转移表进行扩展,分别在CPU内存和GPU全局存储器为报文和匹配结果分配缓冲区;接着GPU匹配线程将要匹配的报文加载至共享存储器;然后设计实现基于GPU的正则表达式匹配引擎,控制正则表达式匹配引擎进行模式匹配。采用本发明可提高报文缓冲与报文传输的并行性,既提高正则表达式匹配速度,又提高报文缓冲和报文内容检查的性能。
申请公布号 CN102064977A 申请公布日期 2011.05.18
申请号 CN201010539214.8 申请日期 2010.11.10
申请人 中国人民解放军国防科学技术大学 发明人 苏金树;赵国鸿;王磊;陈曙晖;王勇军;唐勇;钟求喜;张怡;庞立会;张博锋;刘波
分类号 H04L12/26(2006.01)I;H04L12/56(2006.01)I 主分类号 H04L12/26(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种基于GPU的高速网络报文内容检测方法,其特征在于包括以下步骤:第一步,预处理模式集和分配缓冲区:1.1使用正则表达式编译算法将正则表达式模式集编译为一个非确定性有限自动机NFA;1.2使用子集构造算法从NFA构建DFA,并对DFA的状态转移表进行扩展,DFA的状态转移表是一个二维数组,数组的行数与DFA的状态数相同,每一行有256列分别对应每一个ASCII字符输入,状态转移表第i行第j列的值表示状态i在输入ASCII字符j时的下一个状态;DFA的状态标记向量含有的元素的个数与DFA的状态数相同,每一个元素表示相应的DFA状态是否为可接受状态;扩展后的DFA状态转移表的行数与DFA的状态数相同,在每一行最后增加一列用于存储在该状态达到接受状态的正则表达式ID,如果该状态不是接受状态,则该状态的最后一列置0;1.3将DFA状态转移表绑定至GPU纹理存储器:首先把DFA状态转移表拷贝至GPU全局存储器,然后将该全局存储器区域与GPU纹理缓存绑定;1.4分别在CPU内存和GPU全局存储器为报文和匹配结果分配缓冲区:1.4.1将GPU全局存储器中报文缓冲区的宽度设定为2K字节,用于存储报文的有效载荷,长度为l,l为GPU同时处理的报文的个数,由GPU的性能决定,通过实验确定;CPU内存中报文缓冲区的宽度为2K字节,长度为2l,CPU内存中报文缓冲区是一个循环队列,因此也叫报文缓冲队列;1.4.2分配结果缓冲区:CPU内存与GPU全局存储器中匹配结果缓冲区的长度为l,宽度为4字节,用于存储被匹配上的正则表达式ID;第二步,GPU线程根据自己的ID从GPU全局存储器报文缓冲区将要匹配的报文加载至该线程所在线程块对应的共享存储器。第三步,设计实现基于GPU的正则表达式匹配引擎,基于GPU的正则表达式匹配引擎是一段运行在GPU上的程序,该程序从GPU纹理存储器读取DFA状态转移表,对全局存储器中报文缓冲区中的报文进行匹配,其具体流程如下:3.1将DFA当前状态置为初始状态;3.2对加载到共享存储器的报文进行模式匹配,具体步骤为:3.2.1从第一个字符开始,每次取报文的一个字符作为DFA的输入进行匹配;3.2.2根据输入字符和当前DFA状态在纹理存储器中查找DFA状态表,得到下一个状态;3.2.3将DFA当前状态置为3.3.2获得的“下一个状态”;3.2.4判断DFA当前状态是不是接受状态,如果是则将当前状态对应的正则表达式编号记录至GPU全局存储器结果缓冲区中;3.2.5如果当前报文所有字符都已匹配完,则结束;否则,转3.2.1。第四步CPU同时运行报文缓冲线程和GPU控制线程,控制正则表达式匹配引擎进行模式匹配,报文缓冲线程是捕获和预处理报文的CPU应用程序,GPU控制线程是启动正则表达式匹配引擎并在GPU匹配完成后从GPU全局存储器下载匹配结果的CPU应用程序;4.1报文缓冲线程的流程是:4.1.1剥离报文头信息,提取报文有效载荷;4.1.2对报文进行“填充”与“截断”:如果报文有效载荷的长度小于2K字节则在报文末尾填充0;如果报文有效载荷长度大于2K字节,则先在报文末尾填充0,使得报文长度为2K字节的整数倍,然后将报文分割成多个大小为2K字节的报文;4.1.3将通过4.1.1和4.1.2处理过的报文存储至CPU内存中报文缓冲区;报文缓冲线程通过队列头指针和队列尾指针来对CPU内存中报文缓冲区进行读写,报文缓冲线程存储报文时,如果报文缓冲区满,则丢弃报文;否则将报文存储至报文缓冲队列尾,同时将报文缓冲队列尾指针移动至下一个缓冲区位置,转4.1.1;4.2GPU控制线程的流程如下:4.2.1如果CPU内存报文缓冲区中报文数目不小于l,GPU控制线程从CPU内存报文缓冲队列拷贝l个报文至GPU全局存储器报文缓冲区,并将CPU报文缓冲队列头指针向后顺移l个位置;否则,GPU控制线程等待直到报文缓冲队列中的报文不少于l个;4.2.2当报文开始从CPU内存往GPU全局存储器报文缓冲区传输后,GPU控制线程启动正则表达式匹配引擎;正则表达式匹配引擎对全局存储器中的报文进行模式匹配,将匹配结果即当前状态对应的正则表达式编号存储在GPU全局存储器结果缓冲区;4.2.3GPU匹配结束后,GPU控制线程从GPU全局存储器结果缓冲区将匹配结果拷贝至CPU内存结果缓冲区,转4.2.1。
地址 410073 湖南省长沙市开福区德雅路109号