[发明专利]基于多线程的成倍提高海量上行文件数据的协议解析处理方法和系统在审
申请号: | 201710299966.3 | 申请日: | 2017-04-28 |
公开(公告)号: | CN107147635A | 公开(公告)日: | 2017-09-08 |
发明(设计)人: | 魏晓林 | 申请(专利权)人: | 上海斐讯数据通信技术有限公司 |
主分类号: | H04L29/06 | 分类号: | H04L29/06;H04L29/08;G06F9/46 |
代理公司: | 杭州千克知识产权代理有限公司33246 | 代理人: | 周希良,吴辉辉 |
地址: | 201616 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 多线程 成倍 提高 海量 上行 文件 数据 协议 解析 处理 方法 系统 | ||
技术领域
本发明计算机领域,尤其涉及一种基于多线程的成倍提高海量上行文件数据的协议解析处理方法和系统。
背景技术
目前,对经过K2路由器的http用户行为数据包上报的上行文件的处理过程包括解压、解密和解析三个过程,其中上行文件的保存格式如图1所示,旧版本数据处理架构如图2所示,这三个过程采用的单节点多线程技术,每一个线程负责一个上行文件的处理方式是循环顺序处理,而每个上行文件中有上千万个数据包,每一个数据包的处理方式相同,每当一个线程完成一个上行文件的解压解密操作之后,对该上行文件中对每个数据包(PACKET)的处理采用的是顺序处理,解析效率极低。
为了解决上述技术问题,人们进行了长期的探索,例如中国专利公开了一种网络数据包负载均衡和预解析方法[申请号:CN201510535316.5],建立于一台众核服务器上,具体包括1个交换芯片和2个多核可编程智能包引擎,简称MPIPE;每个MPIPE分别对应1个具有36核的TILERACPU;其特征在于,具体包括以下步骤:步骤一、在众核服务器下配置交换芯片;交换芯片的物理端口平均分成两组,每一组分别对应1个MPIPE,从每个MPIPE对应的物理端口中任选一个组成逻辑端口,通过trunk命令进行逻辑端口的绑定;步骤二、输入的数据包经过交换芯片的外接接口XGBE进入后,平均分到2个MPIPE;数据包经过交换芯片的逻辑端口后,如果数据包的目的IP和源IP相同,将数据包分发到同一个物理端口,进而转发到物理端口对应的MPIPE;步骤三、每个MPIPE将数据包转发到对应的TILERACPU上,并进行数据包预解析;步骤四、在每个TILERACPU上调用pthread_create库函数创建36个数据包处理线程;步骤五、为每个数据包处理线程分别绑定一个TILERACPU核;步骤六、将数据包的预解析结果分发到对应的数据包处理线程;配置逻辑端口的hash算法,针对具有相同目的IP和源IP的数据包,计算数据包的id值,根据id值判断,将相同id值的数据包传输给绑定的同一个数据包处理线程;步骤七、36个处理线程分别通过调用库函数gxio_mpipe_iqueue_try_peek接收数据包并且得到预解析结果,保存源IP和目的IP。
再如,一种多线程分析的均衡分流方法[申请号:CN201610761812.7],具体方法为,对于N个线程,从线程0-(N-1),依次为每个线程分配一个线程序列值ThreadIndexID;所述N为大于1的整数;所述线程每个线程用于分析分配得到的数据包;创建一个数组空间,该数组空间包括N个数组,一一对应N个线程;每个线程所对应的那个数组用于存放该线程当前等待处理的数据个数;当向一个线程投递一个数据包时,该线程所对应的那个数组中用于存放该线程当前等待处理的数据个数值自加;当线程分析完一个数据包时,数组中用于存放该线程当前等待处理的数据个数值自减;数据包采集线程采集到数据包,按照tcp/ip协议的规范,得到每个数据包的四元组信息,进而得到每个数据包的哈希值;使用得到的哈希值与分析线程个数求模得到每个数据包关于线程的数据包线程序列值ThreadIndex;所述数据包线程序列值ThreadIndex指示该数据包所应该分配到的实际线程,该实际线程的线程序列值ThreadIndexID等于该数据包线程序列值ThreadIndex;定义一个用于均匀分流的哈希表,将数据包的四元组信息作为哈希表的key值,用于查询,将该数据包的实际分配线程序列值ThreadIndexID作为哈希表的value值写入;
数据包分配的具体方法步骤为:S1、查询当前数据包的四元组信息是否在哈希表中,如果是,则找到其在哈希表中对应的value值,从而找到该数据包实际应该对应的线程序列值ThreadIndexID,将该数据包直接分配给该线程等待处理;如果否,则进入下一步;S2查询当前数据包的数据包线程序列值ThreadIndex,从数组空间中读取其所对应的待处理的数据包个数是不是最多的一个线程,如果不是则直接分配给线程;如果是,进入下一步;S2、检查该数据包是不是会话的第一个数据包,如果不是,则将该数据包分配给线程;如果是,则将该数据包分配到当前等待处理的数据个数最少的线程,并将该数据包的四元组信息作为key值,实际分配的线程序列值ThreadIndexID作为value值记录在哈希表中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海斐讯数据通信技术有限公司,未经上海斐讯数据通信技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710299966.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:上衣(2)
- 下一篇:一种新型中间回热燃气轮机联合循环系统