总体结构
自定向下分别是物理内存,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 | 是 | 是 |
多处理器共享 | 否 | 是 |
多进程安全 | 否 | 是 |