內存大頁設置方法

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章