CN108632166A - 一种基于dpdk的收包二级缓存方法及系统 - Google Patents
一种基于dpdk的收包二级缓存方法及系统 Download PDFInfo
- Publication number
- CN108632166A CN108632166A CN201810378716.3A CN201810378716A CN108632166A CN 108632166 A CN108632166 A CN 108632166A CN 201810378716 A CN201810378716 A CN 201810378716A CN 108632166 A CN108632166 A CN 108632166A
- Authority
- CN
- China
- Prior art keywords
- mbulk
- packet receiving
- queue
- mbuf
- pointers
- 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.)
- Granted
Links
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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于DPDK的收包二级缓存方法,包括以下步骤:自定义mbulk结构以及二级缓存结构,mbulk存储mbuf指针且大小相同,收包一级队列的队列存储mbuf指针,收包二级队列存储mbulk指针;(2)初始化DPDK;收包缓存收包处理线程1用于缓存portmbuf指针至收包一级队列中;(3‑2)收包处理线程2用于从mbulk_pool内存池取出mbulk,并从对应的收包一级队列取出mbuf指针并放入mbulk,任意mbulk放满后,收包处理线程2将mbulk指针放入收包二级队列,接着从mbulk_pool取出下一个mbulk,进行下一次操作;公共工作者线程从收包二级队列取出mbulk指针并处理。该方法通过为后端提供一个稳定的、数据量适中出队操作,使得后端处理更为稳定,以实现实时稳定收包和处理,降低丢包概率。
Description
技术领域
本发明涉及大数据采集技术领域,具体是一种基于DPDK的收包缓存方法,此方法通过新增二级流水线的方式使得数据处理更加稳定,减少丢包率。
背景技术
在PET等大数据应用中,需要对多个网络出口的流量数据包进行采集分析,随着应用所需要的精度越来越高,对应的数据流量也会越来越大,一般应用的速率都会达到10Gbps,如何实时稳定收包和处理,降低丢包概率,这对数据包的采集来说是个挑战。
目前基于Linux的数据的采集,如果使用传统的Socket抓包,程序需要在用户态和内核态频繁的切换,导致性能削弱,无法满足大数据的要求。另外一种方案是使用DPDK(Data Plane Development Kit)。DPDK是Intel公司开发的基于数据面的数据包处理框架,它的抓包驱动工作在用户态,为用户态应用程序提供快速收发包接口,可以实现数据包的快速抓取。
传统的DPDK应用都是直接获取自身缓存的数据包(mbuf)并进行处理,但是当需要处理持续大流量(如>10Gbps)的数据时,采用该方法进行数据缓存,dpdk自带api接口中ring队列的出队操作(rte_ring_mc_dequeue_bulk),每次出队个数大小不一,如果每次出队少量数据的话,效率不高,而且频繁小数据量的出队操作也是耗时的,这样会导致后续数据处理出现波动或者严重丢包,比如最简单的速率显示就会出现跳变等不稳定的现象。
申请号201510801278.3公开了一种基于DPDK的抓包及镜像流量转发方法,其使用DPDK的收发包接口从入口网卡端口收到数据包后,将DPDK数据包mbuf拷贝到自定义格式的packets buffer中,然后归还mbuf给DPDK;当packets buffer即将超过其内存空间大小时,将该packets buffer放入一个buffer队列中,此时完成一个packets buffer的提交;用户从buffer队列中取出packets buffer,每个buffer队列的packets buffer由一个用户线程去读取,用户线程读取到一个packets buffer对象后,对数据包进行分析处理,处理完之后,将packets buffer归还。使得数据包在系统中存留很长时间也不会因为mbuf缓存不足而导致丢包影响性能的问题。但是当需要处理持续大流量(如>10Gbps)的数据时,采用该方法进行数据缓存,由于数据量过大,仍然存在导致丢包的问题。
发明内容
本发明公开了一种基于DPDK的收包二级缓存方法,在PET等大数据(如持续大流量(>10Gbps))应用时,通过为后端提供一个稳定的、数据量适中出队操作,使得后端处理更为稳定,以实现实时稳定收包和处理,降低丢包概率。
为达到上述目的,本发明的解决方案是:
其中一实施例中,本发明公开了一种基于DPDK的收包二级缓存方法,包括以下步骤:
(1)自定义mbulk结构以及二级缓存结构,同时自定义mbulk_pool变量:
所述mbulk用于存储mbuf指针,每个所述mbulk大小相同,存储相同数量的mbuf指针;所述mbulk_pool为自定义DPDK内存池,存储元素为mbulk;
所述二级缓存结构包括自定义的DPDK收包一级队列以及收包二级队列,所述收包一级队列的队列存储元素为mbuf指针,包括至少一组收包一级队列;所述收包二级队列为公共队列,其队列存储元素为mbulk指针;
(2)初始化DPDK环境、创建内存、分配CPU给DPDK收包处理线程、初始化网卡配置并配置好mbulk、收包一级队列、mbulk_pool以及收包二级队列;
(3)收包缓存,DPDK的每个port分别对应两个收包处理线程:
(3-1)收包处理线程1用于缓存port对应的原始mbuf指针至收包一级队列中;
(3-2)收包处理线程2用于从mbulk_pool内存池取出一个mbulk,然后从对应的收包一级队列取出mbuf指针并放入mbulk,任意所述mbulk放满后,收包处理线程2将所述mbulk指针放入收包二级队列,接着从mbulk_pool取出下一个mbulk,进行下一次操作;
(4)公共工作者线程缓存处理:所述公共工作者线程用于从收包二级队列取出mbulk指针,然后对每个所述mbulk所存储的相同数量的mbuf地址指针进行处理,每处理完一个mbuf后归还mbuf到mbuf_pool,处理完整个mbulk后归还mbulk到mbulk_pool。
优选的,每个port对应一个收包一级队列,多个port共用一个收包二级队列。
优选的,所述mbulk内部采用ring结构进行mbulk的组织与管理。
优选的,所述收包一级队列与所述收包二级队列均为ring结构。
优选的,所述步骤(2),创建的内存为大页内存池,所述内存mbulk从大页内存池中申内存,mbulk的内存引用的是大页内存池的内存buffer。
其中一实施例中,本发明还公开一种基于DPDK的收包二级缓存系统,包括
初始化模块,用于DPDK运行环境初始化;
二级缓存模块,所述二级缓存模块包括收包一级队列、收包二级队列,用于port与收包一级队列之间数据缓存的收包处理线程1,以及用于收包一级队列与收包二级队列之间数据缓存的收包处理线程2;每个port对应一个收包一级队列,多个port共用一个收包二级队列;
所述收包一级队列的队列存储元素为mbuf指针,每个收包一级队列与相应的port之间经由收包处理线程1将原始mbuf指针从port缓存至收包一级队列中;所述收包二级队列为公共队列,其队列存储元素为mbulk指针,所述mbulk用于存储mbuf指针,每个所述mbulk大小相同,各收包一级队列中缓存的mbuf指针经由收包处理线程2缓存至mbulk后,在经由所述收包线程2将装满的mbulk指针缓存至所述收包二级队列中;
公共工作者线程处理模块,所述公共工作者线程模块用于从收包二级队列取出mbulk指针并处理。
优选的,所述收包处理线程2用于从mbulk_pool内存池取出一个mbulk,然后从对应的收包一级队列取出mbuf指针并放入mbulk,任意所述mbulk放满后,收包处理线程2将所述mbulk指针放入收包二级队列,接着从mbulk_pool取出下一个mbulk,进行下一次操作。
优选的,所述公共工作者线程模块对每个所述mbulk所存储的相同数量的mbuf地址指针进行处理,每处理完一个mbuf后归还mbuf到mbuf_pool,处理完整个mbulk后归还mbulk到mbulk_pool。
其中一实施例中,本发明还公开一种基于DPDK的收包二级缓存设备,其中存储有多条指令,其特征在于:所述指令适于由处理器加载并执行如权利要求1-5任一项所述方法。
其中一实施例中,本发明还公开一种基于DPDK的收包二级缓存的装置,包括
处理器,适于实现各指令;以及
存储器,用于存储多条指令,所述指令适于由处理器加载并执行如权利要求1-5任一项所述方法。
本发明所达到的有益效果:
本发明提出的基于DPDK的收包二级缓存方法及系统,进行高速数据的收包处理时,通过自定义的二级缓存结构与mbulk结构设计的配合,提供稳定的、数据量适中出队操作,虽然收包一级队列每次取mbuf时,其个数不确定导致出队速率不稳定,通过将固定数量mbuf指针存储至mbulk中,在将装满mbulk缓存至收包二级队列的操作,公共线程最终直接处理的对象为同等数量的mbuf,且出队速率稳定适中,使得后续处理流程更加稳定,对于大数据量的输入,后台处理效率的提升使得数据包在系统的停留时间短,相应的丢包也会减少。同时在缓存的全过程中,只涉及数据包指针的传递,无数据拷贝,占用内存小,避免直接拷贝内存对系统内存过高的要的问题求,从而不会因为mbuf缓存不足而导致丢包影响性能的问题。
此外,mbulk、收包一级队列、收包二级队列均采用无锁的数据结构设计,在进行高速数据收包处理时,可非常高效的实现固定数量的mbuf组织和管理,需要能满足多个生产者和消费者同时访问且能满足数据一致性要求。
附图说明
图1为本发明一实施例中一种基于DPDK的收包二级缓存方法的工作流程图;
图2为图1所示实施例中收包二级缓存方法的提交流程图;
图3本发明一实施例中一种基于DPDK的收包二级缓存系统的结构示意图。
具体实施方式
下面结合说明书附图,详细说明本发明的具体实施方式。
如图1所示,第一实施例中,本发明公开了一种基于DPDK的收包二级缓存方法,其具体包括
(1)结构体定义,自定义mbulk结构以及二级缓存结构,同时自定义mbulk_pool内存池变量。其中,mbulk用于存储mbuf指针,mbuf指针指向指原始mbuf数据包在mbulf-pool中的地址,即mbulk只存储mbuf指针,不拷贝mbuf中的数据;每个所述mbulk大小相同,即每个mbulk存储相同数量的mbuf指针。
mbulk_pool为自定义DPDK内存池,存储元素为mbulk;
二级缓存结构包括自定义的收包一级队列以及收包二级队列,所述收包一级队列的队列存储元素为mbuf指针,包括至少一组收包一级队列;所述收包二级队列为公共队列,其队列存储元素为mbulk指针,其中mbulk指针指向指mbulk在mbulk-pool中的地址。
(2)初始化DPDK环境、创建内存、分配CPU给DPDK收包处理线程、初始化网卡配置并配置好mbulk、收包一级队列、mbulk_pool以及收包二级队列;
init_pools();//内存池初始化
init_rings();//一级二级队列初始化
init_ports();//网卡配置初始化
其中大页内存池使用1G hugepages大页(1G大页的数目在系统内核启动参数中配置),使用DPDK的rte_mempool_create函数来创建,内存池的mbulk数目,及内存池的mbulk大小,通过初始化函数参数传入。
CPU核心及DPDK收包处理线程数目通过启动参数配置(比如-ccoremask--nb-cores=X),每个线程绑定到独立的CPU core上运行。由于网卡端口有多队列读取功能,每个线程负责收取不同端口的数据包。
初始化网卡配置过程中,为每个被DPDK驱动接管的网卡端口配置号收发队列数(通过DPDK的rte_eth_dev_configure函数),并安装好每个收发队列(通过DPDK的rte_eth_rx_queue_setup函数)。
每个网口通过rte_ring_create创建一个收包一级队列,然后创建一个公共的二级队列ring_rx_bulk。图1所示实施例中收包一级队列列数与网口数量相同,收包二级队列ring_rx_bulk设置一列,具体实现代码如下:
(3)收包缓存,DPDK的每个port分别对应两个收包处理线程:
(3-1)收包处理线程1用于缓存各port对应的原始mbuf指针至收包一级队列中;
(3-2)收包处理线程2用于从mbulk_pool内存池取出一个mbulk,然后从对应的收包一级队列取出mbuf指针并放入mbulk,所述mbulk放满后,收包处理线程2将所述mbulk指针放入收包二级队列,接着从mbulk_pool取出下一个mbulk,进行下一次操作;
mbuf首先存储于mbuf内存池中,每个port分别对应两个收包处理线程,收包处理线程1用于缓存各port对应的原始mbuf指针至收包一级队列中,收包处理线程2用于收包一级队列与收包二级队列之间数据缓存,具体而言,使用DPDK的收发包接口rte_eth_rx_burst()从入口网卡端口(图1portX)获取到mbuf内存池数据包mbuf后,收包处理线程1将DPDK数据包mbuf指针不停的缓存至收包一级队列中,同时收包处理线程2从mbulk_pool内存池取出一个mbulk,然后将缓存在收包一级队列中的mbuf指针取出并放入至mbulk中,当该mbulk装满后,收包处理线程2将所述mbulk指针放入收包二级队列,同时从mbulk_pool内存池取出下一个mbulk,继续mbuf指针的缓存。
(4)公共工作者线程缓存处理:所述公共工作者线程用于从收包二级队列取出mbulk指针,然后对每个所述mbulk所存储的相同数量的mbuf指针进行处理,每处理完一个mbuf后归还mbuf到mbuf_pool,处理完整个mbulk后归还mbulk到mbulk_pool。
本发明提出的基于DPDK的收包二级缓存方法,进行高速数据的收包处理时,通过自定义的二级缓存结构与mbulk结构设计的配合,提供稳定的、数据量适中出队操作,虽然收包一级队列每次取mbuf时,其个数不确定导致出队速率不稳定,通过将固定数量mbuf指针存储至mbulk中,在将装满mbulk缓存至收包二级队列的操作,公共线程最终直接处理的对象为同等数量的mbuf,且出队速率稳定适中,使得后续处理流程更加稳定,对于大数据量的输入,后台处理效率的提升使得数据包在系统的停留时间短,相应的丢包也会减少。同时在缓存的全过程中,只涉及数据包指针的传递,无数据拷贝,占用内存小,避免直接拷贝内存对系统内存过高的要的问题求,从而不会因为mbuf缓存不足而导致丢包影响性能的问题。
由于原始mbuf数据量大,为更好的实现各级缓存的管理,mbulk采用无锁结构设计,即ring结构,通过CAS(CompareAndSwap)原子操作,实现多生产者和多消费者并发访问。即mbuf指针至mbulk、mbulk指针至收包二级队列以及mbulk指针至公共工作者线程时,均由存储元素直接出入队形式进入至下一处理流程中,从而需要能满足多个生产者和消费者同时访问且能满足数据一致性要求。在dpdk中,ring通常位于mbuf模块内部,用于mbuf的高效组织和管理,极少单独使用。Mbulk本质上也是一个环形FIFO,用于临时缓存收到的数据报文,只是管理的元数据是固定数量的mbuf。由于数据流量(>10Gbps)很大,要求对mbulk的组织和管理非常高效,需要能满足多个生产者和消费者同时访问且能满足数据一致性要求(多消费/生产者同时出入队),因此在mbulk模块内也采用了ring来组织和管理。此外,收包一级队列、收包二级队列采用无锁结构设计,上述收包一级队列、收包二级队列也可选择队列、管道、信号量+数据内容等方式进行数据的出入处理。
同时,整个二级缓存结构中,每个port对应一个收包一级队列,多port共用一个收包二级队列,这样设置可以根据端口数量灵活扩展,若需要增加待处理的端口时,只需另外增设一个收包一级队列以及对应的收包处理线程,无需对整体架构进行变动。同时由于mbulk模块采用了ring技术,对于多个端口的入包缓存操作具有很高的实时性,提高了缓存管理效率,公共工作者线程(即后端)只需与收包二级队列进行对接,简化报文收取完成之后的后处理流程。
以下结合图2对本发明所示的基于DPDK的收包二级缓存方法做进一步说明
首先解释几个术语:
port0/1:网口,支持多个,0/1指网口编号
mbuf:DPDK存储的数据包对象,一个mbuf代表一个数据包
mbulk:自定义数据类型,1个mbulk=128个mbuf,只存储指针,不拷贝数据
自定义结构的mbulk定义如下:
struct mbuf_bulk{
struct rte_mbuf*mbufs[128];
};
mbulk_pool:自定义DPDK内存池,存储元素为mbulk
RING-RX0/1:自定义DPDK收包一级队列,队列存储元素为mbuf指针,每个port对应一个
RING-CACHE:自定义DPDK收包二级队列,队列存储元素为mbulk指针,多port共用一个。
RING-RX0/1与RING-CACHE采用无锁结构设计。同时,所述mbulk内部采用ring结构进行mbulk的组织与管理。
其中每个port对应两个收包处理线程:收包处理线程1用于缓存该port对应的原始mbuf指针包到RING-RX队列;收包处理线程2首先从mbulk_pool内存池取出一个mbulk,然后从对应的RING-RX队列取出mbuf指针并放入mbulk,当mbulk被放满后在将mbulk指针放入RING-CACHE公共队列,接着从mbulk_pool内存池取出下一个mbulk,进行下一次操作。还有一个公共的工作者线程,该线程从RING-CACHE队列取出mbulk指针,然后对其中128个mbuf进行处理,每处理完一个mbuf后归还mbuf到DPDK,处理完整个mbulk后归还mbulk到mbulk_pool内存池。
mbulk大小相同设置,故每次收包数量一致,可减少缓存的操作次数,从而避免会出现由于每次取出的数据包个数不一致,导致会跟着当前缓存队列上的包个数进行波动现象的发生。解决了原生api接口rte_ring_mc_dequeue_bulk中每次获取的mbuf个数不一致,导致在数据处理流程中的耗时长短不一的问题,并与二级缓存结构配合,提供稳定的、数据量适中出队。
第二实施例中,如图2和图3所示本发明公开本发明还公开了一种基于DPDK的收包二级缓存系统,其包括:
初始化模块,用于DPDK运行环境初始化,包括,初始化DPDK环境、创建内存、分配CPU给DPDK收包处理线程、初始化网卡配置并配置好mbulk、收包一级队列、mbulk_pool以及收包二级队列;
二级缓存模块,二级缓存模块包括收包一级队列、收包二级队列,用于port与收包一级队列之间数据缓存的收包处理线程1,以及用于收包一级队列与收包二级队列之间数据缓存的收包处理线程2;每个port对应一个收包一级队列,多个port共用一个收包二级队列;
收包一级队列的队列存储元素为mbuf指针,每个收包一级队列与相应的port之间经由收包处理线程1将原始mbuf指针从port缓存至收包一级队列中;收包二级队列为公共队列,其队列存储元素为mbulk指针,mbulk用于存储mbuf指针,每个mbulk大小相同,各收包一级队列中缓存的mbuf指针经由收包处理线程2缓存至mbulk后,在经由收包线程2将装满的mbulk指针缓存至收包二级队列中。
mbuf首先存储于mbuf内存池中,每个port分别对应两个收包处理线程,使用DPDK的收发包接口rte_eth_rx_burst()从入口网卡端口(图1portX)获取到mbuf内存池数据包mbuf后,收包处理线程1将DPDK数据包mbuf指针不停的缓存至收包一级队列中,同时收包处理线程2从mbulk_pool内存池取出一个mbulk,然后将缓存在收包一级队列中的mbuf指针取出并放入至mbulk中,当该mbulk装满后,收包处理线程2将所述mbulk指针放入收包二级队列,同时从mbulk_pool内存池取出下一个mbulk,继续mbuf指针的缓存。
收包处理线程2用于从mbulk_pool内存池取出一个mbulk,然后从对应的收包一级队列取出mbuf指针并放入mbulk,任意mbulk放满后,收包处理线程2将mbulk指针放入收包二级队列,接着从mbulk_pool取出下一个mbulk,进行下一次操作。
公共工作者线程处理模块,公共工作者线程模块用于从收包二级队列取出mbulk指针并处理。作为一优选方案,公共工作者线程模块对每个mbulk所存储的相同数量的mbuf地址指针进行处理,每处理完一个mbuf后归还mbuf到mbuf_pool,处理完整个mbulk后归还mbulk到mbulk_pool。
本发明提出的基于DPDK的收包二级缓存系统,进行高速数据的收包处理时,通过自定义的二级缓存模块,实现提供稳定的、数据量适中出队操作,虽然收包一级队列每次取mbuf时,其个数不确定导致出队速率不稳定,通过将固定数量mbuf指针存储至mbulk中,在将装满mbulk缓存至收包二级队列的操作,公共线程最终直接处理的对象为同等数量的mbuf,且出队速率稳定适中,使得后续处理流程更加稳定,对于大数据量的输入,后台处理效率的提升使得数据包在系统的停留时间短,相应的丢包也会减少。同时在缓存的全过程中,只涉及数据包指针的传递,无数据拷贝,占用内存小,避免直接拷贝内存对系统内存过高的要的问题求,从而不会因为mbuf缓存不足而导致丢包影响性能的问题。
第三实施例中,本发明公开一种基于DPDK的收包二级缓存设备,其中存储有多条指令,所述指令适于由处理器加载并执行:
(1)自定义mbulk结构以及二级缓存结构,同时自定义mbulk_pool变量:
所述mbulk用于存储mbuf指针,每个所述mbulk大小相同,存储相同数量的mbuf指针;所述mbulk_pool为自定义DPDK内存池,存储元素为mbulk;
所述二级缓存结构包括自定义的DPDK收包一级队列以及收包二级队列,所述收包一级队列的队列存储元素为mbuf指针,包括至少一组收包一级队列;所述收包二级队列为公共队列,其队列存储元素为mbulk指针;
(2)初始化DPDK环境、创建内存、分配CPU给DPDK收包处理线程、初始化网卡配置并配置好mbulk、收包一级队列、mbulk_pool以及收包二级队列;
(3)收包缓存,DPDK的每个port分别对应两个收包处理线程:
(3-1)收包处理线程1用于缓存port对应的原始mbuf指针至收包一级队列中;
(3-2)收包处理线程2用于从mbulk_pool内存池取出一个mbulk,然后从对应的收包一级队列取出mbuf指针并放入mbulk,任意所述mbulk放满后,收包处理线程2将所述mbulk指针放入收包二级队列,接着从mbulk_pool取出下一个mbulk,进行下一次操作;
(4)公共工作者线程缓存处理:所述公共工作者线程用于从收包二级队列取出mbulk指针,然后对每个所述mbulk所存储的相同数量的mbuf地址指针进行处理,每处理完一个mbuf后归还mbuf到mbuf_pool,处理完整个mbulk后归还mbulk到mbulk_pool。
上述设备中,作为一优选方案,每个port对应一个收包一级队列,多个port共用一个收包二级队列。
作为一优选方案,所述mbulk内部采用ring结构进行mbulk的组织与管理。
作为一优选方案,所述收包一级队列与所述收包二级队列均为ring结构。
作为一优选方案,所述步骤(2),创建的内存为大页内存池,所述内存mbulk从大页内存池中申内存,mbulk的内存引用的是大页内存池的内存buffer。
上述一种基于DPDK的收包二级缓存设备的具体工作原理及效果详见实施例一中的描述,此处不在赘述。
第四实施例中,本发明还公开了一种基于DPDK的收包二级缓存装置,包括处理器,适于实现各指令;以及存储器,用于存储多条指令,所述指令适于由处理器加载并执行,
(1)自定义mbulk结构以及二级缓存结构,同时自定义mbulk_pool变量:
所述mbulk用于存储mbuf指针,每个所述mbulk大小相同,存储相同数量的mbuf指针;所述mbulk_pool为自定义DPDK内存池,存储元素为mbulk;
所述二级缓存结构包括自定义的DPDK收包一级队列以及收包二级队列,所述收包一级队列的队列存储元素为mbuf指针,包括至少一组收包一级队列;所述收包二级队列为公共队列,其队列存储元素为mbulk指针;
(2)初始化DPDK环境、创建内存、分配CPU给DPDK收包处理线程、初始化网卡配置并配置好mbulk、收包一级队列、mbulk_pool以及收包二级队列;
(3)收包缓存,DPDK的每个port分别对应两个收包处理线程:
(3-1)收包处理线程1用于缓存port对应的原始mbuf指针至收包一级队列中;
(3-2)收包处理线程2用于从mbulk_pool内存池取出一个mbulk,然后从对应的收包一级队列取出mbuf指针并放入mbulk,任意所述mbulk放满后,收包处理线程2将所述mbulk指针放入收包二级队列,接着从mbulk_pool取出下一个mbulk,进行下一次操作;
(4)公共工作者线程缓存处理:所述公共工作者线程用于从收包二级队列取出mbulk指针,然后对每个所述mbulk所存储的相同数量的mbuf地址指针进行处理,每处理完一个mbuf后归还mbuf到mbuf_pool,处理完整个mbulk后归还mbulk到mbulk_pool。
上述装置中,作为一优选方案,每个port对应一个收包一级队列,多个port共用一个收包二级队列。
作为一优选方案,所述mbulk内部采用ring结构进行mbulk的组织与管理。
作为一优选方案,所述收包一级队列与所述收包二级队列均为ring结构。
作为一优选方案,所述步骤(2),创建的内存为大页内存池,所述内存mbulk从大页内存池中申内存,mbulk的内存引用的是大页内存池的内存buffer。
上述一种基于DPDK的收包二级缓存装置的具体工作原理及效果详见实施例一中的描述,此处不在赘述。
上述的对实施例的描述是为便于该技术领域的普通技术人员能理解和使用本发明。熟悉本领域技术的人员显然可以容易地对这些实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,不脱离本发明范畴所做出的改进和修改都应该在本发明的保护范围之内。
Claims (10)
1.一种基于DPDK的收包二级缓存方法,其特征在于:包括以下步骤:
(1)自定义mbulk结构以及二级缓存结构,同时自定义mbulk_pool变量:
所述mbulk用于存储mbuf指针,每个所述mbulk大小相同,存储相同数量的mbuf指针;所述mbulk_pool为自定义DPDK内存池,存储元素为mbulk;
所述二级缓存结构包括自定义的DPDK收包一级队列以及收包二级队列,所述收包一级队列的队列存储元素为mbuf指针,包括至少一组收包一级队列;所述收包二级队列为公共队列,其队列存储元素为mbulk指针;
(2)初始化DPDK环境、创建内存、分配CPU给DPDK收包处理线程、初始化网卡配置并配置好mbulk、收包一级队列、mbulk_pool以及收包二级队列;
(3)收包缓存,DPDK的每个port分别对应两个收包处理线程:
(3-1)收包处理线程1用于缓存port对应的原始mbuf指针至收包一级队列中;
(3-2)收包处理线程2用于从mbulk_pool内存池取出一个mbulk,然后从对应的收包一级队列取出mbuf指针并放入mbulk,任意所述mbulk放满后,收包处理线程2将所述mbulk指针放入收包二级队列,接着从mbulk_pool取出下一个mbulk,进行下一次操作;
(4)公共工作者线程缓存处理:所述公共工作者线程用于从收包二级队列取出mbulk指针,然后对每个所述mbulk所存储的相同数量的mbuf地址指针进行处理,每处理完一个mbuf后归还mbuf到mbuf_pool,处理完整个mbulk后归还mbulk到mbulk_pool。
2.根据权利要求1所述的基于DPDK的收包二级缓存方法,其特征在于:每个port对应一个收包一级队列,多个port共用一个收包二级队列。
3.根据权利要求1所述的基于DPDK的收包二级缓存方法,其特征在于:所述mbulk内部采用ring结构进行mbulk的组织与管理。
4.根据权利要求1或3所述的基于DPDK的收包二级缓存方法,其特征在于:所述收包一级队列与所述收包二级队列均为ring结构。
5.根据权利要求1所述的基于DPDK的抓包及镜像流量转发方法,其特征在于:所述步骤(2),创建的内存为大页内存池,所述内存mbulk从大页内存池中申内存,mbulk的内存引用的是大页内存池的内存buffer。
6.一种基于DPDK的收包二级缓存系统,其特征在于:包括
初始化模块,用于DPDK运行环境初始化;
二级缓存模块,所述二级缓存模块包括收包一级队列、收包二级队列,用于port与收包一级队列之间数据缓存的收包处理线程1,以及用于收包一级队列与收包二级队列之间数据缓存的收包处理线程2;每个port对应一个收包一级队列,多个port共用一个收包二级队列;
所述收包一级队列的队列存储元素为mbuf指针,每个收包一级队列与相应的port之间经由收包处理线程1将原始mbuf指针从port缓存至收包一级队列中;所述收包二级队列为公共队列,其队列存储元素为mbulk指针,所述mbulk用于存储mbuf指针,每个所述mbulk大小相同,各收包一级队列中缓存的mbuf指针经由收包处理线程2缓存至mbulk后,在经由所述收包线程2将装满的mbulk指针缓存至所述收包二级队列中;
公共工作者线程处理模块,所述公共工作者线程模块用于从收包二级队列取出mbulk指针并处理。
7.根据权利要求6所述的基于DPDK的收包二级缓存系统,其特征在于:所述收包处理线程2用于从mbulk_pool内存池取出一个mbulk,然后从对应的收包一级队列取出mbuf指针并放入mbulk,任意所述mbulk放满后,收包处理线程2将所述mbulk指针放入收包二级队列,接着从mbulk_pool取出下一个mbulk,进行下一次操作。
8.根据权利要求6所述的基于DPDK的收包二级缓存系统,其特征在于:所述公共工作者线程模块对每个所述mbulk所存储的相同数量的mbuf地址指针进行处理,每处理完一个mbuf后归还mbuf到mbuf_pool,处理完整个mbulk后归还mbulk到mbulk_pool。
9.一种基于DPDK的收包二级缓存设备,其中存储有多条指令,其特征在于:所述指令适于由处理器加载并执行如权利要求1-5任一项所述方法。
10.一种基于DPDK的收包二级缓存的装置,其特征在于:包括
处理器,适于实现各指令;以及
存储器,用于存储多条指令,所述指令适于由处理器加载并执行如权利要求1-5任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810378716.3A CN108632166B (zh) | 2018-04-25 | 2018-04-25 | 一种基于dpdk的收包二级缓存方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810378716.3A CN108632166B (zh) | 2018-04-25 | 2018-04-25 | 一种基于dpdk的收包二级缓存方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108632166A true CN108632166A (zh) | 2018-10-09 |
CN108632166B CN108632166B (zh) | 2021-11-09 |
Family
ID=63694376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810378716.3A Active CN108632166B (zh) | 2018-04-25 | 2018-04-25 | 一种基于dpdk的收包二级缓存方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108632166B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110719234A (zh) * | 2019-10-17 | 2020-01-21 | 南京中孚信息技术有限公司 | 一种基于dpdk的数据包处理方法及装置 |
CN113765785A (zh) * | 2021-08-19 | 2021-12-07 | 东北大学 | 基于dpdk的新型多路径传输方案 |
CN115412502A (zh) * | 2022-11-02 | 2022-11-29 | 之江实验室 | 一种网络端口扩展和报文快速均衡处理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105357151A (zh) * | 2015-11-19 | 2016-02-24 | 成都科来软件有限公司 | 一种基于dpdk的抓包及镜像流量转发方法 |
CN107623632A (zh) * | 2017-08-10 | 2018-01-23 | 赛尔网络有限公司 | 基于dpdk的网络协议的连接方法及系统 |
-
2018
- 2018-04-25 CN CN201810378716.3A patent/CN108632166B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105357151A (zh) * | 2015-11-19 | 2016-02-24 | 成都科来软件有限公司 | 一种基于dpdk的抓包及镜像流量转发方法 |
CN107623632A (zh) * | 2017-08-10 | 2018-01-23 | 赛尔网络有限公司 | 基于dpdk的网络协议的连接方法及系统 |
Non-Patent Citations (1)
Title |
---|
令瑞林 等: "基于多核平台的高速网络流量实时捕获方法", 《计算机研究与发展》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110719234A (zh) * | 2019-10-17 | 2020-01-21 | 南京中孚信息技术有限公司 | 一种基于dpdk的数据包处理方法及装置 |
CN113765785A (zh) * | 2021-08-19 | 2021-12-07 | 东北大学 | 基于dpdk的新型多路径传输方案 |
CN113765785B (zh) * | 2021-08-19 | 2022-07-05 | 东北大学 | 基于dpdk的多路径传输方法 |
CN115412502A (zh) * | 2022-11-02 | 2022-11-29 | 之江实验室 | 一种网络端口扩展和报文快速均衡处理方法 |
CN115412502B (zh) * | 2022-11-02 | 2023-03-24 | 之江实验室 | 一种网络端口扩展和报文快速均衡处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108632166B (zh) | 2021-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109102065B (zh) | 一种基于PSoC的卷积神经网络加速器 | |
CN100557594C (zh) | 数据处理器的状态引擎 | |
CN105843775B (zh) | 片上数据划分读写方法、系统及其装置 | |
US20120066692A1 (en) | Iteratively processing segments by concurrently transmitting to, processing by, and receiving from partnered process | |
CN108632166A (zh) | 一种基于dpdk的收包二级缓存方法及系统 | |
KR102594657B1 (ko) | 비순차적 리소스 할당을 구현하는 방법 및 장치 | |
CN110737536B (zh) | 一种基于共享内存的消息存储方法和消息读取方法 | |
CN106454402B (zh) | 转码任务调度方法和装置 | |
US10133549B1 (en) | Systems and methods for implementing a synchronous FIFO with registered outputs | |
US11385900B2 (en) | Accessing queue data | |
CN104394096A (zh) | 一种基于多核处理器的报文处理方法及多核处理器 | |
CN106095604A (zh) | 一种多核处理器的核间通信方法及装置 | |
CN114257559B (zh) | 一种数据报文的转发方法及装置 | |
CN102882960B (zh) | 一种资源文件的发送方法及装置 | |
CN112181657A (zh) | 视频处理方法、装置、电子设备及存储介质 | |
TW202207031A (zh) | 用於記憶體通道控制器之負載平衡 | |
CN111078516A (zh) | 分布式性能测试方法、装置、电子设备 | |
CN115860080A (zh) | 计算核、加速器、计算方法、装置、设备、介质及系统 | |
CN101341471B (zh) | 动态高速缓存管理的设备和方法 | |
DE112017003018T5 (de) | Technologien zum koordinieren des zugriffs auf datenpakete in einem speicher | |
CN109729110B (zh) | 管理专用处理资源的方法、设备以及计算机可读介质 | |
CN116400982B (zh) | 配置中继寄存器模块的方法和装置、计算设备和可读介质 | |
CN104392408B (zh) | 一种展现图像的系统及方法 | |
CN115378937B (zh) | 任务的分布式并发方法、装置、设备和可读存储介质 | |
CN112596881B (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 |