一种多线程报文捕获方法、电子设备及计算机存储介质技术

技术编号:32221603 阅读:19 留言:0更新日期:2022-02-09 17:26
本申请公开多线程报文捕获方法:捕获多线程报文;对多线程共享的报文缓冲区的当前捕获到的总报文大小和报文长度进行原子计数操作,得到报文内容存储位置并进行存储;获得所需捕获总容量,并与总捕获容量进行比较;在不超过共享缓冲区预设的总捕获容量时,对报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到报文描述符存储位置并进行存储。多个线程可以在达到总捕获容量指标时共享同一个报文缓冲区,且在互斥访问的资源只包含两个数值型参数,即当前捕获到的总报文数和当前捕获到的总报文大小,通过原子计数操作访问方式,不存在互斥锁、动态内存申请,性能损耗低。本申请公开的电子设备及计算机存储介质也解决的相应的技术问题。相应的技术问题。相应的技术问题。

【技术实现步骤摘要】
一种多线程报文捕获方法、电子设备及计算机存储介质


[0001]本申请涉及计算机
,尤其是涉及一种多线程报文捕获方法、电子设备及计算机存储介质。

技术介绍

[0002]高性能测试仪的软件实现往往涉及多线程TCP/IP协议栈架构,因为随着物理端口速率的不断提升,软件单线程所能达到的最大吞吐量已经不能满足日常仿真测试的需求,因此需要将同一物理端口的流量按照某种规则分发给多个线程异步处理(DPDK技术等),以尽可能地提高测试仪软件的吞吐量,此时,需要将多个线程中因软件报文捕获产生的性能损耗将至最低。
[0003]通常有下列三种实现方式:1)、多个线程使用同一个报文缓冲区,加互斥锁:其违背了并发原则,互斥锁将带来极大的性能损耗。
[0004]2)、多个线程使用独立的固定容量(总捕获容量/线程数)的报文缓冲区:绝大多数的仿真测试场景中,流量的分发是做不到绝对的均衡的,因此往往会存在某个线程的捕获容量已满、而其他线程捕获容量未满的情况,从而无法达到总体的捕获容量指标。
[0005]3)、多个线程使用独立的动态分配的报文缓冲区:不足有二,一是需要动态维护多个线程的捕获总量以控制总的捕获容量指标,二是动态内存分配引入较大的性能损耗。

技术实现思路

