hugepage設置相關總結


版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/shaoyunzhe/article/details/54614077
HugePages_Total:      16     //預留HugePages的總個數
HugePages_Free:       16     //池中尚未分配的 HugePages 數量,真正空閑的頁數等於HugePages_Free - HugePages_Rsvd
HugePages_Rsvd:        0     //表示池中已經被應用程序分配但尚未使用的 HugePages 數量
HugePages_Surp:        0     //這個值得意思是當開始配置了20個大頁,現在修改配置為16,那么這個參數就會顯示為4,一般不修改配置,這個值都是0
Hugepagesize:    1048576 kB //每個大頁的大小

 

1、hugepage永久 配置 
修改/etc/default/grub 中的 GRUB_CMDLINE_LINUX,然后運行 grub 更新並重啟系統:

default_hugepagesz=1G hugepagesz=1G hugepages=16 hugepagesz=2M hugepages=2048 iommu=pt intel_iommu=on isolcpus=1-13,15-27
#grub2-mkconfig -o /boot/grub2/grub.cfg

#reboot

注意:上面設置的是系統預留內存,如果是單cpu,預留大小肯定就是上面設置的值,如果是numa系統,每個cpu node平分上面設置的大小(比如系統有cpu node 0和node1,hugepages=2048,在查看/sys/devices/system/node/node0/hugepages/nr_hugepages時,大小肯定是1024)命令 echo ‘vm.nr_hugepages=2048' > /etc/sysctl.d/hugepages.conf也可以設置,但一定注意,有時發現grub設置的大頁大小和實際大小不一樣時,可能就是/etc/sysctl.d/hugepages.conf里的參數在作怪。默認情況下就是系統當前所有在線NUMA節點平均分配這些HugePages,除非那個NUMA節點本身沒有足夠的可用連續內存來生成 HugePages,那么此時HugePages將由另外一個NUMA節點生成hugepage 的數量和類型可根據系統中的可用內存進行調整。 isolcpus 參數支持我們將某些 CPU 與 Linux 調度程序隔離,以便基於 DPDK 的應用能夠鎖定到這些 CPU 上。

重啟系統后,查看內核 cmdline 並按照如下方式分配 hugepage。

 

接下來是安裝 hugepage 文件系統,加載 vfio-pci 用戶空間驅動程序。

#mkdir -p /mnt/huge

#mkdir -p /mnt/huge_2mb

#mount -t hugetlbfs hugetlbfs /mnt/huge (沒有-o參數,掛載系統默認hugepage大小)
默認大小指的是上圖顯示的Hugepagesize:    1048576 kB,也就是1G大頁(cat /proc/meminfo | grep Hugepagesize)。

#mount -t hugetlbfs none /mnt/huge_2mb -o pagesize=2MB(-o參數指定掛載2M的hugepage大小)


2、臨時配置

Hugepage能夠動態預留,執行命令:

$ echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

上面通過沒有節點關聯的系統分配內存頁。如果希望強制分配給指定的NUMA節點,你必須做:

#echo 1024 >/sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages

#echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
hugepages-2048kB指預留2M的大小為1024個,一共2*1024M,hugepages-1048576kB指預留1G的大小

 

3、查看HugePages情況:

cat /proc/meminfo 

 

4、查看掛載情況

 cat /proc/mounts

 

會看見hugetlbfs /mnt/huge hugetlbfs rw,relatime 0 0這樣的,這就是掛載了大頁,在free不夠時,在確定可以umount時,把這些umount一下就可以了,vpp代碼自動掛載大頁的,ovs+dpdk需要手動掛載

 

5、vpp關於大頁的一些問題

A:有時啟動vpp會報:

 

導致這原因一般是dpdk默認要求的大頁內存大小太大,而實際預留的太小,就必須在vpp啟動配置文件startup.conf中修改dpdk屬性socket-mem,改小一點

 

B:vpp默認掛載大頁的路徑是/run/vpp/hugepages,有時vpp\啟動不了,查看cat /proc/mounts,發現掛載了多個/run/vpp/hugepages,但umount又卸載不完,

[root@localhost /]# umount /run/vpp/hugepages

umount: /run/vpp/hugepages: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

可以使用以下解決辦法

 

使用fuser命令,先確認有那些進程需要殺掉

[root@localhost /]# fuser -cu /run/vpp/hugepages

/mnt:                15060c(root)

其次向進程發出SIGKILL信號

[root@localhost /]# fuser -ck /run/vpp/hugepages

/mnt:                15060c

確認

[root@localhost /]# fuser -c /run/vpp/hugepages

[1]+  Killed                  dd if=1g of=/dev/null bs=1M  (wd:/run/vpp/hugepages)

(wd now: /)

6 ovs+dpdk大頁問題

有時沒法重啟服務器只能配置臨時大頁時,但啟動ovs+dpdk會報錯,

A:

 

上面顯示的是有4個1073741824(1G)大小的大頁,2048個2097152(2M)大小的大頁,但都沒有掛載,必須手動掛載大頁,需要執行mount -t hugetlbfs hugetlbfs /mnt/huge

 

B:

 

這是因為配置的大頁大小不滿足ovs+dpdk大頁需求,需要增大臨時大頁配置

 

C:

 

這種情況具體原因就是沒有mount!必須執行

 

mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
 

 

比如原來的設置是4096   echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

AnonHugePages:   5218304 kB
HugePages_Total:     4096
HugePages_Free:     4096
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

現在先設置 echo 128 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

再設置echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

估計是內存連續問題造成的

7、其他問題

有時,你會發現大頁

 

不管怎樣配置,free就是0,top或是free命令,查看內存基本使用完了,但是我們並沒有啟動vpp或是ovs,這個很大可能就是其他進程使用了hugepage,使用以下命令查找

find /proc/*/smaps | xargs grep -ril "anon_hugepage"

原理請查看https://toutiao.io/posts/n4hzg1/preview里hugepage內容
————————————————
版權聲明:本文為CSDN博主「懶少」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/shaoyunzhe/article/details/54614077


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM