DPDK——Mbuf结构学习MBUF LIBRARY

本文深入探讨了DPDK中的Mbuf结构,它用于高效存储网络帧数据。Mbuf的设计允许减少内存拷贝,通过Mbuf链表处理不同大小的网络帧,并且元数据与帧数据紧密集成,优化了Cache访问。文章介绍了Mbuf的头部设计、API使用,以及在处理巨型帧时的角色。
摘要由CSDN通过智能技术生成

一. 缘由

在安全行业,对数据包的处理是一个必须的过程,好的数据包存储结构可以减少对内存的拷贝,在我们产品开发过程中对数据包结构的存储和处理比较简单,当然效率可能没追求极致。

二. 介绍

对于数据报文的存储(包括协议头),可以考虑如下两种方式:

1. 将网络帧元数据(metadata)和帧本身存放在固定大小的同一段缓存中;

用单独的内存缓存结构哦存储元数据,后面跟着固定大小的内存区域去保存报文数据;

2. 将元数据和网络帧分开存放在两段缓存里;

两种方式的优缺点:

第一种 对缓存的申请及释放均只需一条指令,缺点是因为缓存长度固定而网络帧大小不一,大部分帧只能使用填0(padding)的方式填满整个缓存,较为耗费内存空间。

第二种 帧数据的大小可以任意,同时对元数据和网络帧的缓存可以分开申请及释放;缺点是低效,因为无法保证数据存在一个Cache Line中,可以造成HIT Miss;

三. 深入理解Mbuf

为了高效访问数据,DPDK将内存封装在Mbuf(struct rte_mbuf)结构体内。Mbuf主要用来封装网络帧缓存,也可以用来封装通用控制信息缓存(缓存类型需使用CTRL_MBUF_FLAG来指定)。Mbuf结构报头经过精心设计,原先仅占1个Cache Line。随着Mbuf头部携带的信息越来越多,现在Mbuf头部已经调整成两个Cache Line,原则上讲基础性、频繁访问的数据放在一个Cache Line字节,而将功能性扩展的数据放在第二个Cache Line字节。Mbuf报头包含包处

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值