CN108632166B - 一种基于dpdk的收包二级缓存方法及系统 - Google Patents

一种基于dpdk的收包二级缓存方法及系统 Download PDF

Info

Publication number
CN108632166B
CN108632166B CN201810378716.3A CN201810378716A CN108632166B CN 108632166 B CN108632166 B CN 108632166B CN 201810378716 A CN201810378716 A CN 201810378716A CN 108632166 B CN108632166 B CN 108632166B
Authority
CN
China
Prior art keywords
packet receiving
mbulk
queue
mbuf
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.)
Active
Application number
CN201810378716.3A
Other languages
English (en)
Other versions
CN108632166A (zh
Inventor
陈荣
闫礼飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Raysolution Digital Medical Imaging Co ltd
Original Assignee
Raysolution Digital Medical Imaging Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Raysolution Digital Medical Imaging Co ltd filed Critical Raysolution Digital Medical Imaging Co ltd
Priority to CN201810378716.3A priority Critical patent/CN108632166B/zh
Publication of CN108632166A publication Critical patent/CN108632166A/zh
Application granted granted Critical
Publication of CN108632166B publication Critical patent/CN108632166B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering 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的收包二级缓存方法及系统
技术领域
本发明涉及大数据采集技术领域,具体是一种基于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数据包在mbuf_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设置一列,具体实现代码如下:
for(i=0;i<n_ports;i++)
{
snprintf(name,sizeof(name),"ring_rx%d",i);
rings_rx[i]=rte_ring_create(
name,
PORT_RX_RING_SIZE,
rte_socket_id(),
0);
}
snprintf(name,sizeof(name),"ring_rx_bulk");
rings_rx_bulk=rte_ring_create(
name,
bulk_ring_size,
rte_socket_id(),
0);
(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()从入口网卡端口获取到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个数不一致,导致在数据处理流程中的耗时长短不一的问题,并与二级缓存结构配合,提供稳定的、数据量适中出队。
第二实施例中,如图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()从入口网卡端口获取到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;所述mbuf指针用于指向原始mbuf数据包在mbuf_pool中的地址;
所述二级缓存结构包括自定义的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结构,其中,所述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指针缓存至所述收包二级队列中;其中,所述mbuf指针用于指向原始mbuf数据包在mbuf_pool中的地址;
公共工作者线程处理模块,所述公共工作者线程处理模块用于从收包二级队列取出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任一项所述方法。
CN201810378716.3A 2018-04-25 2018-04-25 一种基于dpdk的收包二级缓存方法及系统 Active CN108632166B (zh)

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 CN108632166A (zh) 2018-10-09
CN108632166B true 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)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110719234A (zh) * 2019-10-17 2020-01-21 南京中孚信息技术有限公司 一种基于dpdk的数据包处理方法及装置
CN113765785B (zh) * 2021-08-19 2022-07-05 东北大学 基于dpdk的多路径传输方法
CN115412502B (zh) * 2022-11-02 2023-03-24 之江实验室 一种网络端口扩展和报文快速均衡处理方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105357151B (zh) * 2015-11-19 2019-03-19 成都科来软件有限公司 一种基于dpdk的抓包及镜像流量转发方法
CN107623632B (zh) * 2017-08-10 2020-08-25 赛尔网络有限公司 基于dpdk的网络协议的连接方法及系统

Also Published As

Publication number Publication date
CN108632166A (zh) 2018-10-09

Similar Documents

Publication Publication Date Title
US11392529B2 (en) Systems and method for mapping FIFOs to processor address space
US10055224B2 (en) Reconfigurable hardware structures for functional pipelining of on-chip special purpose functions
US9465662B2 (en) Processor with efficient work queuing
EP1242883B1 (en) Allocation of data to threads in multi-threaded network processor
US8719456B2 (en) Shared memory message switch and cache
CN108632166B (zh) 一种基于dpdk的收包二级缓存方法及系统
EP2593862B1 (en) Out-of-order command execution in a multimedia processor
CN110741356A (zh) 多处理器系统中的中继一致存储器管理
US20120180072A1 (en) Optimizing Communication of System Call Requests
CN108351783A (zh) 多核数字信号处理系统中处理任务的方法和装置
US8966484B2 (en) Information processing apparatus, information processing method, and storage medium
CN108897630B (zh) 一种基于OpenCL的全局内存缓存方法、系统及装置
CN111400212B (zh) 一种基于远程直接数据存取的传输方法、设备
CN110908716B (zh) 一种向量聚合装载指令的实现方法
CN110737536A (zh) 一种基于共享内存的消息存储方法和消息读取方法
WO2014088726A1 (en) Memory based semaphores
KR20180089273A (ko) 비순차적 리소스 할당을 구현하는 방법 및 장치
US9430281B2 (en) Heterogeneous enqueuing and dequeuing mechanism for task scheduling
CN115129480B (zh) 标量处理单元的访问控制方法及标量处理单元
US8392636B2 (en) Virtual multiple instance extended finite state machines with wait rooms and/or wait queues
JP6176904B2 (ja) プロセッサおよび推測的技術を用いるメッセージベースのネットワークインターフェース
US9288163B2 (en) Low-latency packet receive method for networking devices
US8156265B2 (en) Data processor coupled to a sequencer circuit that provides efficient scalable queuing and method
WO2022140043A1 (en) Condensed command packet for high throughput and low overhead kernel launch
CN105830027B (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