[0006]为了多个线程在使用同一个固定总捕获容量的报文缓冲区时,保证达到捕获容量指标的同时将性能损耗将至最低,第一方面,本申请提供一种多线程报文捕获方法,采用如下的技术方案:捕获多线程报文,获取每个报文的报文描述符和报文内容,其中所述报文描述符包括报文长度;对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置;根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较;若所需捕获总容量小于或等于共享缓冲区预设的总捕获容量时,对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置;根据所述本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储;根据所述本次报文的报文内容存储位置,对本次报文的报文内容进行存储。
[0007]通过采用上述技术方案,本申请实施例提供的一种多线程报文捕获方法,捕获多线程报文,获取每个报文的报文描述符和报文内容,其中报文描述符包括报文长度;对多线
程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置;根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较;若所需捕获总容量小于或等于共享缓冲区预设的总捕获容量时,对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置;根据本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储;根据本次报文的报文内容存储位置,对本次报文的报文内容进行存储。多个线程可以在达到总捕获容量指标时共享同一个报文缓冲区,且在互斥访问的资源只包含两个数值型参数,即当前捕获到的总报文数和当前捕获到的总报文大小,通过原子计数操作访问方式,不存在互斥锁、动态内存申请,性能损耗低。
[0008]可选的,所述捕获多线程报文,获取每个报文的报文描述符和报文内容,其中所述报文描述符包括报文长度,之前还包括:申请一确定容量的一定大小报文缓冲区;所述报文缓冲区包括报文索引信息区、捕获报文描述符缓冲区和捕获报文内容缓冲区;其中报文索引信息区,用于存储当前捕获到的总报文数和当前捕获到的总报文大小;所述捕获报文描述符缓冲区用于存储报文描述符;所述捕获报文内容缓冲区用于存储报文内容。
[0009]通过采用上述技术方案,多个线程捕获每个报文前,申请一确定容量一定大小的报文缓冲区,共享使用同一个报文缓冲区,可以在捕获过程中达到捕获容量的指标。
[0010]可选的,确定报文缓冲区容量的步骤,包括:根据已知的总捕获容量的字节数和报文描述符长度,计算得到所述报文描述符的最大个数;根据报文索引信息区长度获得报文索引信息区容量;根据所述报文描述符的最大个数和报文描述符长度获得捕获报文描述符缓冲区容量;根据总捕获容量获得捕获报文内容缓冲区容量;根据报文索引信息区容量、捕获报文描述符缓冲区容量和捕获报文内容缓冲区容量确定报文缓冲区的大小。
[0011]通过采用上述技术方案,报文缓冲区的大小是根据报文索引信息区容量、捕获报文描述符缓冲区容量和捕获报文内容缓冲区容量确定的,考虑到捕获报文描述符缓冲区容量和捕获报文内容缓冲区容量,这样不会造成多余空间的浪费。
[0012]可选的,所述对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置,包括:对报文索引信息区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到累加之前存储在报文索引信息区的报文总量;根据所述累加之前的报文总量,得到本次报文的报文内容存储位置。
[0013]通过采用上述技术方案,原子计数操作,可以保证数值操作的原子性,对报文索引信息区的当前捕获到的总报文大小(total_pkt_size)和本次报文的报文长度(pkt_size)
进行原子计数操作atomic_fetch_and_add,取计数器的当前值并累加,即取累加之前的值,可得到累加之前的报文总量,这是一个累加计数的过成,而捕获到的报文是连续存储的,因此,累加之前的报文总量也为本次报文的报文内容存储位置。多个线程之间互斥访问的资源只包含数值型参数(例如当前捕获到的总报文大小total_pkt_size),通过atomic访问方式降低性能损耗。
[0014]可选的,所述根据所述本次报文的报文内容存储位置,对本次报文的报文内容进行存储,包括:根据所述报文缓冲区、所述报文索引信息区长度、所述报文描述符的最大个数和所述报文描述符长度得到捕获报文内容指针;根据所述捕获报文内容指针和所述本次报文的报文内容存储位置,将本次报文的报文内容存储至捕获报文内容缓冲区。
[0015]通过采用上述技术方案,根据报文缓冲区、报文索引信息区长度、报文描述符的最大个数和报文描述符长度得到捕获报文内容指针,捕获报文内容指针具体为(capture_buf_ptr=capture_ptr+sizeof(capture_index)+(capture_capacity/60)*sizeof(pkt_desc));根据捕获报文内容指针和本次报文的报文内容存储位置,将本次报文的报文内容存储至捕获报文内容缓冲区,存储报文内容至capture_buf_ptr[pkt_buf_offset](异步执行),摆脱单个任务的牵制,提高了灵活性和应用程序的执行效率。
[0016]可选的,所述对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置,包括:根据所述当前捕获到的总报文数通过原子计数操作累加1,得到累加之前的报文总数;根据所述累加之本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种多线程报文捕获方法,其特征在于,包括:捕获多线程报文,获取每个报文的报文描述符和报文内容,其中所述报文描述符包括报文长度;对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置;根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较;若所需捕获总容量小于或等于共享缓冲区预设的总捕获容量时,对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置;根据所述本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储;根据所述本次报文的报文内容存储位置,对本次报文的报文内容进行存储。2.根据权利要求1所述的一种多线程报文捕获方法,其特征在于,所述捕获多线程报文,获取每个报文的报文描述符和报文内容,其中所述报文描述符包括报文长度,之前还包括:申请一确定容量的一定大小报文缓冲区;所述报文缓冲区包括报文索引信息区、捕获报文描述符缓冲区和捕获报文内容缓冲区;其中报文索引信息区,用于存储当前捕获到的总报文数和当前捕获到的总报文大小;所述捕获报文描述符缓冲区用于存储报文描述符;所述捕获报文内容缓冲区用于存储报文内容。3.根据权利要求2所述的一种多线程报文捕获方法,其特征在于,确定报文缓冲区容量的步骤,包括:根据已知的总捕获容量的字节数和报文描述符长度,计算得到所述报文描述符的最大个数;根据报文索引信息区长度获得报文索引信息区容量;根据所述报文描述符的最大个数和报文描述符长度获得捕获报文描述符缓冲区容量;根据总捕获容量获得捕获报文内容缓冲区容量;根据报文索引信息区容量、捕获报文描述符缓冲区容量和捕获报文内容缓冲区容量确定报文缓冲区的大小。4.根据权利要求3所述的一种多线程报文捕获方法,其特征在于,所述对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置,包括:对报文索引信息区的当前捕获到的总报文大小和本次报文...

【专利技术属性】
技术研发人员:杨周亮
申请(专利权)人:江苏信而泰智能装备有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利