dpdk初始化时,会将系统中生效的大页全部拿出并按照大页从大到小的顺序进行排列(1GB -> 2MB)。
猜想:分配内存时,应该是优先从1GB中分配的。
查看系统支持哪些内存大页
通过查看cpu信息的flag可以看到系统是否支持内存大页
cat /proc/cpuinfo |grep pge ==>> 支持2MB内存大页
cat /proc/cpuinfo |grep pdpe1gb ==>> 支持1gb内存大页
大页生效方法
方法1.
- 修改/etc/default/grub,在 GRUB_CMDLINE_LINUX 行增加需要的默认大页信息
[root@R740-R ~]# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=128 crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
- 使修改生效到启动信息中
grub2-mkconfig -o /boot/grub2/grub.cfg
- 重启系统
reboot now
- 查看内核cmdline并确认默认大页是否设置成功
[root@R740-R ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro hugepagesz=1048576K hugepages=128 crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap default_hugepagesz=1G hugepagesz=1G hugepages=128 isolcpus 2-15 iommu=pt intel_iommu=on nohz_full=2-15 rcu_nocbs=2-15 rhgb quiet
[root@R740-R ~]# cat /proc/meminfo |grep Huge
AnonHugePages: 5216256 kB
HugePages_Total: 128
HugePages_Free: 118
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 1048576 kB
如上,当 Hugepagesize 为 1048576 kB时,说明默认大页设置生效
方法2
在方法1
设置大页失败的情况下(现象:默认为2MB,且页数为0,查看系统日志,未发现明显错误,以huge只发现有普通日志:prealloac 0 size)
在确认系统支持1GB大页的情况下
- 手动设置内存页数
echo 1 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages (node0、node1......)
- 手动挂载
mkdir /mnt/huge_1GB
mount -t hugetlbfs nodev /mnt/huge_1GB -o "pagesize=1GB"
注:手动设置,重启后失效;并且可能存在在echo时无法生效的情况(原因可能是 系统启动时间过长,碎片太多,无法分配足够的大页)
重启生效,可以将方法2
设置在自己程序的启动脚本中,或者在 /etc/fstab 加入
nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0 0