大页面似乎卡住了

大页面似乎卡住了

我在 DPDK 上运行某些应用程序,为了节省内存,我通过设置“nr_hugepages”不断调整大页面的数量

echo 8192> /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

cat /proc/meminfo | grep -i huge  
AnonHugePages:         0 kB
HugePages_Total:    8192
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

free -g
              total        used        free      shared  buff/cache   available
Mem:            188          17         159           0          11         170
Swap:           191           0         191

然而,当我达到 64K 时,我似乎陷入了困境,无法再次更改 Hugepages

echo 65536  > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

sudo hugeadm --pool-list
      Size  Minimum  Current  Maximum  Default
   2097152    65536    65536    65536        *
1073741824        0        0       

cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
HugePages_Total:   65536
HugePages_Free:       64
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

现在,即使我将 nr_hugepages 设置为 512

echo 512  > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

nr_hugepages 读回为 64K

cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
65472

答案1

我刚好遇到过这个问题,最后找到了这个问题的根本原因和解决方法。在使用 DPDK 版本 18.05 之前的 DPDK 应用程序时,这种情况很常见。

问题是当我们停止 DPDK 应用程序或 DPDK 应用程序崩溃时。DPDK 创建或使用的大页面不会自动释放。它希望由辅助进程重用。

问题可能是你删除了 /mnt/huge 并尝试修改 nr_hugepage

Numa case:
echo 0 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages

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

non-NUMA case:
echo 0 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

取消映射大页面时要遵循的步骤:

  1. ls -l /mnt/huge/ .
    rm -rf rtemap_* (如果有“rtemap_*”则全部删除)
  2. 安装|grep 巨大。
   hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
  1. ls /dev/hugepages
rtemap_0     rtemap_1202  rtemap_1408  rtemap_1613  rtemap_1819  rtemap_2023  rtemap_387  rtemap_592  rtemap_798
rtemap_1     rtemap_1203  rtemap_1409  rtemap_1614  rtemap_182   rtemap_2024  rtemap_388  rtemap_593  rtemap_799

如果存在上述文件,请将其全部删除。

  1. sudo umount /mnt/huge
  2. sudo rm -R /mnt/huge
  3. 然后将0写入开头提到的nr_hugepages。

示例输出:

[root@localhost hugepages]# cat /proc/meminfo | grep Huge
AnonHugePages:    161792 kB
HugePages_Total:    4096
HugePages_Free:     4096
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

# cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
2048
# cat /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
2048
# cat /proc/sys/vm/nr_hugepages
4096
# cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
4096

# echo 0 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
# echo 0 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
# cat /proc/meminfo | grep Huge
AnonHugePages:    161792 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

相关内容