内存大页设置方法

dpdk初始化时,会将系统中生效的大页全部拿出并按照大页从大到小的顺序进行排列(1GB -> 2MB)。
猜想:分配内存时,应该是优先从1GB中分配的。

查看系统支持哪些内存大页

通过查看cpu信息的flag可以看到系统是否支持内存大页

cat /proc/cpuinfo |grep pge  ==>>   支持2MB内存大页
cat /proc/cpuinfo |grep pdpe1gb  ==>>   支持1gb内存大页

大页生效方法

方法1.

  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"
  1. 使修改生效到启动信息中
grub2-mkconfig -o /boot/grub2/grub.cfg
  1. 重启系统
reboot now
  1. 查看内核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大页的情况下

  1. 手动设置内存页数
echo 1 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages     (node0、node1......)
  1. 手动挂载
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章