DPDK内存管理——初始化

本文详细介绍了DPDK内存管理的初始化过程,包括eal_hugepage_info_init()、rte_eal_config_create()、rte_eal_hugepage_init()、rte_eal_memdevice_init()和rte_eal_memzone_init()五个步骤。DPDK利用hugetlbfs提升性能,通过初始化将内存页组织管理,便于后续操作。内容涉及hugetlbfs配置信息的获取、内存映射、物理地址与虚拟地址的对应、Socket分配以及内存块的连续性检查。
摘要由CSDN通过智能技术生成

1. 前言

DPDK通过使用hugetlbfs,减少CPU TLB表的Miss次数,提高性能。

2. 初始化

DPDK的内存初始化工作,主要是将hugetlbfs的配置的大内存页,根据其映射的物理地址是否连续、属于哪个Socket等,有效的组织起来,为后续管理提供便利。

2.1 eal_hugepage_info_init()

eal_hugepage_info_init()主要是获取配置好的Hugetlbfs的相关信息,并将其保存在struct internal_config数据结构中。

主要工作如下:

1、读取/sys/kernel/mm/hugepages目录下的各个子目录,通过判断目录名称中包含"hugepages-"字符串,获取hugetlbfs的相关子目录,并获取hugetlbfs配置的内存页大小。例如:

  [root@YMOS_DEFAULT ~]# ls -ltr /sys/kernel/mm/hugepages/
  total 0
  drwxr-xr-x 2 root root 0 2014-11-04 15:54 hugepages-2048kB

2、通过读取/proc/mounts信息,找到hugetlbfs的挂载点。例如:

  root@Ubuntu:~# cat /proc/mounts 
  rootfs / rootfs rw 0 0
  sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
  proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
  udev /dev devtmpfs rw,relatime,size=1016836k,nr_inodes=254209,mode=755 0 0
  devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
  tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=205128k,mode=755 0 0
  /dev/disk/by-uuid/fd1dbca3-ac30-4bac-b93a-0d89b0fd152c / ext4 rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
  none /sys/fs/fuse/connections fusectl rw,relatime 0 0
  none /sys/kernel/debug debugfs rw,relatime 0 0
  none /sys/kernel/security securityfs rw,relatime 0 0
  none /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0
  none /run/shm tmpfs rw,nosuid,nodev,relatime 0 0
  none /media/sf_F_DRIVE vboxsf rw,nodev,relatime 0 0
  gvfs-fuse-daemon /home/chuanxinji/.gvfs fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
  /dev/sr0 /media/VBOXADDITIONS_4.3.10_93012 iso9660 ro,nosuid,nodev,relatime,uid=1000,gid=1000,iocharset=utf8,mode=0400,dmode=0500 0 0
  none /mnt/huge hugetlbfs rw,relatime 0 0
  root@Ubuntu:~#

3、通过读取/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages,获取配置的hugepages个数。

  root@Ubuntu:~# cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
  64
  root@Ubuntu:~#

4、以打开文件的方式,打开挂载点目录,为其FD设置互斥锁,Why??

上述所有获取的信息,都保存在internal_config.hugepage_info[MAX_HUGEPAGES_SIZE]中,hugepage_info数据结构如下:

struct hugepage_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值