intel dpdk api rte_eal_hugepage_attach() 函数介绍
2013-07-09 19:07
357 查看
声明:此文档只做学习交流使用,请勿用作其他商业用途
author:朝阳_tony
E-mail : linzhaolover@gmail.com
Create Date: 2013-7-9 11:20:58 Tuesday
Last Change: 2013-7-9 11:21:42 Tuesday
转载请注明出处:http://blog.csdn.net/linzhaolove
此文中源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
这个函数,一般是在启动第二个dpdk相关的程序时,才会启动,获取第一次启动相关的hugepage配置信息;
主要判断/proc/sys/kernel/randomize_va_space这个文件中的值,我的系统取值吃2,说明地址空间随机使能了;
* 0 - address space randomization disabled
* 1/2 - address space randomization enabled
* negative error code on error
我技术水平有限,只能看懂部分内容,如有问题,可以留言,互相交流,互相学习!
author:朝阳_tony
E-mail : linzhaolover@gmail.com
Create Date: 2013-7-9 11:20:58 Tuesday
Last Change: 2013-7-9 11:21:42 Tuesday
转载请注明出处:http://blog.csdn.net/linzhaolove
此文中源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
1、函数用途
/* * This creates the memory mappings in the secondary process to match that of * the server process. It goes through each memory segment in the DPDK runtime * configuration and finds the hugepages which form that segment, mapping them * in order to form a contiguous block in the virtual memory space */ static int rte_eal_hugepage_attach(void)
这个函数,一般是在启动第二个dpdk相关的程序时,才会启动,获取第一次启动相关的hugepage配置信息;
2、函数详解
if (aslr_enabled() > 0)函数首先调用aslr_enabled()函数,去检查内核地址空间的随机是否使能,避免重复映射于第一次映射相同地址的虚拟地址;
主要判断/proc/sys/kernel/randomize_va_space这个文件中的值,我的系统取值吃2,说明地址空间随机使能了;
* 0 - address space randomization disabled
* 1/2 - address space randomization enabled
* negative error code on error
fd_hugepage = open(eal_hugepage_info_path(), O_RDONLY);去打开/var/run/.rte_hugepage_info文件,获取相关数据;
size = getFileSize(fd_hugepage); hp = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd_hugepage, 0);获取第一次hugepage的所有结构体信息,我之前配置的是1024,应该是有1024个,struct hugepage;
base_addr = mmap(mcfg->memseg[s].addr, mcfg->memseg[s].len, PROT_READ, MAP_PRIVATE, fd_zero, 0);这断代码是去向系统一块连续的,1024*2M个大小的虚拟空间,一次性申请,才能够连续;然后在释放它;这样系统应该会有一块连续的空余空间;
fd = open(hp[i].filepath, O_RDWR); if (fd < 0) { RTE_LOG(ERR, EAL, "Could not open %s\n", hp[i].filepath); goto error; } addr = mmap(RTE_PTR_ADD(base_addr, offset), hp[i].size, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, 0);这一段代码是,将之前的在/mnt/huge目录下创建的映射文件,在这打开,重新映射一遍,这时是不需要对物理地址排序,因为,之前的primary已经对物理地址进行了排序,现在每次映射获得的地址是连续的;
我技术水平有限,只能看懂部分内容,如有问题,可以留言,互相交流,互相学习!
相关文章推荐
- intel dpdk api rte_eal_hugepage_init() 函数介绍
- intel dpdk eal_hugepage_info_init() 函数介绍
- intel dpdk api rte_eal_hpet_init() 函数介绍
- intel dpdk rte_eal_cpu_init() 函数介绍
- intel dpdk api rte_eal_pci_init() 函数介绍
- php5.3 goto函数介绍和示例
- OpenCV中Haar-like特征人脸检测函数介绍
- 【Linux】【Process】【gdb】关于attach用法介绍清晰的,语言质变为理解
- 介绍几个array库的新函数
- ffmpeg结构体以及函数介绍(一)
- JavaScript中的console.log()函数详细介绍
- C/C++中时间函数的介绍
- SharePoint 2010 master page 控件介绍(3) :页面主体内容
- Tensorflow | Sequences | 常用函数介绍
- Linux网络编程--初等网络函数介绍(TCP)
- Android UiAutomator 自动化测试 断言函数介绍
- Linux下HugePage内存功能配置
- SSE4.1和SSE4.2 Intrinsics各函数介绍
- WinCE中串口驱动及接口函数介绍
- pfn_to_page 函数