我在 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
取消映射大页面时要遵循的步骤:
- ls -l /mnt/huge/ .
rm -rf rtemap_* (如果有“rtemap_*”则全部删除) - 安装|grep 巨大。
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
- 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
如果存在上述文件,请将其全部删除。
- sudo umount /mnt/huge
- sudo rm -R /mnt/huge
- 然后将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