总体结构

自定向下分别是物理内存,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 | 是 | 是 |

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

2313

被折叠的 条评论
为什么被折叠?



