1. 程式人生 > >[development][dpdk][hugepage] 大頁內存的掛載

[development][dpdk][hugepage] 大頁內存的掛載

col hugepages 大頁內存 com over html 禁用 ota -m

參考:

[development][dpdk][hugepage] 為不同的結點分配不同大小的大頁內存

完成了以上內容之後, 下一步需要做的是掛載, 大頁內存只有被掛載了之後,才能被應用程序使用.

掛載方法如下: 參考dpdk文檔: http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html

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

如果是有1G的大頁, 需要給定默認參數 pagesize=1G, 否則將使用默認的大小.

nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0
0

參考: https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt

CentOS 7 裏面, 有一個service : dev-hugepages.mount 默認將會對大頁內存進行掛載:

[root@dpdk crisp]# mount -l |grep huge
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)

參考: https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems/

引用一段話:

So you are seeing all kinds of weird file systems in
the output of mount(8) that are not listed in /etc/fstab, and you wonder what those are, how you can get rid of them, or at least change their mount options.

上文提到, 如過想增加這個參數, 可以在 /etc/fstab 中進行掛載.

同時禁用掉dev-hugepages.mount ???

systemctl mask dev-hugepages.mount

當然還有一招, 文中沒提, 但是我莫名的, 天然喜歡後者:

把dev-hugepages.mount 改一下.

/etc/fstab 也是被 systemd管理的, 實際上, /etc/fstab 和 mount.mount 最終是被統一管理的, 以掛載點, 即目錄名, 作為唯一識別的標識.

優先順序由前到後依次為: /etc下的mount.mount > /etc/fstab > /usr下的mount.mount

摘自: https://www.freedesktop.org/software/systemd/man/systemd.mount.html#

If a mount point is configured in both /etc/fstab and a unit file that is stored below /usr, the former will take precedence. If the unit file is stored below /etc, it will take precedence. 
This means: native unit files take precedence over traditional configuration files, but this is superseded by the rule that configuration in /etc will always take precedence over configuration in /usr.

基於以上:

  可以選擇在/etc/fstab中增加一個/dev/hugepages 掛載點, 來覆蓋 dev-hugepages.mount

[root@dpdk ~]# cat /etc/fstab |grep huge
nodev /dev/hugepages hugetlbfs defaults,nofail,pagesize=1G 0 0
[root@dpdk ~]# 
[root@dpdk ~]# mount -l |grep hugetlbfs
nodev on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=1G)

  或寫個增加了選項的 /etc/systemd/system/dev-hugepages.mount 文件, 來覆蓋默認參數.

  參數的具體寫法: https://www.freedesktop.org/software/systemd/man/systemd.mount.html#Options

[root@dpdk ~]# cp /usr/lib/systemd/system/dev-hugepages.mount  /etc/systemd/system/
[root@dpdk ~]# diff /usr/lib/systemd/system/dev-hugepages.mount  /etc/systemd/system/dev-hugepages.mount 
20a21
> Options=pagesize=1G
[root@dpdk ~]# 
[root@dpdk ~]# mount -l |grep hugepages
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=1G)
[root@dpdk ~]# 

這個時候只是做了基本的系統準備工作, 實際上, 還沒有配置使用大頁內存:

[root@dpdk ~]# numastat -m |grep Huge
AnonHugePages               8.00            0.00            8.00
HugePages_Total             0.00             0.00            0.00
HugePages_Free              0.00             0.00            0.00
HugePages_Surp              0.00            0.00            0.00
[root@dpdk ~]# 

手工方法:

[root@dpdk ~]# echo 4 > /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages 
[root@dpdk ~]# numastat -m |grep Huge
AnonHugePages               8.00            0.00            8.00
HugePages_Total             0.00         2048.00         2048.00
HugePages_Free              0.00         2048.00         2048.00
HugePages_Surp              0.00            0.00            0.00
[root@dpdk ~]# 

這樣, 只在node1上分配好了大頁內存, 而node0上沒有.

[development][dpdk][hugepage] 大頁內存的掛載