无需拷贝报文缓存的NFV协议报文收发方法技术

技术编号:16474073 阅读:47 留言:0更新日期:2017-10-29 01:40
本发明专利技术涉及一种无需拷贝报文缓存的NFV协议报文收发方法,包括:(1)协议栈从内存空间中申请mbuf,并进行初始化;(2)将所述的报文存放在rte_mbuf中;(3)将mbuf中的数据指针指向rte_mbuf中的数据起始地址并赋值;(4)对报文头数据进行处理,并调整当前数据指针的地址偏移;(5)当mbuf被释放时,换算出rte_mbuf的首地址;(6)调用网卡驱动提供的库函数把该缓存释放还给内存池,在调用协议栈提供的库函数释放所述的mbuf。采用该方法,实现了二种不兼容数据缓存块之间在交互过程中的零拷贝传递;报文在模块间传递的过程中,无需额外申请空间或改变数据缓存结构来保存原始缓存地址;避免计算原始缓存到数据起始地址的偏移来正确释放该报文缓存,具有广泛的应用范围。

NFV protocol message sending and receiving method without copy message cache

The invention relates to a no copy message cache NFV protocol message receiving method, including: (1) for the MBUF protocol stack from the memory space, and initialization; (2) the message will be stored in the rte_mbuf; (3) to MBUF data to rte_mbuf data pointer to the starting address and the assignment; (4) to process the packet header data, and adjust the address offset current data pointer; (5) when MBUF was released, converted from the first address of the rte_mbuf; (6) call the library function provided by the network card driver to release the cache memory pool, MBUF Library in the call stack the release of the. Using this method, two kinds of incompatible data between the cache block in the interactive process of zero copy transfer; transfer message in the inter module, no additional application space or change the data structure to save the original address cache; cache to avoid computing the original offset data to correct the release of the initial address message cache that has a wide range of applications.

