前言
《DPDK-内存管理分析一》中分析了DPDK底层组织管理大页内存的heap、queue、elem及相关的alloc函数,但是对于提及的memzone还未做出分析,本文继续。
DPDK Version: 17.11.2
Date: 2018-06-21, Created by HRG
正文
本文根据实际使用经验结合rte_common_memzone.c等文件,分析memzone的相关实现。
首先说一下实际使用体验,memzone形式的内存块alooc时效率并不高,耗时较多。从代码实现来看,循环较多,确实memzone本身的机制就不是为了高效率alloc内存的。
看一下memzone的结构体, 包含了zone的name、起始IO addr、virt addr、长度、对应的大页大小等。
/**
* A structure describing a memzone, which is a contiguous portion of
* physical memory identified by a name.
*/
struct rte_memzone {
#define RTE_MEMZONE_NAMESIZE 32 /**< Maximum length of memory zone name.*/
char name[RTE_MEMZONE_NAMESIZE]; /**< Name of the memory zone. */
RTE_STD_C11
union {
phys_addr_t phys_addr; /**< deprecated - Start