DPDK memory学习

本文详细介绍了DPDK内存管理的各个方面,包括启动时heap内存分配、rte_malloc、mempool及其API、mbuf相关API和DPDK eal的内存配置参数。讨论了mempool的性能优化,mempool_cache_init的作用,以及如何替换mempool操作。此外,还提到了mbuf外部数据缓冲区、IOMMU的IOVA模式,并提供了调试内存情况的API。
摘要由CSDN通过智能技术生成

总体结构

自定向下分别是物理内存,memzone,mempool和pktmbuf。

启动时heap内存分配的API

关键的数据结构是: 
struct malloc_heap跟踪空闲的空间。 
struct malloc_elem作为基本的alloc/free的单元。每一个block都是2的指数大小。 
代码是:

 
memzone_reserve_aligned_thread_unsafe

->malloc_heap_alloc

->malloc_heap_alloc_on_heap_id

-> heap_alloc

-> find_suitable_element

-> malloc_elem_free_list_index(size) // 在free list找到可用的.

https://doc.dpdk.org/guides-2.0/prog_guide/malloc_lib.html

rte_malloc相关的API

不推荐在实时核(RT core)使用,因为rte_malloc本身有spin lock。分配出来的内存是在同一个DPDK instance里共享的,使用的是hugepage的内存,比malloc性能更好,rte_malloc的方式比pool内存池的方式更慢一些。可以在配置的代码使用,或者启动时使用,而不是运行时大量收发包的代码。

类型 malloc rte_malloc
huge page 不强制 默认
numa node pin 不强制 默认
访问IOVA
支持IOVA连续内存 不强制
cache align分配 不强制 强制
分配时align
多处理器共享
多进程安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值