【技术实现步骤摘要】
无需拷贝报文缓存的NFV协议报文收发方法
本专利技术涉及通信
,尤其涉及报文转发
,具体是指一种无需拷贝报文缓存的NFV协议报文收发方法。
技术介绍
随着信息技术的日益发展,对协议栈处理报文的吞吐性能的要求也日益提高。在数据报文的收发及数据处理过程中,必不可少的要利用缓存即内存块来存储和传递数据。在传统的报文处理过程中,报文放置在缓存中间或外部单独分配一块大内存块。现有技术中报文在网卡驱动中存储方式如图1所示;现有技术中报文在协议栈中存储方式如图2所示。在不同模块间传递数据时要通过数据拷贝实现报文数据的交互,具体的,在网卡驱动收到报文后,其数据通过指针m->pkt.data来存储,需要拷贝到协议栈中分配的2048字节的缓存中,该缓存地址由m_ext.ext_buf保存。现有技术在跨模块的报文传输中,网卡驱动的缓存结构跟用户态协议栈的缓存结构不匹配时,需要申请新缓存、将数据从老缓存中搬到新缓存中、之后在释放老缓存,这一连串的操作造成性能上的瓶颈问题。
技术实现思路
本专利技术的目的是克服了上述现有技术的缺点,提供了一种能够无需拷贝报文缓存实现NFV协议报文收发的方法。为了实现上述目的,本专利技术具有如下构成:该无需拷贝报文缓存的NFV协议报文接收方法,包括以下步骤:(1)协议栈从内存空间中申请mbuf,并对其进行初始化;(2)当网卡驱动接收到报文时,将所述的报文存放在rte_mbuf中;(3)通过内存映射的方法将所述的mbuf中的数据指针指向所述的rte_mbuf中的数据起始地址,并对数据参数进行赋值;(4)根据报文在协议栈的处理过程对报文头数据进行处理,在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;(5)当所述的mbuf被释放时,通过所述的mbuf中数据指针所保存的地址和rte_mbuf中数据存储地址的偏移量换算出所述的rte_mbuf的首地址;(6)调用网卡驱动提供的库函数把该缓存释放还给内存池,在调用协议栈提供的库函数释放所述的mbuf。较佳地,所述的步骤(1)具体包括以下步骤:(1-1)判断所述的网卡驱动的报文是否被分片,如果是,则继续步骤(1-2),否则。继续步骤(1-3);(1-2)协议栈根据rte_mbuf的个数,从内存空间中申请相同个数的mbuf,继续步骤(1-4);(1-3)从内存空间中申请一个rte_mbuf,继续步骤(1-4);(1-4)对所述的rte_mbuf进行初始化。较佳地,所述的步骤(3)与所述的步骤(4)之间还包括以下步骤:(3-1)将所述的rte_mbuf的首地址通过强制类型转换存放在2048字节簇的首地址处。更佳地,所述的步骤(5)具体包括以下步骤:(5-1)找到所述的mbuf中m_ext.ext_buf所指向的字节簇缓存;(5-2)取出所述的的首地址。还包括一种无需拷贝报文缓存的NFV协议报文发送方法,包括以下步骤:(a)在报文走完协议栈的流程后,网卡驱动从内存池中申请rte_mbuf,并对其初始化;(b)根据内存映射的方法将rte_mbuf中的数据指针指向mbuf中的2048字节簇的起始地址,并对数据参数进行拷贝;(c)在数据从网卡驱动中发送之后,分别释放所述的rte_mbuf和所述的mbuf。较佳地,所述的步骤(a)具体包括以下步骤:(a-1)判断所述的报文是否被分片,如果是,则继续步骤(a-2),否则。继续步骤(a-3)(a-2)协议栈根据rte_mbuf的个数,从内存空间中申请相同个数的mbuf,继续步骤(a-4);(a-3)从内存空间中申请一个rte_mbuf,继续步骤(a-4)(a-4)对所述的rte_mbuf进行初始化。较佳地,所述的步骤(b)与所述的步骤(c)之间还包括以下步骤:(b-1)将所述的2048字节簇缓存块的引用计数加一。更佳地,所述的步骤(c)具体包括以下步骤:(c-1)将所述的字节簇缓存块的引用计数减一;(c-2)调用网卡驱动提供的函数释放所述的rte_mbuf;(c-3)释放所述的mbuf;(c-4)判断所述的引用计数是否为1,如果是,则将所述的字节簇缓存释放还给内存空间,否则,将所述的引用计数减一。采用了该专利技术中的无需拷贝报文缓存的NFV协议报文收发方法,通过内存地址映射,可以实现二种不兼容数据缓存块之间在交互过程中的零拷贝传递,使得包处理性能与报文长度无关成为可能;报文在模块间传递的过程中,无需额外申请空间或改变数据缓存结构来保存原始缓存地址;利用闲置数据缓存空间来保存原始缓存地址,可以避免计算原始缓存到数据起始地址的偏移来正确释放该报文缓存,极大的方便编程人员的使用,具有广泛的应用范围。附图说明图1为现有技术的报文在网卡驱动中存储方式的示意图。图2为现有技术中报文在协议栈中存储方式的示意图。图3为本专利技术的无需拷贝报文缓存的NFV协议报文收发方法的映射数据地址的示意图。图4为本专利技术的无需拷贝报文缓存的NFV协议报文收发方法的报文从网卡驱动到协议栈的流程图。图5为本专利技术的无需拷贝报文缓存的NFV协议报文发送方法的映射首地址的示意图。具体实施方式为了能够更清楚地描述本专利技术的
技术实现思路
,下面结合具体实施例来进行进一步的描述。该无需拷贝报文缓存的NFV协议报文接收方法,包括以下步骤:(1)协议栈从内存空间中申请mbuf,并对其进行初始化;(2)当网卡驱动接收到报文时,将所述的报文存放在rte_mbuf中;(3)通过内存映射的方法将所述的mbuf中的数据指针指向所述的rte_mbuf中的数据起始地址,并对数据参数进行赋值;(4)根据报文在协议栈的处理过程对报文头数据进行处理,在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;(5)当所述的mbuf被释放时,通过所述的mbuf中数据指针所保存的地址和rte_mbuf中数据存储地址的偏移量换算出所述的rte_mbuf的首地址;(6)调用网卡驱动提供的库函数把该缓存释放还给内存池,在调用协议栈提供的库函数释放所述的mbuf。在一种较佳的实施方式中,所述的步骤(1)具体包括以下步骤:(1-1)判断所述的网卡驱动的报文是否被分片,如果是,则继续步骤(1-2),否则。继续步骤(1-3);(1-2)协议栈根据rte_mbuf的个数,从内存空间中申请相同个数的mbuf,继续步骤(1-4);(1-3)从内存空间中申请一个rte_mbuf,继续步骤(1-4);(1-4)对所述的rte_mbuf进行初始化。在一种较佳的实施方式中,所述的步骤(3)与所述的步骤(4)之间还包括以下步骤:(3-1)将所述的rte_mbuf的首地址通过强制类型转换存放在2048字节簇的首地址处。在一种更佳的实施方式中,所述的步骤(5)具体包括以下步骤:(5-1)找到所述的mbuf中m_ext.ext_buf所指向的字节簇缓存;(5-2)取出所述的的首地址。还包括一种无需拷贝报文缓存的NFV协议报文发送方法,包括以下步骤:(a)在报文走完协议栈的流程后,网卡驱动从内存池中申请rte_mbuf,并对其初始化;(b)根据内存映射的方法将rte_mbuf中的数据指针指向mbuf中的2048字节簇的起始地址,并对数据参数进行拷贝;(c)在数据从网卡驱动中发送之后,分别释放所述的rte_mbuf和所述的mbuf本文档来自技高网
...
无需拷贝报文缓存的NFV协议报文收发方法

