intel dpdk eal_hugepage_info_init() 函数介绍
2013-07-07 19:03
661 查看
声明:此文档只做学习交流使用,请勿用作其他商业用途
author:朝阳_tony
E-mail : linzhaolover@gmail.com
Create Date:2013-7-7 16:21:15 Sunday
Last Change: 2013-7-7 16:21:22 Sunday
转载请注明出处:http://blog.csdn.net/linzhaolove
此文中源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
而在Redhat Linux中,内存都是以页的形式划分的,默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。这种增大的内存页尺寸在Linux 2.1中,称为Big page;在AS 3/4中,称为Hugepage。
如果系统有大量的物理内存(大于8G),则物理32位的操作系统还是64位的,都应该使用Hugepage。
注意:使用Hugepage内存是共享内存,它会一直keep在内存中的,不会被交换出去,也就是说使用hurgepage的内存不能被其他的进程使用,所以,一定要合理设置这个值,避免造成浪费。
摘自:http://jackyrong.iteye.com/blog/723172
去获取 当前系统的hugepage 信息;
num_pages 是当前配置了多少个或者自己制定分配了多少个2M大小的memory;
hpi->hugedir是hugepage 配置目录,
author:朝阳_tony
E-mail : linzhaolover@gmail.com
Create Date:2013-7-7 16:21:15 Sunday
Last Change: 2013-7-7 16:21:22 Sunday
转载请注明出处:http://blog.csdn.net/linzhaolove
此文中源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
hugepage 介绍
系统进程是通过虚拟地址访问内存,但是CPU必须把它转换程物理内存地址才能真正访问内存。为了提高这个转换效率,CPU会缓存最近的虚拟内存地址和物理内存地址的映射关系,并保存在一个由CPU维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。而在Redhat Linux中,内存都是以页的形式划分的,默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。这种增大的内存页尺寸在Linux 2.1中,称为Big page;在AS 3/4中,称为Hugepage。
如果系统有大量的物理内存(大于8G),则物理32位的操作系统还是64位的,都应该使用Hugepage。
注意:使用Hugepage内存是共享内存,它会一直keep在内存中的,不会被交换出去,也就是说使用hurgepage的内存不能被其他的进程使用,所以,一定要合理设置这个值,避免造成浪费。
摘自:http://jackyrong.iteye.com/blog/723172
1、函数作用
eal_hugepage_info_init去获取 当前系统的hugepage 信息;
2、函数详解
DIR *dir = opendir(sys_dir_path);打开"/sys/kernel/mm/hugepages"文件夹,hugepage的配置信息在这;
hpi->hugepage_sz = rte_str_to_size(&dirent->d_name[dirent_start_len]); hpi->num_pages = get_num_hugepages(dirent->d_name); hpi->hugedir = get_hugepage_dir(hpi->hugepage_sz);上面这段程序,获得当前hugepage的页大小,默认的应该是2048kB;
num_pages 是当前配置了多少个或者自己制定分配了多少个2M大小的memory;
cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages我的是1024,你也可以自己设定;
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
hpi->hugedir是hugepage 配置目录,
/sys/kernel/mm/hugepages/hugepages-2048kB/
/* sort the page directory entries by size, largest to smallest */ for (i = 0; i < num_sizes; i++){ unsigned j; for (j = i+1; j < num_sizes; j++) if (internal_config.hugepage_info[j-1].hugepage_sz < \ internal_config.hugepage_info[j].hugepage_sz) swap_hpi(&internal_config.hugepage_info[j-1], &internal_config.hugepage_info[j]); }按照page尺寸,排序目录,由于我的机器只有2048kB这个尺寸,所以,无需排序;
相关文章推荐
- intel dpdk api rte_eal_hugepage_init() 函数介绍
- intel dpdk api rte_eal_hugepage_attach() 函数介绍
- intel dpdk api rte_eal_hpet_init() 函数介绍
- intel dpdk rte_eal_cpu_init() 函数介绍
- intel dpdk api rte_eal_pci_init() 函数介绍
- SystemParametersinfo函数介绍
- linux i2c子系统代码分析5 ---操作函数i2c_new_device i2c_new_probed_device i2c_register_board_info介绍
- Servlet的几个方法介绍(init() 、service()、doGet() 、doPost()、destroy()、getServletConfig()、getServletInfo())
- Jquery Mobile中pageinit等函数执行两次的问题【终极解决】
- info page 简要介绍
- cocos2dx-3.0(24) onEnter()、onExit()、init()等场景生命周期函数介绍
- linux i2c子系统代码分析2 ---操作函数i2c_init介绍
- page_address_init 高端内存初始化函数
- 使用MyBatis+Mysql实现分页的插件PageInfo使用介绍
- 实现Asp.Net里的Page页面上的函数可有可无(Page_Init等)
- 实现Asp.Net里的Page页面上的函数可有可无(Page_Init等)
- SystemParametersinfo函数介绍
- page_address_init 函数
- I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
- cocos2dx-3.0(24) onEnter()、onExit()、init()等场景生命周期函数介绍