CN109120665B - 高速数据包采集方法及装置 - Google Patents
高速数据包采集方法及装置 Download PDFInfo
- Publication number
- CN109120665B CN109120665B CN201810635267.6A CN201810635267A CN109120665B CN 109120665 B CN109120665 B CN 109120665B CN 201810635267 A CN201810635267 A CN 201810635267A CN 109120665 B CN109120665 B CN 109120665B
- Authority
- CN
- China
- Prior art keywords
- data packet
- candidate
- annular
- cache region
- ring
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例提供一种高速数据包采集方法及装置,其中,该方法包括:根据多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区;将网卡缓存区的数据包传送至所述目标环形缓存区。本发明实施例提供的方法,通过设置多个环形缓存区中每个环形缓存区对应的优先值确定目标环形缓存区,来实现目标环形缓存区的优化选择,降低数据包丢包率。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种高速数据包采集方法及装置。
背景技术
随着互联网的快速发展,网络空间已经渗透到政治、经济、文化、生活等领域,在给人们生活带来便利的同时,网络的开放性、隐蔽性、跨地域性等特性也给人们带来了很多安全问题,如何提高网络的安全性是人们十分关注的问题。网络流量分析监测可以为网络安全运行提供主要保障,也是提高网络安全性的主要手段。
网络流量分析监测系统一般由三部分组成:网络流量采集、网络流量存储和网络流量分析。网络流量采集是网络研究的重要部分,也是网络流量分析监测等上层应用的基础和前提。其中,数据包捕获是网络流量采集的核心工作。近几年网络链路速率增长迅速,主干链路已经从Mbps进入Gbps,千兆网卡和千兆交换机已经成为家庭消费的主流。在千兆网络环境下时,采用通用硬件平台设计的数据包捕获方法,会出现大量丢包现象,从而影响网络流量分析监测效果和准确性。因此,数据包捕获已经成为提高网络流量分析监测效果的瓶颈。
数据包一般采取被动捕获的方式。被动捕获数据包分为软件实现和硬件实现两种。软件捕获数据包的方法虽然在性能上不如硬件捕获数据包,但是软件抓包对硬件依赖少、成本低,而且易于修改和拓展,因此得到了广泛的认可。
现有技术中通常采用数据包捕获工具Libpcap来采集数据包,Libpcap使用固定大小的存储缓冲器和固定大小的保持缓冲器来完成数据包从内核到用户层的传递,Libpcap对数据包进行采集时,当网卡接收到一个数据包之后,网卡驱动程序通过DMA方式调用系统函数将数据包从网卡拷贝到核心态内存。若应用程序需要访问位于核心态内存的数据,则将数据包从核心态内存中拷贝到用户态内存中。若网卡接收到了大量数据包,则存在频繁的系统调用、数据拷贝以及上下文切换开销,从而会占用很多系统资源,进而降低数据包捕获的性能以及对数据包的处理能力,导致数据包容易丢失。
发明内容
针对现有技术存在的问题,本发明提供一种高速数据包采集方法及装置。
第一方面,本发明提供一种高速数据包采集方法,包括:
根据多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区;
将网卡缓存区的数据包传送至所述目标环形缓存区。
第二方面,本发明提供一种高速数据包采集装置,包括:
计算模块,用于根据多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区;
处理模块,用于将网卡缓存区的数据包传送至所述目标环形缓存区。
第三方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现高速数据包采集方法的步骤。
第四方面,本发明提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现高速数据包采集方法的步骤。
本发明实施例提供的方法,通过设置多个环形缓存区中每个环形缓存区对应的优先值确定目标环形缓存区,来实现目标环形缓存区的优化选择,降低数据包丢包率。
附图说明
图1为本发明实施例提供的高速数据包采集方法的示意图;
图2为本发明实施例提供的高速数据包采集装置的示意图;
图3为本发明实施例提供的一种电子设备的实体结构的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
目前在网络流量分析监测时,通常采用数据包捕获工具Libpcap来采集数据包。Libpcap-mmap是libpcap的一个改进版本,Libpcap-mmap与libpcap之间不同的地方主要有以下两个方面:一方面,Libpcap使用固定大小的存储缓冲器和固定大小的保持缓冲器来完成数据包从核心态内存到用户态内存的传递,而Libpcap-mmap设计了一个大小可以配置的循环缓冲器,允许用户程序和核心态程序同时对该循环缓冲器的不同数据区域进行直接的读取;另一方面,在Libpcap中,当网卡接收到一个数据包之后,网卡驱动程序通过DMA方式调用系统函数将数据包从网卡拷贝到核心态内存,应用程序访问位于核心态内存的数据时就必须将数据包从核心态内存中拷贝到用户态内存中,这样就占用了很多系统资源,降低数据包捕获的性能以及对数据包的处理能力。而Libpcap-mmap采用MMAP技术,建立核心态内存和用户态内存的映射,将系统分配给网卡设备文件的核心态内存映射到一块用户态内存,这样应用程序可以通过调用系统函数把数据包从网卡上直接传送到用户态内存中,减少了一次数据拷贝,降低了系统资源的消耗,提高了数据包捕获效率。
零拷贝思想是指捕获数据包时不会出现任何内存间的拷贝,例如接收数据包时,网络接口直接将它送入应用程序的用户缓存区,通过减少路径和系统调用,可以提高捕获数据包的速率。通过减少路径和系统调用,零拷贝技术极大提高了捕获数据包的速率,然而,因为需要对网卡驱动进行修改,所以移植性和通用性较低。
另一种基于零拷贝思想的数据包采集机制,通过绕过传统的网络协议结构,尽量减少数据包的拷贝次数,从而降低丢包率。PF_RING在内核队列层注册Hook来获取数据包,在内核创建一个环形队列用于存储数据,并使用MMAP技术映射到用户空间,来避免用户态的系统调用,提高性能。
针对上述情形,本发明实施例提供了一种高速数据包采集方法。该方法可以用于数据包采集的场景,也可以用于其他场景,本发明实施例对此不作具体限定。该方法可以由不同的设备执行,本发明实施例对此也不作具体限定,图1为本发明实施例提供的高速数据包采集方法的示意图,如图1所示,该方法包括:
101、根据多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区;
在执行101之前,可在Linux内核态内存下设计多个环形缓存区,多个环形缓存区作为网卡缓存区与磁盘的中间临时存储区域,并用于存储网卡缓存区传送的数据包。
网卡缓存区在传送新的数据包至环形缓存区时,若网卡接收到的数据包数量较多,且目标环形缓存区的空间大小无法存放新的数据包,则新的数据包将被丢弃。针对该情形,在101中,可根据多个环形缓存区中每个环形缓存区对应的优先值,从多个环形缓存区中确定目标环形缓存区。其中,多个环形缓存区中每个环形缓存区的优先值可基于环形缓存区的存储状态以及存储设计所确定。在上述过程中,可以通过将多个环形缓存区中每个环形缓存区对应的优先值按照从大到小的顺序排序,确定最大优先值,并将最大优先值对应的环形缓存区作为目标环形缓存区。
需要说明的是,上述根据多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区的动作可以由高速数据包采集装置执行,也可以由除高速数据包采集装置以外的其他数据包采集设备执行,本发明实施例对此不作具体限定。
102、将网卡缓存区的数据包传送至所述目标环形缓存区。
在上述102中,当网卡接收到一个数据包后,网卡驱动程序通过DMA方式调用系统函数将数据包从网卡缓存区传送到所述目标环形缓存区。
本发明实施例提供的方法,通过多个环形缓存区中每个环形缓存区对应的优先值确定目标环形缓存区,来实现目标环形缓存区的优化选择,降低数据包丢包率。
由上述实施例的内容可知,优先值可基于环形缓存区的存储状态以及存储设计所确定。基于上述实施例的内容,作为一种可选实施例,本发明实施例不对根据多个环形缓存区中每个环形缓存区对应的优先值的方式作具体限定,包括但不限于:根据多个环形缓存区中每个环形缓存区的剩余空间大小,确定多个环形缓存区中每个环形缓存区对应的优先值。
在根据多个环形缓存区中每个环形缓存区的剩余空间大小,确定多个环形缓存区中每个环形缓存区对应的优先值时,环形缓存区的剩余空间越大,则环形缓存区的优先值也越大,也即环形缓存区的剩余空间大小与优先值存在正相关关系。可以通过将多个环形缓存区中每个环形缓存区对应的剩余空间大小按照从大到小的顺序排序,将剩余空间最大的环形缓存区对应的优先值设置为最大,将最大优先值对应的环形缓存区作为存储数据包的目标环形缓存区。
在上述过程中,多个环形缓存区中每个环形缓存区对应的剩余空间不同,在环形缓存区的单元格的长度相同的情况下,若环形缓存区剩余空间较大,说明环形缓存区中可容纳数据包的单元格数量较多,也说明已经存储在环形缓存中的数据包数量较少,数量较少的数据包消耗的CPU资源较少,相应的,该剩余空间较大的环形缓存区CPU资源较多。为了提高数据包存储至环形缓存区的效率,在数据包存储过程中,优先选择CPU资源丰富的环形缓存区,将之确定为存储数据包的目标环形缓存区,在确定目标环形缓存区时,通过根据剩余空间大小确定环形缓存区的优先值,将剩余空间最大的环形缓存区确定为最大优先值对应的目标环形缓存区,将数据包存储至目标环形缓存区之中。
本发明实施例提供的方法,通过根据多个环形缓存区中每个环形缓存区的剩余空间大小,确定多个环形缓存区中每个环形缓存区对应的优先值,有利于确定目标环形缓存区。环形缓存区的剩余空间越大,可以存放数据包的数量越多,就可以提高数据包存储的成功率。此外,由于剩余空间越大的环形缓存区的CPU资源越丰富,将数据包存储至剩余空间越大的环形缓存区,可以避免因为环形缓存区的CPU资源不足导致数据包传送至环形缓存区时,存储数据较慢的问题,从而提高数据包存储效率。
考虑到上述实施例是基于最大优先值选取目标环形缓存区的,而在剩余空间大小相同的环形缓存区数量有多个时,则可能会出现多个相同大小的最大优先值,进而无法根据最大优先值选取唯一的目标环形缓存区。基于上述实施例的内容,作为一种可选实施例,本发明实施例不对根据多个环形缓存区中每个环形缓存区的剩余空间大小,确定多个环形缓存区中每个环形缓存区对应的优先值的方式作具体限定,包括但不限于:对于多个候选环形缓存区,根据多个候选环形缓存区中每一候选环形缓存区的权重,确定多个候选环形缓存区中每一候选环形缓存区对应的优先值;其中,多个候选环形缓存区为多个环形缓存区中剩余空间大小相同的环形缓存区。
在上述过程中,每一候选环形缓存区的权重可以通过人为预先设置,也可根据每一候选环形缓存区的存储状态及存储设计进行设置,本发明实施例对此不作具体限定。每一候选环形缓存区的权重可以用于表示多个环形缓存区中每一候选缓存区在存储数据包时的优先程度,也可以用于表示多个环形缓存区中每一候选缓存区在存储数据包时空间利用率的高低。其中,在根据多个候选环形缓存区中每一候选环形缓存区的权重,确定多个候选环形缓存区中每一候选环形缓存区对应的优先值时,可以直接将权重作为优先值,也可以对权重作进一步计算以得到优先值,本发明实施例对此不作具体限定。
在根据多个候选环形缓存区中每个候选环形缓存区的权重,确定多个候选环形缓存区中每个候选环形缓存区对应的优先值时,候选环形缓存区的权重越大,则候选环形缓存区的优先值也越大,也即候选环形缓存区的权重与优先值存在正相关关系。
以多个环形缓存区中剩余空间大小相同的候选环形缓存区数量有2个为例,且该两个候选环形缓存区分别为第一候选环形缓存区和第二候选环形缓存区。若第一候选环形缓存区的权重较大,则第一候选环形缓存区对应的优先值较大,而权重较小的第二候选环形缓存区对应的优先值较小。最终根据最大优先值确定第一候选环形缓存区作为目标环形缓存区,将数据包存储至最大优先值对应的目标环形缓存区。
本发明实施例提供的方法,在剩余空间大小相同的环形缓存区数量有多个,且多个环形缓存区中每个环形缓存区的优先值相同且最大时,可以通过权重进一步从多个环形缓存区中选取唯一的目标环形缓存区。通过将优先值最大且相同的多个环形缓存区对应的权重进行比较,将其中权重最大的环形缓存区确定为唯一的目标环形缓存区。基于权重,可以在优先值相同且最大的环形缓存区有多个时,进一步更准确的确定唯一的目标环形缓存区。
在上述实施例中,多个环形缓存区中每个环形缓存区中每个单元格的长度是相同的。考虑到实际实施过程中,若多个环形缓存区中不同个体的环形缓存区之间单元格的长度也相同,则对于任意包长的数据包,该数据包无论存储在哪个环形缓存区的单元格中,最终都会占用一个完整的单元格,从而导致该数据包无论存储在哪个环形缓存区,对于多个环形缓存区中的每个环形缓存区而言,其空间利用率都是相同的。而当数据包的包长远小于单元格的长度大小时,该数据包无论存储在哪个环形缓存区,其对应的空间利用率都是较低的,从而在实际应用场景下多个环形缓存区在存储数据包时整体空间利用率较低。例如,即使包长为64字节的数据包也会占据单元格为1514字节的空间,空间利用率只有4.2%。在上述实施例的基础上,作为一种可选实施例,多个环形缓存区中存在环形缓存区对应的单元格的长度不同。
由于数据包存储在目标环形缓存区的单元格中,一个数据包占据一个单元格,当目标环形缓存区中所有的单元格均存满了数据包时,若网卡缓存区传送新的数据包至目标环形缓存区,由于此时目标环形缓存区中所有的单元格均存满了数据包,则新的数据包由于没有空间存储将被丢弃,即使目标环形缓存区的空间利用率低。考虑到环形缓存区中的单元格数量对于数据包采集有影响,本发明实施例提供的方法,对于相同空间大小的环形缓存区,通过调整每个环形缓存区的单元格的长度,从而调整每个环形缓存区中的单元格数量,进而调整可以存放的数据包的数量,最终降低丢包率。
例如,以多个环形缓存区为二个环形缓存区为例,设置二个环形缓存区的单元格的长度不相同,将二个环形缓存区中其中一个环形缓存区对应的单元格的长度设置为800字节,将二个环形缓存区中另一个环形缓存区对应的单元格的长度设置为1514字节。需要说明的是,在设置单元格的长度和环形缓存区的数量时,单元格的长度和环形缓存区的数量可以任意选取,本发明实施例对此不作具体限定。
考虑到单元格的空间利用率,本发明实施例选用数据包包长中位数的近似值800字节作为单元格的长度,将单元格的长度为800字节的单元格优先作为包长较小的数据包的主要缓存区,提高空间利用率。也可以选用数据包包长最大值的近似值1514字节作为单元格的长度,将单元格的长度为1514字节的单元格优先作为包长较大的数据包的主要缓存区,从而提高空间利用率。
以设置环形缓存区的单元格的长度为800字节,且数据包大小为1000字节为例,此时,由于环形缓存区的单元格的长度小于数据包包长,从而导致数据包无法完全存储到单元格之中。针对该情形,可将数据包拆分为两个数据包,依次写入连续的两个单元格中。
本发明实施例提供的方法,通过在多个环形缓存区中设置单元格长度不同的环形缓存区,从而对于任意包长的数据包,多个环形缓存区中的每一环形缓存区在存储该数据包的空间利用率是不同的,且有高有低,进而实际实施过程中可从多个环形缓存区中选取空间利用率最高的环形缓存区以存储该数据包。因此,可提高数据包存储时的灵活性,并可提高多个环形缓存区的整体空间利用率。
另外,还需要说明的是,由于可提高多个环形缓存区的整体空间利用率,从而使得多个环形缓存区可存储更多的数据包。
在上述实施例的基础上,作为一种可选实施例,本发明不对根据多个候选环形缓存区中每一候选环形缓存区的权重,确定多个候选环形缓存区中每一候选环形缓存区对应的优先值之前的方法作具体限定,包括但不限于:
根据数据包的大小及每一候选环形缓存区中的单元格的长度,确定每一候选环形缓存区的权重。
在上述过程中,根据多个环形缓存区中每个环形缓存区的剩余空间大小,确定多个环形缓存区中每个环形缓存区对应的优先值时,如果存在剩余空间大小相同的候选环形缓存区数量有多个,那么根据多个候选环形缓存区中每一候选环形缓存区的权重,确定多个候选环形缓存区中每一候选环形缓存区对应的优先值。对于权重的确定,可以根据数据包的大小及每一候选环形缓存区中的单元格的长度,确定每一候选环形缓存区的权重。在数据包存储过程中,尽量将数据包放入最小单元格的长度比数据包包长大的环形缓存之中。
以待存储的数据包包长为500字节且多个环形缓存区中存在剩余空间大小相同的候选环形缓存区数量有二个为例,二个候选环形缓存区分别为第一候选环形缓存区和第二候选环形缓存区,其中第一候选环形缓存区的单元格的长度为800字节,第二候选环形缓存区的单元格的长度为1514字节,由于第一候选环形缓存区的单元格的长度和第二候选环形缓存区的单元格的长度均小于待存储的数据包包长,计算得出将数据包存储至第一候选环形缓存区的单元格中的空间利用率为62.5%,将数据包存储至第二候选环形缓存区的单元格中的空间利用率为33%,最终得出将数据包存储至第一候选环形缓存区的单元格中的空间利用率较高,考虑到空间利用率,因此第一候选环形缓存区的权重比第二候选环形缓存区的权重大,相应的,第一候选环形缓存区的优先值比第二候选环形缓存区的优先值大,最终选择优先值较大的第一候选环形缓存区作为存储数据包的目标环形缓存区。
本发明实施例提供的方法,通过数据包的大小及每一候选环形缓存区中单元格的长度确定权重,有利于更准确的确定优先值。
基于上述发明实施例的内容,作为一种可选实施例,根据数据包的大小及每一候选环形缓存区中的单元格的长度,确定每一候选环形缓存区的权重,包括:
对于任一候选环形缓存区中,计算数据包的大小与任一候选环形缓存区中的的单元格的长度之间的比值,将比值作为任一候选环形缓存区的权重。
以待存储的数据包包长为500字节且多个环形缓存区中存在剩余空间大小相同的候选环形缓存区数量有二个为例,两个候选环形缓存区分别为第一候选环形缓存区和第二候选环形缓存区,其中第一候选环形缓存区的单元格的长度为800字节,第二候选环形缓存区的单元格的长度为1514字节,由于第一候选环形缓存区的单元格的长度和第二候选环形缓存区的单元格的长度均小于待存储的数据包包长,计算得出数据包包长与第一候选环形缓存区中的单元格的长度之间比值为62.5%,数据包包长与第二候选环形缓存区中的单元格的长度之间比值为33%,最终得出将数据包包长与第一候选环形缓存区中的单元格的长度之间比值较大,考虑到空间利用率,因此第一候选环形缓存区的权重比第二候选环形缓存区的权重大,相应的,第一候选环形缓存区的优先值比第二候选环形缓存区的优先值大,最终选择优先值较大的第一候选环形缓存区作为存储数据包的目标环形缓存区。
本发明实施例提供的方法,通过将数据包的大小与任一候选环形缓存区中的单元的格长度之间比值作为任一候选环形缓存区的权重,进而确定优先值,同时提高了环形缓存区的空间利用率。
基于上述发明实施例的内容,作为一种可选实施例,本发明实施例提供的高速数据包采集方法还包括:
若信号量大于预设阈值,则将每个环形缓存区中未被写入的多个数据包写入至磁盘,直至信号量小于预设阈值;
若信号量小于预设阈值,则将每个环形缓存区中未被写入的数据包逐一写入至磁盘,直至信号量大于预设阈值;
其中,信号量为每个环形缓存区中未被写入所述磁盘的数据包的数量。
在上述过程中,基于信号量来控制内核态内存中的数据包写入磁盘的速度。信号量用于表示内核态内存中未被写入磁盘的数据包数量,未被写入磁盘的数据包数量增大时,相应地,信号量会增大,未被写入磁盘的数据包数量减小时,相应地,信号量会减小,基于信号量判断写入磁盘的数据包数量,可以调整数据包写入磁盘的速度。
当信号量大于预设阈值时,也即当内核态内存中未被写入的数据包数量多于预设阈值时,通过写入线程将内核态内存中未被写入的多个数据包一次性写入至磁盘,通过一次性写入多个数据包,直至获知信号量小于预设阈值,也即直至内核态内存中未被写入的数据包数量小于预设阈值。其中,在一次性写入多个数据包时,多个数据包的具体数量可任意设置,本发明实施例对此不做具体限定。另外,通过一次性写入多个数据包,可以提高数据包写入磁盘的速度。
当信号量小于预设阈值,即获知内核态内存中未被写入的数据包数量小于预设阈值时,通过写入线程将内核态内存中未被写入的数据包逐一写入至磁盘,相比于一次性写入多个数据包,本发明实施例减慢了数据包写入磁盘的速度,避免出现信号量为零时,由于未被写入的数据包的数量为零,从而导致等待写线程操作休眠,进而导致后续需要花费较多的时间唤醒等待写线程操作,使得环形缓存区的数据包写入磁盘的速度降低。
以预设阈值为零示例,多个环形缓存区中任一环形缓存区信号量为零时,说明环形缓存区中不存在需要写入磁盘的数据包,此时等待写线程操作休眠,当需要写入数据包增加1个时,环形缓存区信号量加1,也即未被写入的数据包数量为1时,需要唤醒等待写线程操作,而唤醒等待写线程操作花费较多的时间,从而导致环形缓存区写入数据包的速度降低。
以信号量为非零示例,当环形缓存区中存在多个需要写入磁盘的数据包时,为提高数据包写入磁盘的速度,可以一次针对环形缓存区的多个单元格进行操作,即一次将多个数据包的数据顺序写入磁盘。由于核心态内存对文件大小有限制,当一次性写入磁盘的多个数据包大小超过一定的预设数值时,认为一次性写入磁盘的多个数据包中已经写入磁盘的部分形成的文件已经写入磁盘完成,至于一次性写入磁盘的多个数据包中未被写入磁盘的部分需要生成另外的新的文件继续写入磁盘。这里的预设数值大小与Linux系统版本相关,本发明实施例对此不作具体限定。为了后续查找的方便,避免一次性写入磁盘的数据包过大,当一次性写入磁盘的数据包连续写入磁盘的时间超过设置的预设时间时,则停止写入磁盘,认为一次性写入磁盘的多个数据包中已经写入磁盘的部分形成的文件已经写入磁盘完成,至于一次性写入磁盘的多个数据包中未被写入磁盘的部分需要生成另外的新的文件继续写入磁盘,这里的预设时间可以是人为设置的,主要用于指示数据包一次性连续写入磁盘的时间,可以设置为10秒,也可以设置成其他任意的数值,本发明对此不作具体限定。
需要说明的是,在同样的网络流量速率下,数据包包长越短意味着单位时间内数据包的个数越多,即小包长数据包与大包长数据包写入磁盘的区别是单位时间内小包长数据包需要写入磁盘的数量更多,从而导致小包长的数据包的寻道次数相对更多,磁盘写入速度降低。因此,基于信号量,一次性将多个数据包的数据顺序写入磁盘,减少磁盘写入的寻道次数,进而可以大大减少磁盘平均服务时间,更显著的降低小包长数据包的丢包率。本发明实施例提供的方法,通过信号量,可以灵活调整数据包写入磁盘的速度。
本发明实施例提供一种高速数据包采集装置,图2为本发明实施例提供的高速数据包采集装置的示意图,如图2所示,高速数据包采集装置包括计算模块11和处理模块12,计算模块11用于根据多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区;处理模块12,用于将网卡缓存区的数据包传送至所述目标环形缓存区。
网卡缓存区在传送新的数据包至环形缓存区时,若网卡接收到的数据包数量较多,且目标环形缓存区的空间大小无法存放新的数据包,则新的数据包将被丢弃。针对该情形,计算模块11可根据多个环形缓存区中每个环形缓存区对应的优先值,从多个环形缓存区中确定目标环形缓存区。其中,多个环形缓存区中每个环形缓存区的优先值可基于环形缓存区的存储状态以及存储设计所确定。在上述过程中,计算模块11可以通过将多个环形缓存区中每个环形缓存区对应的优先值按照从大到小的顺序排序,确定最大优先值,并将最大优先值对应的环形缓存区作为目标环形缓存区。处理模块12将网卡缓存区的数据包传送至目标环形缓存区中。
本发明实施例提供的装置,通过多个环形缓存区中每个环形缓存区对应的优先值,从而确定目标环形缓存区,降低数据包丢包率。
为了测试高速数据包采集装置是否可以正常完成数据包的采集,并验证高速数据包采集装置确实在以本地存储为目的的数据包采集中具有优势,下面对高速数据包采集装置性能测试。
首先对高速数据包采集装置的功能进行测试。此外,在相同的实验条件下,对高速数据包采集装置、基于Libpcap-mmap的采集器以及基于PF_RING的采集器分别进行性能测试,以后两种采集器作为对比实验。
在性能测试之前,首先对测试机进行简单介绍。此次测试主要涉及到两种机器:OptiPlex 7020台式机和Lenovo ThinkServer TS430台式机,所有的OptiPlex 7020台式机都具有相同的配置,Lenovo ThinkServer TS430台式机具有相同的配置,具体的配置如表1所示。此外测试环境中的路由器是华为公司的千兆路由器,型号为S5720-52P-LI-AC。
表1
Libpcap-mmap是Libpcap的改进版本,采用MMAP技术,使应用程序可以通过调用系统函数直接将数据包从网卡传送到用户态内存中,减少了拷贝次数和系统资源消耗,提高了数据包捕获效率。PF_RING是常用的千兆速率环境下的采集器,在此次测试中,使用的是PF_RING4.7.0版本,对网卡驱动进行修改,并让PF_RING以“transparent_mode=1”的模式工作。
测试机主要包括两台:一台是OptiPlex 7020台式机,它作为发包机负责产生并发送数据包;另一台是Lenovo ThinkServer TS430台式机,它作为采集机负责采集数据包,两台机器之间使用6类千兆网线直连。
测试发包工具为pktgen,pktgen是一个高性能网络测试工具,研发人员使用多CPU在不同的PCI总线上用千兆以太网卡做过测试,实验结果证明它的发送速率甚至可以大于10GBit/s,可以满足本文的采集测试需求。
测试方法为:在不同数据包包长(1024字节、512字节、256字节、128字节、64字节)的条件下,使用pktgen按约1Gbps速率产生大约1min的流量数据,测试采集器的采集状况。在测试实验中,记录发包机发送的数据包数量和采集器接收并存储到本地磁盘的数据包数量,最终根据收包数和时间确定采集器的收包速率,根据收包数与发包数的比例来确定采集器的采集率。此外,为了减少系统误差,每次在同一条件下进行5次实验,取5次实验的平均数作为该条件下的实验结果。
在上述环境和测试设计下,对高速数据包采集装置、基于Libpcap-mmap的采集器和基于PF_RING的采集器分别进行了实验,测试结果分别如表2、表3和表4所示。
表2
表3
表4
三种采集器在不同包长的数据包测试环境下,结合表2、表3和表4可以看到,在包长为64字节、128字节、256字节的条件下,高速数据包采集装置的收包速率要高于基于Libpcap-mmap的采集器和基于PF_RING的采集器。尤其在64字节的包长条件下,高速数据包采集装置收包性能优势十分明显,每秒比基于Libpcap-mmap的采集器多采集50多万,比基于PF_RING的采集器多采集70多万;在包长为512字节、1024字节的条件下,基于PF_RING的每秒收包数明显低于高速数据包采集装置,基于Libpcap-mmap的采集器与高速数据包采集装置的每秒收包数相差不多。结合表2、表3可知,基于Libpcap-mmap的采集器每秒收包数低于高速数据包采集装置,对于512字节而言,约每秒少采集4000多个数据包,在1024字节环境下,约少2000多个数据包。
结合表2、表3和表4可以看到,对于测试的任意一种包长,高速数据包采集装置的采集率均不低于98%,基本可以符合需求。与另外两种采集器进行对比可以看到,在64字节的包长条件下,高速数据包采集装置的采集率优势很明显,与基于Libpcap-mmap的采集器相比,采集率高出28.67%,比基于PF_RING的采集器高26.36%;在包长为512字节、1024字节的条件下,基于Libpcap-mmap的采集器采集率分别可以达到97.97%或98.82%,基于PF_RING的采集器只能达到67.76%和64.68%,而高速数据包采集装置采集率均已达到100%,基本可实现不丢包。
结合对三种采集器的收包速率和采集率的对比分析,可以知道高速数据包采集装置的采集性能优于基于Libpcap-mmap的采集器和基于PF_RING的采集器,尤其在小数据包的采集方面,高速数据包采集装置将采集性能提高了20%多,基本解决了小数据包采集丢包严重的问题。此外,高速数据包采集装置表现较为稳定,无论是在包长为512字节、1024字节的条件下,还是64字节、128字节、256字节的条件下,均能达到98%以上的采集率,丢包率均低于2%。
图3为本发明实施例提供的一种电子设备的实体结构的示意图,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现高速数据包采集方法的步骤。
具体地,如图3所示,该电子设备可以包括:处理器310、通信接口320、存储器330和总线340,其中,处理器310,通信接口320,存储器330通过总线340完成相互间的通信。通信接口340可以用于高速数据包采集系统之间的信息传输。处理器310可以调用存储器330中的逻辑指令,以执行如下方法:
将网卡缓存区的数据包传送至内核态内存;
其中,所述内核态内存包括多个环形缓存区,所述数据包是由网卡接收到的并由网卡传送至所述网卡缓存区,所述将网卡缓存区的数据包传送至内核态内存,包括:
根据所述多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区,并将所述数据包传送至所述目标环形缓存区。
此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现用高速数据包采集方法的步骤。例如包括:
将网卡缓存区的数据包传送至内核态内存;
其中,所述内核态内存包括多个环形缓存区,所述数据包是由网卡接收到的并由网卡传送至所述网卡缓存区,所述将网卡缓存区的数据包传送至内核态内存,包括:
根据所述多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区,并将所述数据包传送至所述目标环形缓存区。
本发明电子设备实施例和非暂态计算机可读存储介质实施例是用于执行高速数据包采集方法实施例的,具体的流程和详细的内容,请参照上述高速数据包采集方法实施例,此处不再赘述。
另外,本领域内的技术人员应当理解的是,在本发明的申请文件中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明的说明书中,说明了大量具体细节。然而应当理解的是,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本发明公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。
然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (7)
1.一种高速数据包采集方法,其特征在于,包括:
根据多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区;将网卡缓存区的数据包传送至所述目标环形缓存区;
其中,所述多个环形缓存区中存在环形缓存区对应的单元格的长度不同;
所述根据所述多个候选环形缓存区中每一候选环形缓存区的权重,确定所述多个候选环形缓存区中每一候选环形缓存区对应的优先值之前,还包括:根据所述数据包的大小及每一候选环形缓存区中单元格的长度,确定每一候选环形缓存区的权重;
其中,所述根据所述数据包的大小及每一候选环形缓存区中单元格的长度,确定每一候选环形缓存区的权重,包括:对于任一候选环形缓存区中,计算所述数据包的大小与所述任一候选环形缓存区中的单元格的长度之间的比值,将所述比值作为任一候选环形缓存区的权重。
2.根据权利要求1中所述的方法,其特征在于,所述根据所述多个环形缓存区中每个环形缓存区对应的优先值,包括:
根据所述多个环形缓存区中每个环形缓存区的剩余空间大小,确定所述多个环形缓存区中每个环形缓存区对应的优先值。
3.根据权利要求2所述的方法,其特征在于,所述根据所述多个环形缓存区中每个环形缓存区的剩余空间大小,确定所述多个环形缓存区中每个环形缓存区对应的优先值,包括:
对于多个候选环形缓存区,根据所述多个候选环形缓存区中每一候选环形缓存区的权重,确定所述多个候选环形缓存区中每一候选环形缓存区对应的优先值;其中,所述多个候选环形缓存区为所述多个环形缓存区中剩余空间大小相同的环形缓存区。
4.根据权利要求1所述的方法,其特征在于,所述将网卡缓存区的数据包传送至所述目标环形缓存区之后,还包括:
若信号量大于预设阈值,则将每个环形缓存区中未被写入的多个数据包写入至磁盘,直至所述信号量小于所述预设阈值;
若所述信号量小于预设阈值,则将每个环形缓存区中未被写入的数据包逐一写入至所述磁盘,直至所述信号量大于所述预设阈值;
所述信号量为每个环形缓存区中未被写入所述磁盘的数据包数量。
5.一种高速数据包采集装置,其特征在于,包括:
计算模块,用于根据多个环形缓存区中每个环形缓存区对应的优先值,从所述多个环形缓存区中确定目标环形缓存区;还用于根据所述数据包的大小及每一候选环形缓存区中单元格的长度,确定每一候选环形缓存区的权重;其中,对于任一候选环形缓存区中,计算所述数据包的大小与所述任一候选环形缓存区中的单元格的长度之间的比值,将所述比值作为任一候选环形缓存区的权重;
处理模块,用于将网卡缓存区的数据包传送至所述目标环形缓存区;
其中,所述多个环形缓存区中存在环形缓存区对应的单元格的长度不同。
6.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至4任一项所述高速数据包采集方法的步骤。
7.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至4任一项所述高速数据包采集方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810635267.6A CN109120665B (zh) | 2018-06-20 | 2018-06-20 | 高速数据包采集方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810635267.6A CN109120665B (zh) | 2018-06-20 | 2018-06-20 | 高速数据包采集方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109120665A CN109120665A (zh) | 2019-01-01 |
CN109120665B true CN109120665B (zh) | 2020-05-29 |
Family
ID=64822349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810635267.6A Active CN109120665B (zh) | 2018-06-20 | 2018-06-20 | 高速数据包采集方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109120665B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114625311A (zh) * | 2021-08-05 | 2022-06-14 | 亚信科技(中国)有限公司 | 一种确定缓存组件的方法、装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102262576A (zh) * | 2011-07-29 | 2011-11-30 | 成都易我科技开发有限责任公司 | 使用当前系统操作正在使用的分区的方法 |
CN103391256A (zh) * | 2013-07-25 | 2013-11-13 | 武汉邮电科学研究院 | 一种基于Linux系统的基站用户面数据处理优化方法 |
CN103441941A (zh) * | 2013-08-13 | 2013-12-11 | 广东睿江科技有限公司 | 一种基于Linux的高性能数据报文捕获方法和装置 |
US8719520B1 (en) * | 2010-12-14 | 2014-05-06 | Datadirect Networks, Inc. | System and method for data migration between high-performance computing architectures and data storage devices with increased data reliability and integrity |
CN104346101A (zh) * | 2013-07-29 | 2015-02-11 | 鸿富锦精密工业(深圳)有限公司 | 存储空间动态分配系统及方法 |
CN104503907A (zh) * | 2014-12-15 | 2015-04-08 | 深圳市盛弘电气有限公司 | 一种基于linux系统的应用程序远程调试方法及系统 |
CN104503710A (zh) * | 2015-01-23 | 2015-04-08 | 福州瑞芯微电子有限公司 | 一种提高闪存写入速度的方法和装置 |
CN106656838A (zh) * | 2016-10-19 | 2017-05-10 | 赛尔网络有限公司 | 一种流量分析方法及系统 |
-
2018
- 2018-06-20 CN CN201810635267.6A patent/CN109120665B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8719520B1 (en) * | 2010-12-14 | 2014-05-06 | Datadirect Networks, Inc. | System and method for data migration between high-performance computing architectures and data storage devices with increased data reliability and integrity |
CN102262576A (zh) * | 2011-07-29 | 2011-11-30 | 成都易我科技开发有限责任公司 | 使用当前系统操作正在使用的分区的方法 |
CN103391256A (zh) * | 2013-07-25 | 2013-11-13 | 武汉邮电科学研究院 | 一种基于Linux系统的基站用户面数据处理优化方法 |
CN104346101A (zh) * | 2013-07-29 | 2015-02-11 | 鸿富锦精密工业(深圳)有限公司 | 存储空间动态分配系统及方法 |
CN103441941A (zh) * | 2013-08-13 | 2013-12-11 | 广东睿江科技有限公司 | 一种基于Linux的高性能数据报文捕获方法和装置 |
CN104503907A (zh) * | 2014-12-15 | 2015-04-08 | 深圳市盛弘电气有限公司 | 一种基于linux系统的应用程序远程调试方法及系统 |
CN104503710A (zh) * | 2015-01-23 | 2015-04-08 | 福州瑞芯微电子有限公司 | 一种提高闪存写入速度的方法和装置 |
CN106656838A (zh) * | 2016-10-19 | 2017-05-10 | 赛尔网络有限公司 | 一种流量分析方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109120665A (zh) | 2019-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11121971B2 (en) | Method and apparatus for switching data between virtual machines, and communications system | |
US20200241927A1 (en) | Storage transactions with predictable latency | |
KR102388893B1 (ko) | 브리지 장치를 이용한 스토리지 인접 연산 제공 시스템 및 방법 | |
US9965441B2 (en) | Adaptive coalescing of remote direct memory access acknowledgements based on I/O characteristics | |
US20150127649A1 (en) | Efficient implementations for mapreduce systems | |
US9806904B2 (en) | Ring controller for PCIe message handling | |
CN106293944B (zh) | 虚拟化多核环境下基于非一致性i/o访问系统和优化方法 | |
CN112929299B (zh) | 基于fpga加速卡的sdn云网络实现方法、装置及设备 | |
KR20120087980A (ko) | 다중 인터페이스 솔리드 스테이트 디스크, 및 다중 인터페이스 솔리드 스테이트 디스크의 처리 방법 및 시스템 | |
US8707073B2 (en) | Energy-efficient polling loop | |
CN108090003A (zh) | 一种基于零拷贝的提升web服务器性能的方法、系统 | |
CN102541467B (zh) | 一种对象数据服务器读写请求的调度方法 | |
US9232000B1 (en) | Method and system for balancing load across target endpoints on a server and initiator endpoints accessing the server | |
WO2017218700A1 (en) | Systems and methods for non-uniform memory access aligned i/o for virtual machines | |
US9591099B1 (en) | Server connection establishment over fibre channel using a block device access model | |
CN109120665B (zh) | 高速数据包采集方法及装置 | |
CN103856503A (zh) | Nas集群系统的文件数据的处理方法及nas集群系统 | |
CN112714077B (zh) | 一种报文去重方法、装置、汇聚分流设备及存储介质 | |
CN102902593A (zh) | 基于缓存机制的协议分发处理系统 | |
US9270786B1 (en) | System and method for proxying TCP connections over a SCSI-based transport | |
WO2022110861A1 (zh) | 一种网络训练的数据集缓存方法、装置、设备及存储介质 | |
CN109284257A (zh) | 一种日志写入方法、装置、电子设备及存储介质 | |
WO2018106392A1 (en) | Technologies for multi-core wireless network data transmission | |
CN107615259A (zh) | 一种数据处理方法及系统 | |
CN105721342A (zh) | 多进程设备的网络连接方法和系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |