dpdk中的librte_malloc库

DPDK的librte_malloc库提供malloc类似功能,用于从hugepage分配内存,适用于配置代码。该库在数据平面处理中较慢,但支持内存对齐和NUMA约束。内存分配包含覆盖保护和内存池,适用于初始化阶段。结构包括malloc_heap和malloc_elem,用于管理内存和空闲空间。释放内存时,会检查并整合相邻空闲块。
摘要由CSDN通过智能技术生成

dpdk中的librte_malloc库提供了能够分配任意大小内存的API。

该库的目标是提供类似malloc的函数从hugepage中分配内存,以及帮助应用程序移植。

通常情况下,这种类型的分配不应该在数据平面处理,因为其比基于内存池的分配更慢,

并且在分配和释放时会使用锁。

不过,可以将其用在配置代码中。

4.1 Cookies

如果在配置文件中打开CONFIG_RTE_MALLOC_DEBUG,

分配的内存会包含覆盖保护区域,以识别缓冲区溢出问题。

4.2 对齐与NUMA Constraints

rte_malloc()函数包含一个align参数,用来要求内存区域对齐到该值的倍数(必须是2的倍数)。

在支持NUMA的系统中,调用rte_malloc()函数时,会在调用该函数的进程所在的socket上分配内存。

同时该库也提供了一组API,使用户可以直接在指定的NUMA socket上分配内存,

或者在另一个core所在的NUMA socket上分配内存。

4.3 用例

应用程序在初始化时使用类似malloc这样的函数时,可以使用该库。

要在运行时分配/释放内存数据,如果应用程序对速度有要求,

请用内存池库代替本库。

如果要使用一块需要知道物理地址的内存块,如硬件设备使用的内存块,

则应该使用memory zone。

4.4 数据结构

在malloc库的内部使用两种数据结构类型:

struct malloc_heap: 用来管理每个socket上的空闲空间

struct malloc_elem: 分配的基本元素,由库内部管理的空闲空间。

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值