DPDK-大页内存使用分析

本文深入分析DPDK如何在Linux系统中使用大页内存,包括通过mmap映射大页到用户空间,初始化内存模块,以及如何处理大页内存的连续性,确保物理地址和虚拟地址尽可能连续。通过对DPDK源码的解读,揭示了DPDK内存管理的细节。

前言

《深入浅出DPDK》 2.7.4章节介绍大页内存使用方法如下:

#echo > 1024 /sys/kernel/mm/hugepages/hupages-2048KB/nr_hugepages 

#mkdir /mnt/huge

#mount -t hugetlbfs nodev /mnt/huge

DPDK程序运行时,会使用mmap ()系统调用把大野映射到用户态的虚拟地址空间,然后就可正常使用了。

本文通过源码分析DPDK在初始化过程中针对大页内存这一块进行的处理细节。

DPDK Version: 17.11.2

Date:2018-06-18, Created by HRG


正文

代码流程主要分两块,1、获取用户的大页内存配置;2、根据配置初始化并映射相关的大页内存

eal.c rte_eal_init()

primary进程调用eal_hugepage_info_init函数,获取用户配置的大页大小和页数。

	if (internal_config.no_hugetlbfs == 0 &&
			internal_config.process_type != RTE_PROC_SECONDARY &&
			eal_hugepage_info_init() < 0) {
		rte_eal_init_alert("Cannot get hugepage information.");
		rte_errno = EACCES;
		rte_atomic32_clear(&run_once);
		return -1;
	}

初始化内存模块,这里实现了大页内存到用户空间的映射,后面进程就可以正常使用大页内存了。

	if (rte_eal_memory_init() < 0) {
		rte_eal_init_alert("Cannot init memory\n");
		rte_errno = ENOMEM;
		return -1;
	}

eal_hugepage_info.c eal_hugepage_info_init()

最多支持3种大小的Page:2M、4M、1G ?忘了在哪段代码看到了,具体哪三个不记得了。


	//本函数参照下面这个命令进行说明
	//echo > 1024 /sys/kernel/mm/hugepages/hupages-2048KB/nr_hugepages 

	//打开用户echo配置对应的路径
	//static const char sys_dir_path[] = "/sys/kernel/mm/hugepages";
	dir = opendir(sys_dir_path);

	//循环读取路径名,因为用户可能echo了多次配置了多种大页大小
	for (dir
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TheWayYouMakeMeFeel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值