CN114024923A - 一种多线程报文捕获方法、电子设备及计算机存储介质 - Google Patents
一种多线程报文捕获方法、电子设备及计算机存储介质 Download PDFInfo
- Publication number
- CN114024923A CN114024923A CN202111278297.4A CN202111278297A CN114024923A CN 114024923 A CN114024923 A CN 114024923A CN 202111278297 A CN202111278297 A CN 202111278297A CN 114024923 A CN114024923 A CN 114024923A
- Authority
- CN
- China
- Prior art keywords
- message
- total
- capacity
- descriptor
- packet
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/901—Buffering arrangements using storage descriptor, e.g. read or write pointers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9084—Reactions to storage capacity overflow
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/12—Avoiding congestion; Recovering from congestion
- H04L47/125—Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开多线程报文捕获方法:捕获多线程报文;对多线程共享的报文缓冲区的当前捕获到的总报文大小和报文长度进行原子计数操作,得到报文内容存储位置并进行存储;获得所需捕获总容量,并与总捕获容量进行比较;在不超过共享缓冲区预设的总捕获容量时,对报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到报文描述符存储位置并进行存储。多个线程可以在达到总捕获容量指标时共享同一个报文缓冲区,且在互斥访问的资源只包含两个数值型参数,即当前捕获到的总报文数和当前捕获到的总报文大小,通过原子计数操作访问方式,不存在互斥锁、动态内存申请,性能损耗低。本申请公开的电子设备及计算机存储介质也解决的相应的技术问题。
Description
技术领域
本申请涉及计算机技术领域,尤其是涉及一种多线程报文捕获方法、电子设备及计算机存储介质。
背景技术
高性能测试仪的软件实现往往涉及多线程TCP/IP协议栈架构,因为随着物理端口速率的不断提升,软件单线程所能达到的最大吞吐量已经不能满足日常仿真测试的需求,因此需要将同一物理端口的流量按照某种规则分发给多个线程异步处理(DPDK技术等),以尽可能地提高测试仪软件的吞吐量,此时,需要将多个线程中因软件报文捕获产生的性能损耗将至最低。
通常有下列三种实现方式:
1)、多个线程使用同一个报文缓冲区,加互斥锁:其违背了并发原则,互斥锁将带来极大的性能损耗。
2)、多个线程使用独立的固定容量(总捕获容量/线程数)的报文缓冲区:绝大多数的仿真测试场景中,流量的分发是做不到绝对的均衡的,因此往往会存在某个线程的捕获容量已满、而其他线程捕获容量未满的情况,从而无法达到总体的捕获容量指标。
3)、多个线程使用独立的动态分配的报文缓冲区:不足有二,一是需要动态维护多个线程的捕获总量以控制总的捕获容量指标,二是动态内存分配引入较大的性能损耗。
发明内容
为了多个线程在使用同一个固定总捕获容量的报文缓冲区时,保证达到捕获容量指标的同时将性能损耗将至最低,第一方面,本申请提供一种多线程报文捕获方法,采用如下的技术方案:
捕获多线程报文,获取每个报文的报文描述符和报文内容,其中所述报文描述符包括报文长度;
对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置;
根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较;
若所需捕获总容量小于或等于共享缓冲区预设的总捕获容量时,对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置;
根据所述本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储;
根据所述本次报文的报文内容存储位置,对本次报文的报文内容进行存储。
通过采用上述技术方案,本申请实施例提供的一种多线程报文捕获方法,捕获多线程报文,获取每个报文的报文描述符和报文内容,其中报文描述符包括报文长度;对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置;根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较;若所需捕获总容量小于或等于共享缓冲区预设的总捕获容量时,对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置;根据本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储;根据本次报文的报文内容存储位置,对本次报文的报文内容进行存储。多个线程可以在达到总捕获容量指标时共享同一个报文缓冲区,且在互斥访问的资源只包含两个数值型参数,即当前捕获到的总报文数和当前捕获到的总报文大小,通过原子计数操作访问方式,不存在互斥锁、动态内存申请,性能损耗低。
可选的,所述捕获多线程报文,获取每个报文的报文描述符和报文内容,其中所述报文描述符包括报文长度,之前还包括:
申请一确定容量的一定大小报文缓冲区;
所述报文缓冲区包括报文索引信息区、捕获报文描述符缓冲区和捕获报文内容缓冲区;
其中报文索引信息区,用于存储当前捕获到的总报文数和当前捕获到的总报文大小;
所述捕获报文描述符缓冲区用于存储报文描述符;
所述捕获报文内容缓冲区用于存储报文内容。
通过采用上述技术方案,多个线程捕获每个报文前,申请一确定容量一定大小的报文缓冲区,共享使用同一个报文缓冲区,可以在捕获过程中达到捕获容量的指标。
可选的,确定报文缓冲区容量的步骤,包括:
根据已知的总捕获容量的字节数和报文描述符长度,计算得到所述报文描述符的最大个数;
根据报文索引信息区长度获得报文索引信息区容量;
根据所述报文描述符的最大个数和报文描述符长度获得捕获报文描述符缓冲区容量;
根据总捕获容量获得捕获报文内容缓冲区容量;
根据报文索引信息区容量、捕获报文描述符缓冲区容量和捕获报文内容缓冲区容量确定报文缓冲区的大小。
通过采用上述技术方案,报文缓冲区的大小是根据报文索引信息区容量、捕获报文描述符缓冲区容量和捕获报文内容缓冲区容量确定的,考虑到捕获报文描述符缓冲区容量和捕获报文内容缓冲区容量,这样不会造成多余空间的浪费。
可选的,所述对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置,包括:
对报文索引信息区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到累加之前存储在报文索引信息区的报文总量;
根据所述累加之前的报文总量,得到本次报文的报文内容存储位置。
通过采用上述技术方案,原子计数操作,可以保证数值操作的原子性,对报文索引信息区的当前捕获到的总报文大小(total_pkt_size)和本次报文的报文长度(pkt_size)进行原子计数操作atomic_fetch_and_add,取计数器的当前值并累加,即取累加之前的值,可得到累加之前的报文总量,这是一个累加计数的过成,而捕获到的报文是连续存储的,因此,累加之前的报文总量也为本次报文的报文内容存储位置。多个线程之间互斥访问的资源只包含数值型参数(例如当前捕获到的总报文大小total_pkt_size),通过atomic访问方式降低性能损耗。
可选的,所述根据所述本次报文的报文内容存储位置,对本次报文的报文内容进行存储,包括:
根据所述报文缓冲区、所述报文索引信息区长度、所述报文描述符的最大个数和所述报文描述符长度得到捕获报文内容指针;
根据所述捕获报文内容指针和所述本次报文的报文内容存储位置,将本次报文的报文内容存储至捕获报文内容缓冲区。
通过采用上述技术方案,根据报文缓冲区、报文索引信息区长度、报文描述符的最大个数和报文描述符长度得到捕获报文内容指针,捕获报文内容指针具体为(capture_buf_ptr=capture_ptr+sizeof(capture_index)+(capture_capacity/60)*sizeof(pkt_desc));根据捕获报文内容指针和本次报文的报文内容存储位置,将本次报文的报文内容存储至捕获报文内容缓冲区,存储报文内容至capture_buf_ptr[pkt_buf_offset](异步执行),摆脱单个任务的牵制,提高了灵活性和应用程序的执行效率。
可选的,所述对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置,包括:
根据所述当前捕获到的总报文数通过原子计数操作累加1,得到累加之前的报文总数;
根据所述累加之前的报文总数,得到本次报文的报文描述符存储位置。
通过采用上述技术方案,原子计数操作,可以保证数值操作的原子性,将当前捕获到的总报文数(total_pkt_count)累加1,并得到累加之前的报文总数,同报文连续存储的原理,累加之前的报文总数也为本次报文的报文描述符在capture_desc_ptr中的存储位置。多个线程之间互斥访问的资源只包含数值型参数(例如当前捕获到的总报文数total_pkt_count),通过atomic访问方式降低性能损耗。
可选的,所述根据所述本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储,包括:
根据所述报文缓冲区和所述报文索引信息区长度得到捕获报文描述符指针;
根据所述捕获报文描述符指针和所述本次报文的报文描述符存储位置,将本次报文的报文描述符存储至捕获报文描述符缓冲区。
通过采用上述技术方案,根据报文缓冲区和报文索引信息区长度得到捕获报文描述符指针,具体的,捕获描述符指针(capture_desc_ptr=capture_ptr+sizeof(capture_index));根据捕获报文描述符指针和本次报文的报文描述符存储位置,将本次报文的报文描述符存储至捕获报文描述符缓冲区,存储报文描述符信息至capture_desc_ptr[pkt_desc_index](异步执行),摆脱单个任务的牵制,提高了灵活性和应用程序的执行效率。
可选的,所述根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较,之后还包括:
若所需捕获总容量大于共享缓冲区预设的总捕获容量时,则捕获结束。
通过采用上述技术方案,若所需捕获总容量大于共享缓冲区预设的总捕获容量时,说明此次捕获到的报文由于已经超过总捕获容量了,导致无法存储,因此,捕获结束,从而保证达到捕获容量指标。
第二方面,本申请还提供一种电子设备,采用如下的技术方案,包括:
存储器,用于存储有计算机程序;
处理器,用于运行所述计算机程序时执行如上任一项所述的一种多线程报文捕获方法的步骤。
采用上述技术方案,多个线程可以在达到总捕获容量指标时共享同一个报文缓冲区,且在互斥访问的资源只包含两个数值型参数,即当前捕获到的总报文数和当前捕获到的总报文大小,通过原子计数操作访问方式,不存在互斥锁、动态内存申请,性能损耗低。
第三方面,本申请还提供一种计算机存储介质,采用如下的技术方案:
所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时能实现如上任一项所述的一种多线程报文捕获方法的步骤。
采用上述技术方案,多个线程可以在达到总捕获容量指标时共享同一个报文缓冲区,且在互斥访问的资源只包含两个数值型参数,即当前捕获到的总报文数和当前捕获到的总报文大小,通过原子计数操作访问方式,不存在互斥锁、动态内存申请,性能损耗低。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请提供的一种多线程报文捕获方法的一个实施例的流程示意图;
图2为本申请实施例提供的报文缓冲区示意图;
图3为本申请实施例提供的确定报文缓冲区容量的流程示意图;
图4为本申请提供的一种多线程报文捕获方法的另一个实施例的流程示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
以下结合附图对本申请作进一步详细说明。
本具体实施例仅仅是对本申请的解释,其并不是对本申请的限制,本领域技术人员在阅读完本说明书后可以根据需要对本实施例做出没有创造性贡献的修改,但只要在本申请的权利要求范围内都受到专利法的保护。为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
对本申请中相关专业名词进行解释,如下:
多线程,是一种广泛使用的编程和执行模型,它允许多个线程存在于一个进程的前后流程中。这些线程共享进程的资源,但是能够独立执行。这种多线程编程模型为开发人员提供了并发执行的抽象概念。多线程也可以应用于一个进程,以便实现多处理系统上的并行执行。
报文(message),是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。报文捕获功能使设备能够捕获其收到的报文,提供了一种定位网络问题的途径。捕获的报文存放在设备的缓冲区中,方便用户查看捕获的报文。
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
互斥锁:在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。有静态方式和动态方式两种方法创建互斥锁。互斥锁的属性在创建锁的时候指定,在LinuxThreads实现中仅有一个锁类型属性,不同的锁类型在试图对一个已经被锁定的互斥锁加锁时表现不同。
请参阅图1和图2,图1为本申请提供的一种多线程报文捕获方法的一个实施例的流程示意图,图2为本申请实施例提供的报文缓冲区示意图。
本申请实施例提供的一种多线程报文捕获方法,包括以下步骤:
步骤S101、捕获多线程报文,获取每个报文的报文描述符和报文内容,其中报文描述符包括报文长度;
本实施例中,对多线程的报文进行捕获,其中每个报文包含两个信息:报文描述符(pkt_desc)和报文内容(pkt_buf_content),其中报文描述符(pkt_desc)由报文长度(pkt_size)、报文存储位置(pkt_buf_offset)、捕获时间戳(pkt_timestamp)等组成。
步骤S102、对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置;
本实施例中,多个线程使用同一个报文缓冲区,根据图2中报文缓冲区示意图所展示的结构,对报文索引信息区的当前捕获到的总报文大小(total_pkt_size)和本次报文的报文长度(pkt_size)进行原子计数操作atomic_fetch_and_add,取计数器的当前值并累加,即取累加之前的值,可得到累加之前的报文总量,这是一个累加计数的过成,而捕获到的报文是连续存储的,因此,累加之前的报文总量也为本次报文的报文内容存储位置(或者称为数组索引或者内存偏移量),具体表达式为:pkt_buf_offset=atomic_fetch_and_add(total_pkt_size,pkt_size);
其中,Atomic:原子计数操作,可以保证数值操作的原子性,上文中的atomic_fetch_and_add(参数1,参数2)表示此函数的原子计数操作方式(如gcc内置的原子操作__sync_fetch_and_add):
{
临时参数=参数1;
参数1+=参数2;
return 临时参数;
}
步骤S103、根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较;
本实施例中,将报文内容的存储位置(pkt_buf_offset)和pkt_size(本次报文的报文长度)相加得到所需捕获总容量,比较(pkt_buf_offset+pkt_size)和capture_capacity的大小,判断本次报文能否成功捕获,其中capture_capacity为总捕获容量。
步骤S104、若所需捕获总容量小于或等于共享缓冲区预设的总捕获容量时,对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置;
本实施例中,只有当(pkt_buf_offset+pkt_size)小于或等于capture_capacity时,本次报文才可捕获成功,此时,再根据图2中报文缓冲区示意图所展示的结构,将当前捕获到的总报文数(total_pkt_count)累加1,并得到累加之前的报文总数,同报文连续存储的原理,累加之前的报文总数也为本次报文的报文描述符在capture_desc_ptr中的存储位置,具体表达式为:pkt_desc_index=atomic_fetch_and_add(total_pkt_count,1)。
步骤S105、根据本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储;
本实施例中,根据报文缓冲区和报文索引信息区长度得到捕获报文描述符指针,具体的,捕获描述符指针(capture_desc_ptr=capture_ptr+sizeof(capture_index));根据捕获报文描述符指针和本次报文的报文描述符存储位置,将本次报文的报文描述符存储至捕获报文描述符缓冲区,存储报文描述符信息至capture_desc_ptr[pkt_desc_index](异步执行)。
步骤S106、根据本次报文的报文内容存储位置,对本次报文的报文内容进行存储。
本实施例中,根据报文缓冲区、报文索引信息区长度、报文描述符的最大个数和报文描述符长度得到捕获报文内容指针,捕获报文内容指针具体为(capture_buf_ptr=capture_ptr+sizeof(capture_index)+(capture_capacity/60)*sizeof(pkt_desc));根据捕获报文内容指针和本次报文的报文内容存储位置,将本次报文的报文内容存储至捕获报文内容缓冲区,存储报文内容至capture_buf_ptr[pkt_buf_offset](异步执行)。
通过采用上述技术方案,本申请实施例提供的一种多线程报文捕获方法,捕获多线程报文,获取每个报文的报文描述符和报文内容,其中报文描述符包括报文长度;对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置;根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较;若所需捕获总容量小于或等于共享缓冲区预设的总捕获容量时,对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置;根据本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储;根据本次报文的报文内容存储位置,对本次报文的报文内容进行存储。多个线程可以在达到总捕获容量指标时共享同一个报文缓冲区,且在互斥访问的资源只包含两个数值型参数,即当前捕获到的总报文数和当前捕获到的总报文大小,通过原子计数操作访问方式,不存在互斥锁、动态内存申请,性能损耗低。
在上述实施例中,为了捕获过程中达到捕获容量的指标,该方法进一步的在捕获多线程报文,获取每个报文的报文描述符和报文内容,其中报文描述符包括报文长度,之前还包括:申请一确定容量的一定大小报文缓冲区(capture_ptr),而报文缓冲区(capture_ptr)包括报文索引信息区(capture_index)、捕获报文描述符缓冲区(capture_desc)和捕获报文内容缓冲区(capture_buf);其中报文索引信息区(capture_index),报文索引信息区相当于一个累加计数器,由两个初始值为0的数值类型变量组成(通常为uint64类型,占报文缓冲区的前16字节),用于记录存储当前捕获到的总报文数(total_pkt_count)和当前捕获到的总报文大小(total_pkt_size);捕获报文描述符缓冲区(capture_desc)用于存储报文描述符(pkt_desc);捕获报文内容缓冲区(capture_buf)用于存储报文内容(pkt_buf_content)。
请参照图3所示,确定报文缓冲区容量的步骤,包括:
步骤S301、根据已知的总捕获容量的字节数和报文描述符长度,计算得到报文描述符的最大个数;
本实施例中,根据总捕获容量字节数(capture_capacity),可以计算出最多需要占用的报文描述符个数(按最小报文长度60字节计算,报文描述符的最大个数即为capture_capacity/60)。总捕获容量字节数(capture_capacity)是固定容量的,因为测试仪表的内存规格固定(插几根内存条/每跟内存条的大小都是固定的),所以任何内存捕获方案的捕获容量始终是由上限值的,本方案的捕获容量上限值为固定值,即固定容量的内存捕获。
步骤S302、根据报文索引信息区长度获得报文索引信息区容量;
步骤S303、根据报文描述符的最大个数和报文描述符长度获得捕获报文描述符缓冲区容量;
步骤S304、根据总捕获容量获得捕获报文内容缓冲区容量;
步骤S305、根据报文索引信息区容量、捕获报文描述符缓冲区容量和捕获报文内容缓冲区容量确定报文缓冲区的大小。
本实施例中,申请一块大小为(sizeof(capture_index)+(capture_capacity/60)*sizeof(pkt_desc)+capture_capacity)的连续内存空间作为报文缓冲区(capture_ptr)。多个线程使用同一个固定容量(总捕获容量)的报文缓冲区,保证达到捕获容量指标。
可选的,如图4所示,为本申请提供的一种多线程报文捕获方法的另一个实施例的流程示意图。
本申请实施例提供的一种多线程报文捕获方法,包括以下步骤:
步骤S401、捕获多线程报文,获取每个报文的报文描述符和报文内容,其中报文描述符包括报文长度;
步骤S402、对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置;
步骤S403、根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较;
步骤S404、若所需捕获总容量大于共享缓冲区预设的总捕获容量时,则捕获结束。
步骤S405、若所需捕获总容量小于或等于共享缓冲区预设的总捕获容量时,对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置;
步骤S406、根据本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储;
步骤S407、根据本次报文的报文内容存储位置,对本次报文的报文内容进行存储。
本申请实施例中,若所需捕获总容量大于共享缓冲区预设的总捕获容量时,说明此次捕获到的报文由于已经超过总捕获容量了,导致无法存储,因此,捕获结束,从而保证达到捕获容量指标。
本申请还提供了一种电子设备及计算机存储介质,其均具有本申请实施例提供的一种多线程报文捕获方法具有的对应效果。请参阅图5,图5为本申请实施例提供的一种电子设备的结构示意图。
本申请实施例提供的一种电子设备,包括:
存储器501,用于存储有计算机程序;
处理器502,用于运行计算机程序时执行如上任一项的一种多线程报文捕获方法的步骤。
本申请实施例提供的一种计算机存储介质,采用如下的技术方案:
计算机存储介质上存储有计算机程序,计算机程序被处理器执行时能实现如上任一项的一种多线程报文捕获方法的步骤。
本申请实施例提供的一种电子设备及计算机存储介质中相关部分的说明请参见本申请实施例提供的一种多线程报文捕获方法中对应部分的详细说明,在此不再赘述。另外,本申请实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
以上所述,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本申请的方法及其核心思想,不应理解为对本申请的限制。本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。
Claims (10)
1.一种多线程报文捕获方法,其特征在于,包括:
捕获多线程报文,获取每个报文的报文描述符和报文内容,其中所述报文描述符包括报文长度;
对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置;
根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较;
若所需捕获总容量小于或等于共享缓冲区预设的总捕获容量时,对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置;
根据所述本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储;
根据所述本次报文的报文内容存储位置,对本次报文的报文内容进行存储。
2.根据权利要求1所述的一种多线程报文捕获方法,其特征在于,所述捕获多线程报文,获取每个报文的报文描述符和报文内容,其中所述报文描述符包括报文长度,之前还包括:
申请一确定容量的一定大小报文缓冲区;
所述报文缓冲区包括报文索引信息区、捕获报文描述符缓冲区和捕获报文内容缓冲区;
其中报文索引信息区,用于存储当前捕获到的总报文数和当前捕获到的总报文大小;
所述捕获报文描述符缓冲区用于存储报文描述符;
所述捕获报文内容缓冲区用于存储报文内容。
3.根据权利要求2所述的一种多线程报文捕获方法,其特征在于,确定报文缓冲区容量的步骤,包括:
根据已知的总捕获容量的字节数和报文描述符长度,计算得到所述报文描述符的最大个数;
根据报文索引信息区长度获得报文索引信息区容量;
根据所述报文描述符的最大个数和报文描述符长度获得捕获报文描述符缓冲区容量;
根据总捕获容量获得捕获报文内容缓冲区容量;
根据报文索引信息区容量、捕获报文描述符缓冲区容量和捕获报文内容缓冲区容量确定报文缓冲区的大小。
4.根据权利要求3所述的一种多线程报文捕获方法,其特征在于,所述对多线程共享的报文缓冲区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到本次报文的报文内容存储位置,包括:
对报文索引信息区的当前捕获到的总报文大小和本次报文的报文长度进行原子计数操作,得到累加之前存储在报文索引信息区的报文总量;
根据所述累加之前的报文总量,得到本次报文的报文内容存储位置。
5.根据权利要求4所述的一种多线程报文捕获方法,其特征在于,所述根据所述本次报文的报文内容存储位置,对本次报文的报文内容进行存储,包括:
根据所述报文缓冲区、所述报文索引信息区长度、所述报文描述符的最大个数和所述报文描述符长度得到捕获报文内容指针;
根据所述捕获报文内容指针和所述本次报文的报文内容存储位置,将本次报文的报文内容存储至捕获报文内容缓冲区。
6.根据权利要求3所述的一种多线程报文捕获方法,其特征在于,所述对多线程共享的报文缓冲区的当前捕获到的总报文数通过原子计数操作累加1,得到本次报文的报文描述符存储位置,包括:
根据所述当前捕获到的总报文数通过原子计数操作累加1,得到累加之前的报文总数;
根据所述累加之前的报文总数,得到本次报文的报文描述符存储位置。
7.根据权利要求6所述的一种多线程报文捕获方法,其特征在于,所述根据所述本次报文的报文描述符存储位置,对本次报文的报文描述符进行存储,包括:
根据所述报文缓冲区和所述报文索引信息区长度得到捕获报文描述符指针;
根据所述捕获报文描述符指针和所述本次报文的报文描述符存储位置,将本次报文的报文描述符存储至捕获报文描述符缓冲区。
8.根据权利要求1-8所述的任一种多线程报文捕获方法,其特征在于,所述根据报文内容的存储位置和本次报文长度获得所需捕获总容量,与总捕获容量进行比较,之后还包括:
若所需捕获总容量大于共享缓冲区预设的总捕获容量时,则捕获结束。
9.一种电子设备,其特征在于,包括:
存储器,用于存储有计算机程序;
处理器,用于运行所述计算机程序时执行如权利要求1~8任一项所述的一种多线程报文捕获方法的步骤。
10.一种计算机存储介质,其特征在于,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时能实现如权利要求1~8任一项所述的一种多线程报文捕获方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111278297.4A CN114024923A (zh) | 2021-10-30 | 2021-10-30 | 一种多线程报文捕获方法、电子设备及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111278297.4A CN114024923A (zh) | 2021-10-30 | 2021-10-30 | 一种多线程报文捕获方法、电子设备及计算机存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114024923A true CN114024923A (zh) | 2022-02-08 |
Family
ID=80059164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111278297.4A Pending CN114024923A (zh) | 2021-10-30 | 2021-10-30 | 一种多线程报文捕获方法、电子设备及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114024923A (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101783715A (zh) * | 2009-11-19 | 2010-07-21 | 北京邮电大学 | 监测网络丢包率的方法及系统 |
CN101968748A (zh) * | 2010-09-17 | 2011-02-09 | 北京星网锐捷网络技术有限公司 | 多线程数据调度方法、装置及网络设备 |
CN105656800A (zh) * | 2014-12-05 | 2016-06-08 | 中兴通讯股份有限公司 | 一种传输报文的方法及装置 |
CN106487713A (zh) * | 2015-08-26 | 2017-03-08 | 深圳市中兴微电子技术有限公司 | 一种服务质量复用方法及装置 |
CN106911740A (zh) * | 2015-12-22 | 2017-06-30 | 深圳市中兴微电子技术有限公司 | 一种缓存管理的方法和装置 |
CN108874688A (zh) * | 2018-06-29 | 2018-11-23 | 深圳市风云实业有限公司 | 一种报文数据缓存方法及装置 |
CN109783250A (zh) * | 2018-12-18 | 2019-05-21 | 中兴通讯股份有限公司 | 一种报文转发方法及网络设备 |
CN112565338A (zh) * | 2020-11-10 | 2021-03-26 | 中国人民解放军战略支援部队信息工程大学 | 一种以太网报文捕获、过滤、存储、实时解析方法及系统 |
WO2021209016A1 (zh) * | 2020-04-17 | 2021-10-21 | 华为技术有限公司 | 网络设备中处理报文的方法和相关设备 |
-
2021
- 2021-10-30 CN CN202111278297.4A patent/CN114024923A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101783715A (zh) * | 2009-11-19 | 2010-07-21 | 北京邮电大学 | 监测网络丢包率的方法及系统 |
CN101968748A (zh) * | 2010-09-17 | 2011-02-09 | 北京星网锐捷网络技术有限公司 | 多线程数据调度方法、装置及网络设备 |
CN105656800A (zh) * | 2014-12-05 | 2016-06-08 | 中兴通讯股份有限公司 | 一种传输报文的方法及装置 |
CN106487713A (zh) * | 2015-08-26 | 2017-03-08 | 深圳市中兴微电子技术有限公司 | 一种服务质量复用方法及装置 |
CN106911740A (zh) * | 2015-12-22 | 2017-06-30 | 深圳市中兴微电子技术有限公司 | 一种缓存管理的方法和装置 |
CN108874688A (zh) * | 2018-06-29 | 2018-11-23 | 深圳市风云实业有限公司 | 一种报文数据缓存方法及装置 |
CN109783250A (zh) * | 2018-12-18 | 2019-05-21 | 中兴通讯股份有限公司 | 一种报文转发方法及网络设备 |
WO2021209016A1 (zh) * | 2020-04-17 | 2021-10-21 | 华为技术有限公司 | 网络设备中处理报文的方法和相关设备 |
CN112565338A (zh) * | 2020-11-10 | 2021-03-26 | 中国人民解放军战略支援部队信息工程大学 | 一种以太网报文捕获、过滤、存储、实时解析方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Yang et al. | A wait-free queue as fast as fetch-and-add | |
US7908441B2 (en) | Value recycling facility for multithreaded computations | |
CN110018914B (zh) | 基于共享内存的消息采集方法及装置 | |
US9767019B2 (en) | Pauseless garbage collector write barrier | |
US9274798B2 (en) | Multi-threaded logging | |
EP3295293B1 (en) | Thread safe lock-free concurrent write operations for use with multi-threaded in-line logging | |
CN111324427B (zh) | 一种基于dsp的任务调度方法及装置 | |
US20160070535A1 (en) | Method and system for queuing data for multiple readers and writers | |
US9128749B1 (en) | Method and system for lock free statistics collection | |
US20190042615A1 (en) | Hybrid concurrency control | |
CN110290190A (zh) | 一种采集数据的方法、被监控设备及监控服务器 | |
Kerbl et al. | The broker queue: A fast, linearizable fifo queue for fine-granular work distribution on the gpu | |
Hruby et al. | On Sockets and System Calls: Minimizing Context Switches for the Socket {API} | |
Sundell | Efficient and practical non-blocking data structures | |
Kirsch et al. | Performance, scalability, and semantics of concurrent FIFO queues | |
Brandenburg et al. | Reader-writer synchronization for shared-memory multiprocessor real-time systems | |
CN114024923A (zh) | 一种多线程报文捕获方法、电子设备及计算机存储介质 | |
CN107451038B (zh) | 硬件事件采集方法、处理器和计算系统 | |
US11210236B2 (en) | Managing global counters using local delta counters | |
Zhang | Characterizing the scalability of erlang vm on many-core processors | |
CN111343404B (zh) | 成像数据处理方法及装置 | |
CN114741218A (zh) | 操作系统的异常指标提取方法、装置、设备、系统及介质 | |
Orozco et al. | High throughput queue algorithms | |
Nemitz et al. | Light reading: Optimizing reader/writer locking for read-dominant real-time workloads | |
Orosa et al. | Flexsig: Implementing flexible hardware signatures |
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 |