DPDK : 内存管理和分配的解析

本文深入解析DPDK的EAL内存管理,包括两种内存模式、相关结构体、内存管理结构、分配与释放过程,以及底层实现。通过内存分配函数rte_malloc()和释放函数rte_free()阐述DPDK如何在malloc_heap上进行操作,并探讨了single-file-segments和page-per-file两种模式的映射关系。最后,总结了DPDK内存管理的特点,如双向链表结构和首次适应算法。
摘要由CSDN通过智能技术生成
说明

       这一篇文章主要是对DPDK的EAL(Environment Abstraction Layer)中内存管理和分配的解析,这是DPDK中ring, mempool, mbuf等的基础。
       由于个人水平所限,若所写的博文中存在错误,希望大家能帮忙指出。

一,DPDK的内存模式

       DPDK存在两种内存模式:

	1, legacy mode : 这一种为静态内存模式,即在初始化过程就根据配置分配所有的内存,并且这些内存页在application结束之前
不会归还给OS;而且也不会再向OS申请更多的内存。并且application使用DPDK的rte_malloc库申请内存时,若剩余可用的内存不足,则
直接返回错误。这种模式的优点是若一段内存空间的虚拟内存地址是连续的,那么其物理内存地址也是连续的。

	2, dynamic mode:这一种为动态内存模式,在初始化过程根据配置分配所需要的内存,并且这些内存页在application结束之前不会
归还给OS。若application使用DPDK的rte_malloc库申请内存时,若剩余可用的内存不足,则会先向操作系统申请内存,再将这些内存分配
给application。由于会动态地向OS申请内存,所以虚拟内存连续并不意味着物理内存连续。
	(对于向操作系统动态申请的内存,在application释放这些内存时,DPDK系统会将其归还给OS,不必等到application结束)
二,相关结构体的说明

       下面,先对一些结构体的字段进行说明(参考后面的图例能更容易的理解),能够帮助对后面的理解:

**********************************malloc_elem.h*****************************
struct malloc_elem {
	struct malloc_heap *heap;
	struct malloc_elem *volatile prev; //指向上一个malloc_elem
	/**< points to prev elem in memseg */
	struct malloc_elem *volatile next;  // 指向下一个malloc_elem
	/**< points to next elem in memseg */
	LIST_ENTRY(malloc_elem) free_list; //指向下一个free malloc_elem
	/**< list of free elements in heap */
	struct rte_memseg_list *msl;
	volatile enum elem_state state; //表明malloc_elem的状态: free, 或者busy
	uint32_t pad; //填充无效的内存区域
	size_t size; // 表示malloc_elem所表示的内存区域的大小(包含struct malloc_elem), 以字节为单位
	struct malloc_elem *orig_elem;  //指向最初的malloc_elem(即内
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值