intel dpdk eal_hugepage_info_init() 函数介绍

声明:此文档只做学习交流使用,请勿用作其他商业用途

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的内存不能被其他的进程使用,所以,一定要合理设置这个值,避免造成浪费。

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这个尺寸,所以,无需排序;









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值