【技术保护点】
一种无需拷贝报文缓存的NFV协议报文接收方法,其特征在于,所述的方法包括以下步骤:(1)协议栈从内存空间中申请mbuf,并对其进行初始化;(2)当网卡驱动接收到报文时,将所述的报文存放在rte_mbuf中;(3)通过内存映射的方法将所述的mbuf中的数据指针指向所述的rte_mbuf中的数据起始地址,并对数据参数进行赋值;(4)根据报文在协议栈的处理过程对报文头数据进行处理,在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;(5)当所述的mbuf被释放时,通过所述的mbuf中数据指针所保存的地址和rte_mbuf中数据存储地址的偏移量换算出所述的rte_mbuf的首地址;(6)调用网卡驱动提供的库函数把该缓存释放还给内存池,在调用协议栈提供的库函数释放所述的mbuf。

【技术特征摘要】
1.一种无需拷贝报文缓存的NFV协议报文接收方法,其特征在于,所述的方法包括以下步骤:(1)协议栈从内存空间中申请mbuf,并对其进行初始化;(2)当网卡驱动接收到报文时,将所述的报文存放在rte_mbuf中;(3)通过内存映射的方法将所述的mbuf中的数据指针指向所述的rte_mbuf中的数据起始地址,并对数据参数进行赋值;(4)根据报文在协议栈的处理过程对报文头数据进行处理,在报文首部或当前的可用头区空间内调整当前数据指针的地址偏移;(5)当所述的mbuf被释放时,通过所述的mbuf中数据指针所保存的地址和rte_mbuf中数据存储地址的偏移量换算出所述的rte_mbuf的首地址;(6)调用网卡驱动提供的库函数把该缓存释放还给内存池,在调用协议栈提供的库函数释放所述的mbuf。2.根据权利要求1所述的无需拷贝报文缓存的NFV协议报文接收方法,其特征在于,所述的步骤(1)具体包括以下步骤:(1-1)判断所述的网卡驱动的报文是否被分片,如果是,则继续步骤(1-2),否则。继续步骤(1-3);(1-2)协议栈根据rte_mbuf的个数,从内存空间中申请相同个数的mbuf,继续步骤(1-4);(1-3)从内存空间中申请一个rte_mbuf,继续步骤(1-4);(1-4)对所述的rte_mbuf进行初始化。3.根据权利要求1所述的无需拷贝报文缓存的NFV协议报文接收方法,其特征在于,所述的步骤(3)与所述的步骤(4)之间还包括以下步骤:(3-1)将所述的rte_mbuf的首地址通过强制类型转换存放在2048字节簇的首地址处。4.根据权利要求3所述的无需拷贝报文缓存的NFV协议报文接收方法,其特征在于,所述的步骤(5)具体包括以...

【专利技术属性】
技术研发人员:潘家伟陈永昌杨志逯利军钱培专
申请(专利权)人:北京赛特斯信息科技股份有限公司
类型:发明
国别省市:北京,11

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

1